MySql表設計及相關規範

2021-09-01 00:09:01 字數 2686 閱讀 2070

一、資料庫設計思維

1.  新增必要的(冗餘)字段

像「建立時間」、「修改時間」、「備註」、「操作使用者ip」和一些用於其他需求(如統計)的字段等,在每張表中必須都要有,不是 說只有系統中用到的資料才會存到資料庫中,一些冗餘欄位是為了便於日後維護、分析、拓展而新增的,這點是非常重要的,比如黑客攻擊,篡改了資料,我們便就可以根據修改時間和操作使用者ip來查詢定位。

每個欄位要有注釋,每個表名要有注釋,欄位的取值含義或者範圍,列舉值要有注釋,這些都要有中文注釋

2. 設計合理的表關聯

若多張表之間的關係複雜,建議採用第三張對映表來關聯維護兩張表之間的關係,以降低表之間的直接耦合度。若多張表涉及到大資料量的問題,表結構盡量簡單,關聯也要盡可能避免。

二、命名規範

1.表名:同乙個應用(或領域)下的,要有相同的字首,如:t_***

2. 庫名、表名、欄位名:要字母小寫加下劃線風格,長度不能超過32個字元,禁止拼音加英文混合命名

3. 索引命名規範:普通索引 idx_+欄位名,主鍵索引 pk_+欄位名,唯一索引 uk_+欄位名,

4. 簡潔、見名知意,

三、字段資料型別設計規範

在資料庫色設計過程中,我們要本著夠用的原則,不能把資料字段範圍設為最大或者預設值,會導致儲存空間大量的浪費,對資料庫的執行效率造成很大的影響。

用盡量少的儲存空間來存數乙個欄位的資料:

例如:能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(256);

ip位址最好使用int型別;

固定長度的型別最好使用char,例如:郵編;

能使用tinyint就不要使用smallint,int;

最好給每個字段乙個預設值,最好不能為null;

字段型別盡可能占用少的儲存空間

更小的資料型別通常更快,因為他們占用更少的磁碟、記憶體和cpu快取,並且處理cpu的時間也很短。在需要儲存年齡、性別這些類似的應用場景中,應該選擇tinyint來儲存,而不是int。處理日期的時候,儲存使用者日期,應該選擇date型別而不是datetime,datetimek可以精確到時分秒。

timestamp和datetime除了儲存範圍和儲存方式不一樣,沒有太大區別。當然,對於跨時區的業務,timestamp更為合適。

2.資料型別的整合最好固定長度

儲存字元時,應優先考慮char資料型別,因為char是定長的,而varchar 是變長的,mysql處理char比varchar要快一點。char型別的最大寬度為255 位元組,varchar 最大寬度為 65535 個位元組。

3.盡量避免null

索引null列需要額外的空間來儲存,佔更多空間,進行比較和計算時,對null值作特別的處理,可能造成索引失效。

4.資料庫設計過程中盡量使用int欄位型別

所有的資料型別中int不管是儲存空間還是執行速度方面都是比較好的。但但是不要因為int高效,而把所有的字段都設計成為int來處理。

5.財務相關資料,使用decimal型別

用decimal來儲存金額字段,不要用float和double,會出現資料精度丟失。

四、mysql開發規範

1.不用select *(消耗cpu,io,記憶體,頻寬,這種程式不具有擴充套件性); 2.

sql語句盡可能簡單(一條sql只能在乙個cpu運算,大語句拆小語句,減少鎖時間,一條大sql可以堵死整個庫); 3.

如:select count(*) from `cdb_members` where `username` = 'aeolus'; 4.

避免在資料庫中進行數**算

mysql不擅長數**算和邏輯判斷

,無法使用索引。

5.使用in代替or,in的值不超過1000個 6.

insert語句必須顯式的指明欄位名稱,不使用insert into table() 7.

禁止使用子查詢,建議將子查詢轉換成關聯查詢

msql好奇的問題點:

int(5)和int(10)的區別是什麼?

int(x) x的值不管是什麼,儲存數字的取值範圍還是int本身資料型別的取值範圍,x只是資料顯示的長度而已,bigint和tinyinit型別也類似。

2.char(10)和varchare(10)的區別是什麼?

定義乙個char[10]和varchar[10],如果存進去的是『abcd』,那麼char所佔的長度依然為10,除了字元『abcd』外,後面跟六個空格,而varchar就立馬把長度變為4了,取資料的時候,char型別的要用trim()去掉多餘的空格,而varchar是不需要的。char的訪問數度還是要比varchar要快得多,因為其長度固定,方便程式的儲存與查詢;但是char也為此付出的是空間的代價,因為其長度固定,所以難免會有多餘的空格佔位符佔據空間,可謂是以空間換取時間效率,而varchar是以空間效率為首位的。與int不同的是,若存儲存的內容超過定義的長度,就會出錯。

mysql索引:

索引類似於書本中的目錄

索引由資料庫中一列或多列組合而成,其作用是提高對錶中資料的查詢速度

索引的優點是可以提高檢索資料的速度

索引的缺點是建立和維護索引需要耗費時間

索引可以提高查詢速度,會減慢寫入速度

Mysql 建表及查詢規範

int 如無特殊需要,存放整型數字使用unsigned int型。整型欄位後的數字代表顯示長度。整型型別如下表 資料型別 最大儲存長度 有符號 最大儲存長度 無符號 tinyint m 1個位元組 範圍 128 127 1個位元組 範圍 0 256 smallint m 2個位元組 範圍 32768...

mysql表索引 MySQL表及索引相關知識

1.表 1.1 建表 create table student id int 4 not null,name char 20 not null,age tinyint 2 not null default 0 dept varchar 16 default null show create tabl...

MySQL設計編碼規範

領導最近要求大家寫乙份mysql設計編碼規範,以便以後開發規範化.1 禁止使用觸發器 儲存過程 外來鍵約束。2 所有命名都一律小寫,分隔符使用下劃線 資料庫命名規範 系統 子系統,例如 crm product crm contract等。表命名規範 t v 模組名 表名,例如 t user info...