mysql資料庫設計小技巧

2021-07-22 17:25:49 字數 1994 閱讀 9215

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 重視輸入輸出。在定義資料庫表和字段需求 輸入 時,首先應檢查現有的或者已經...