一、資料庫設計思維
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...