天天看點

資料庫設計字段類型設定經驗

将過去在開發中體會到經驗整理出來。今天貼出來,整理,做個備忘。

tinyint 是-128到128 。當屬性設定為unsigned的時候。最大值就是255了。現在知道為什麼需要設定為unsigned屬性了。原來是為了最大限度的使用給予的存儲空間。如果不設定。那麼假如你的值都是正數的。那麼-128這一百多個數字就相當于是浪費了。

tinyint會自動設定為tinyint(3)

smallint  不設定unsigned的時候,也有3萬多的樣子。

tinytext 就是255個位元組。大概就是存儲127個中文的樣子 tinytext就相當于varchar類型。把它看成這樣的該類型就容易了解了。

int 類型phpmyadmin預設會設定int(10)

概念糾正:原來一直以為這裡的10表示位數。直到有次想儲存1101061021496,結果在字段中的值都變成了:4294967295。 看MySQL手冊上說:

(int後面括号的數字)顯示寬度并不限制可以在列内儲存的值的範圍,也不限制超過列的指定寬度的值的顯示。

int的範圍:-2147483648到2147483647。剛好是10個位,那麼就是數十億級别的數字。資料庫設計經驗:像訂單的值非常大。不确定,如果達到10位數,還不如使用varchar類型。fangwei就沒有使用int,而是varchar類型

從上面也告訴我一個經驗:如果儲存在資料庫的值都變成一樣的。也就是無論我是1101061021496 還是1101061021569,結果都變成了固定的值,比如4294967295。那麼可以考慮确認是否是資料庫該字段的範圍問題。這樣的問題出現過好幾次了。就是沒有掌握思路。導緻浪費了不少時間。

将字段設定為not null 還出于另外一種考慮:mysql表的列中包含null的話,那麼該列不會包含在所有中。也就是使用索引是無效的。所有,考慮今後會使用索引的字段,就要設定字段屬性是not null。

如果你要儲存NULL,手動去設定它,而不是把它設為預設值。

考慮到這個字段今後會作為查詢關鍵字使用like的形式進行搜尋。那麼要将該字段定義成索引。這樣使用like查詢就會更快。

現在終于體會到到國外作者書籍上提到:設計資料庫之前要問自己,之後會查詢哪些資料。  考慮了這些,以後有什麼查詢需要。結構都能适應了。

//////////////////////////////////////////////////////////////////////////////////////////////

2011.1.19 關于設計大流量網站資料庫,會員分表或者分庫的設計考慮:

主鍵不要設為自增型。設定為自增型的後果就是:今後無法分離在不同的mysql資料庫伺服器上。比如id編号由于是自增的,是以兩個資料庫中可能會出現使用者編号都是10005的情況。

但是,mysql主鍵會自動設定為自增型。可以用另外一個字段來作為辨別符。而不是自增型id号。方法:新增一個字段作為行的辨別符。具體設計:一個表做兩個字段,一個是id作為主鍵,自增型,另外一個是uid,作為使用者的辨別。

程式判斷上,是以uid作為判斷使用者的依據。而不是id主鍵作為判斷依據(程式上的失誤,改動比起資料庫設計失誤改動容易得多。因為你資料已經入庫了。在修改起來就比較難了)