1 字段資料型別選擇
1.1 各資料型別占用的位元組數
tinyint 1 位元組
smallint 2 個位元組
mediumint 3 個位元組
int 4 個位元組
integer 4 個位元組
bigint 8 個位元組
float(x) 4 如果 x < = 24 或 8 如果 25 < =x < = 53
float 4 個位元組
double 8 個位元組
double precision 8 個位元組
real 8 個位元組
decimal(m,d) m位元組(d+2 , 如果m
numeric(m,d) m位元組(d+2 , 如果m
日期和時間型別
列型別 需要的儲存量
date 3 個位元組
datetime 8 個位元組
timestamp 4 個位元組
time 3 個位元組
year 1 位元組
串型別列型別 需要的儲存量
char(m) m位元組,1 <= m <=255
varchar(m) l+1 位元組, 在此l <= m和1 <= m<= 255
tinyblob, tinytext l+1 位元組, 在此l< 2 ^ 8
blob, text l+2 位元組, 在此l< 2 ^ 16
mediumblob, mediumtext l+3 位元組, 在此l< 2 ^ 24
longblob, longtext l+4 位元組, 在此l< 2 ^ 32
enum('value1','value2',...) 1 或 2 個位元組, 取決於列舉值的數目(最大值65535)
set('value1','value2',...) 1,2,3,4或8個位元組,取決於集合成員的數量(最多64個成員)
其中,需要特別注意的是由於timestamp型別占用四個位元組,因此只能儲存到2023年
1.2 char和varchar抉擇原則
原則一:資料長度差不多一致選擇char,如身份證號,否則varchar;
原則二:資料長度最大不超過50bytes,選擇char(如果列很少用,那麼基於空間和io考慮,則應該採用varchar);
原則三:一般不宜定義超過50bytes的char型別字段;
1.3 decimal和float抉擇原則
原則一:decimal儲存精確資料;
原則二:float儲存非精確資料(儲存空間開銷小);
1.4 時間型別儲存
1.4.1 int儲存
優點:只有四個位元組,字段長度比datetime小;
缺點:由於只有四個位元組,只能儲存到2023年;
2 資料庫設計的其他原則
2.1 盡量避免使用外來鍵
原因:一、降低資料匯入的效率;
二、增加維護成本;
三、雖然不建議使用外來鍵,但是相關聯的列一定要加上索引;
2.2 避免使用觸發器
原因:一、降低資料匯入的效率;
二、可能出現意想不到的資料異常;
三、使業務邏輯變得複雜
2.3 嚴禁使用預留字段
原因:一、資料型別不明確;
二、不知道需要儲存的內容,名稱不明確,使用時需要更名;
三、第二點的更名造成的維護成本和新增字段成本相等。
2.4 反正規化化設計
原因:使用空間換時間,如資料冗餘
2.5 建立索引的原則
原則一:出現在where從句,group by從句、order by從句的列;
原則二:可選擇性高的列要放在索引前面;
原則三:索引中不要包括太長的資料;
3 資料中適合的操作
3.1 批量操作優於逐條操作;
3.2 禁用select * 這樣的查詢;
3.3 控制使用使用者自定義函式;
3.4 不要使用資料庫中的全文索引;
4 垂直拆分
原則一:經常查詢的列放在一起;
原則二:text、blob放到附加表;
資料庫表設計原則小技巧
1.原始單據與實體之間的關係 可以是一對 一 一對多 多對多的關係。在一般情況下,它們是一對一的關係 即一張原始單據對應且只對應乙個實體。在特殊情況下,它們可能是一對多或多對一的關係,即一張原始單據對應多個實體,或多張原始單據對應乙個實體。這裡的實體可以理解為基本表。明確這種對應關係後,對我們設計錄...
資料庫小技巧
1.返回第乙個非空數值 select coalesce null,null,null,w3schools.com null,example.com 返回 w3schools.com select coalesce null,1,2,w3schools.com 返回 1 應用 將乙個欄位中空值全部替換...
資料庫設計技巧
1.設計資料庫之前 需求分析階段 1 理解客戶需求,詢問使用者如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發的繼續,還要經常詢問客戶保證其需求仍然在開發的目的之中。2 了解企業業務可以在以後的開發階段節約大量的時間。3 重視輸入輸出。在定義資料庫表和字段需求 輸入 時,首先應檢查現有的或者已經...