1.數據庫設計範式
2NF:1NF的基礎上面,非主屬性完全依賴於主關鍵字
3NF:屬性不依賴於其它非主屬性 , 消除傳遞依賴
2.數據庫字段選擇
各類型取值範圍:(m 爲總長度,d爲小數位數)
bit m爲每一個值所佔的位數,範圍1-64,默認1
tinyint unsigned 取值0 to 255,signed 取值-128 to 127
bool,Boolean 同tinyint(1),0爲false,非0爲true
smallint unsigned 取值0 to 65535,signed取值-32768 to 32767
medumint unsigned 取值 0 to 16777215.,signed 取值 -8388608 to 8388607.
int unsigned 取值 0 to 4294967295,signed:-2147483648 to 2147483647.
bigint unsigned: 0 to18446744073709551615,signed -9223372036854775808 to9223372036854775807.
decimal(m,d) m爲值的總長度,默認爲10,最大65;d爲小數位數,默認爲0,最大30
float(m,d) signed -3.402823466E+38 to -1.175494351E-38, 0, unsigned 1.175494351E-38 to3.402823466E+38
double(m,d) signed:1.7976931348623157E+308 to -2.2250738585072014E-308, 0, unsigned:2.2250738585072014E-308 to 1.7976931348623157E+308.
float(p) p爲0-24 將以float處理,25-53將以double處理
時間日期 默認以0格式表示,第一行timestamp默認爲當前時間
date '1000-01-01' to '9999-12-31'
datetime '1000-01-01 00:00:00' to '9999-12-31 23:59:59'
timestamp '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
time '-838:59:59' to '838:59:59'.
YEAR[(2|4)] 2: 70 to 69 4: 1901 to 2155,
字符串 默認爲空,enum列默認爲第一個值
char(m) 定長,m最大值255,默認爲1。可設爲char(0):存放null和空值
varchar(m) 不定長,m最大值65535
binary(m) 定長二進制
varbinary(m) 不定長二進制
tinyblob 最大值255字節
blob(m) 最大65535字節,使用2字節來記錄字節數
mediumblob 最大1677725字節,3字節記錄長度
longblob 最大4G字節,由參數和可用內存控制,使用4字節記錄長度
tinytext 最大255字符,由具體字符集控制,使用一個字節來記錄字節數
text 最大65535字符,由具體字符集控制,使用2個字節來記錄字符數
mediumtext 最大1677725字符,由具體字符集控制,使用3個字節來記錄字符數
longtext 最大4G字符,由具體字符集控制,使用4個字節來記錄字符數
enum mysql內部用數值存儲,最大可存儲65535個值,每個值有且只能有enum中一個值
set 每個值爲set的真子集,也可爲0。最大可以有64個成員。mysql 內部使用數值存儲
3.結論
- 經常變化的字段用varchar;
- 知道固定長度的用char;
- 儘量用varchar;
- 超過255字節的只能用varchar或者text;
- 能用varchar的地方不用text;
- 能夠用數字類型的字段儘量選擇數字類型而不用字符串類型的(電話號碼),這會降低查詢和連接的性能,並會增加存儲開銷。這是因爲引擎在處理查詢和連接回逐個比較字符串中每一個字符,而對於數字型而言只需要比較一次就夠了