1、【操做規範】
1. 如無備註,則表中的第一個id字段必定是主鍵且爲自動增加;
2. 如無備註,則數值類型的字段請使用UNSIGNED屬性;
3. 如無備註,排序字段order_id在程序中默認使用降序排列;
4. 如無備註,全部字段都設置NOT NULL,並設置默認值;
5. 如無備註,全部的布爾值字段,如is_hot、is_deleted,都必須設置一個默認值,並設爲0;
6. 全部的數字類型字段,都必須設置一個默認值,並設爲0;
7. 針對varchar類型字段的程序處理,請驗證用戶輸入,不要超出其預設的長度;
8. 建表時將數據字典中的字段中文名和屬性備註寫入數據表的備註中(「PK、自動增加」不用寫);
9. 如無說明,建表時一概採用innodb引擎;數據庫
2、【經常使用表名約定】
0. 說明:表前綴用項目名稱首字母縮寫;因此表名都小寫,單詞之間用下劃線分開,單詞都用單數形式
1. user – 用戶
2. category – 分類
3. goods – 商品、產品等一切可交易網站的物品都用此命名
4. good_gallery – 物品的相冊
5. good_cate – 物品的分類,除了單獨做爲表名,其餘地方分類單詞一概用縮寫cate
4. attr – 屬性
5. article – 文章、新聞、幫助中心等以文章形式出現的,通常都用此命名
6. cart – 購物車
7. feedback – 用戶反饋
8. order – 訂單
9. site_nav – 包括頁頭和頁尾導航
10. site_config – 系統配置表
11. admin – 後臺用戶 【RBAC標準表】
12. role – 後臺用戶角色【RBAC標準表】
13. access – 後臺操做權限,至關於action【RBAC標準表】
14. role_admin – 後臺用戶對應的角色【RBAC標準表】
15. access_role – 後臺角色對應的權限【RBAC標準表】
16. 待續網絡
3、【經常使用列名約定】
1. 表名_id – 一般用做外鍵命名
2. cid – 特殊的編號,帶有元數據,方便關聯查詢,你能夠把它理解成類別(層次)編號。舉個例子,產品在分類時,每每須要將其歸類到子分類下,相應的字段中也通常只記錄子分類的id,這時若須要知道該產品屬於哪一個主分類,就須要經過子分類信息再查詢到主分類信息,這是比較麻煩的,cid字段就是要解決這個問題。通常的站點幾十個分類確定是夠用了,因此這裏假設某一主分類的cid爲11,則子分類的cid從1101開始編號,處理時只需截取前兩位數值即可知道該產品屬於哪個主分類了。
3. add_time – 添加時間、上架時間等
4. last_time – 最後操做時間,如登陸、修改記錄
5. expire_time – 過時時間
6. name – 商品名稱、商家名稱等,不要跟title混用,title只用於文章標題、職稱等
7. price – 價格
8. thumb – 只要是列表頁面中的窗口圖,一概用此命名
9. image_src – 相冊中的圖片地址一概用此命名,不要出現各類img,image,img_url,thumb_url等
10. head_thumb – 用戶頭像, 雖然有點長,必定要遵照。不要出現上述狀況
11. image_alt – 相冊中圖片的alt屬性
12. desc – 描述、簡介,好比goods_desc,不要出現goods_txt這種
13. details – 詳情、文章內容等
14. order_id – 排序
15. telephone – 座機號碼
16. mobile – 手機號碼
17. phone – 當不區分手機和座機時,請用phone命名
18. address – 地址,單獨出現不要用addr縮寫,組合出現時需用縮寫,好比mac地址,mac_addr
19. zipcode – 郵編
20. region – 地區,大的區域,好比記錄杭州市、溫州市等
21. area – 區域,小的,好比上城區,江乾區等
22. avg_cost – 人均消費
23. 待續post
4、【數據表字段設計範例】網站
分類表(t_category)ui
字段名url |
列名spa |
類型.net |
屬性備註設計 |
說明unix |
流水號 |
id |
int(10) |
PK、自動增加 |
|
特殊編號 |
cid |
varchar(4) |
第一個主分類爲十一、第一個子分類爲1101,類推,僅支持二級分類 |
|
名稱 |
name |
varchar(10) |
頁面中需註明輸入不超過10個字 |
|
父分類 |
pid |
int(10) |
||
統計量 |
count |
int(10) |
||
是否熱門 |
is_hot |
tinyint(1) |
||
首頁顯示 |
is_index |
tinyint(1) |
||
排序 |
order_id |
int(10) |
|
[表命名規範]
1.具有統一前綴,對相關功能的表應當使用相同前綴,如acl_xxx,house_xxx,ppc_xxx;其中前綴一般爲這個表的模塊或依賴主實體對象的名字,一般來說表名爲:業務_動做_類型,或是業務_類型;
2.表名使用英文小寫單詞,若是有多個單詞則使用下劃線隔開;
3.表名簡介,使用常見單詞,避免使用長單詞和生僻詞;
4.表引擎取決於實際應用場景及當前數據庫中的已經存在的存儲引擎;日誌及報表類表建議用myisam,與交易,審覈,金額相關的表建議用innodb引擎。整體來說數據庫默認innodb;
5.數據表必須有主鍵,且建議均使用auto_increment的id做爲主鍵(與業務無關),和業務相關的要作爲惟一索引;
6.默認使用utf8字符集(因爲數據庫定義使用了默認,數據表能夠再也不定義,但爲保險起見,建議都寫上);
7.全部的表都必須有備註,寫明白這個表中存放的數據內容;
8.預估表數據量,若是數據量較大(超過500w)則須要考慮分表策略。能夠等量均衡分表或根據業務規則分表都可。要分表的數據表必須與DBA商量分表策略;
9.職責相近的表,命名規則應該相同;如合同申請,帳戶信息,交友相關等;
舉個例子,一張在線衝值記錄表:user_bank_deposit這個就很是符合標準,若是叫作userBankDeposit或是user_chongzhi,就很是不友好。
CREATE TABLE `house_refresh_log` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`fangid` int(11) NOT NULL COMMENT '房貼子ID',
`refresh_time` int(11) NOT NULL COMMENT '刷新時間',
PRIMARY KEY (`id`),
UNIQUE KEY `fangid` (`fangid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='房刷新記錄表'
[字段命名規範]
1.數據庫字段命名與表名命名相似:
2.使用小寫英文單詞,若是有多個單詞使用下劃線隔開;
3.使用簡單單詞,避免生僻詞;
4.字段應當有註釋,描述該字段的用途及可能存儲的內容,如枚舉值則建議將該字段中使用的內容都定義出來;
5.是別的表的外鍵均使用xxx_id的方式來代表;
6.表的主鍵通常都約定成爲id,自增類型;
7.時間字段,除特殊狀況一概採用int來記錄unix_timestamp;
8.網絡IP字段,除特殊狀況一概用bigint來記錄inet_aton值;
9.全部字段,均爲非空,最好顯示指定默認值;
10.有些驅動對tinyint支持不夠好,一般建義按容量來選擇字段;
11. text字段儘可能少用,或是拆到冗餘表中;
CREATE TABLE `wanted_post` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`puid` int(10) unsigned NOT NULL,
`user_id` int(10) NOT NULL COMMENT '發貼用戶的id',
`username` varchar(50) NOT NULL COMMENT '發貼用戶的用戶名',
`city` smallint(4) NOT NULL COMMENT '所在城市',
`ip` bigint(14) NOT NULL COMMENT '發帖人的ip',
`district_id` tinyint(2) NOT NULL COMMENT '所在區域的id',
`district_name` varchar(20) NOT NULL COMMENT '行政區名字',
`street_id` tinyint(2) NOT NULL COMMENT '所在街道(地標)的id',
`street_name` varchar(20) NOT NULL COMMENT '小區名字',
`title` varchar(255) NOT NULL COMMENT '帖子的標題',
`description` text NOT NULL COMMENT '帖子詳情描述',
`post_at` int(11) NOT NULL COMMENT '用戶發帖時間,數據建立的時間,使用整型存儲',
`refresh_at` int(11) NOT NULL COMMENT '帖子被修改的時間,整型存儲',
`show_time` int(11) NOT NULL COMMENT '帖子顯示時間',
`age_max` int(11) NOT NULL DEFAULT '0' COMMENT '招聘最小年齡',
`age_min` int(11) NOT NULL DEFAULT '0' COMMENT '招聘最大年齡',
`post_refresh_at` int(11) NOT NULL COMMENT '刷新時間',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_puid` (`puid`),
KEY `user_id_index` (`user_id`),
KEY `post_at_index` (`post_at`),
KEY `refresh_at_index` (`refresh_at`),
KEY `show_time_index` (`show_time`)
) ENGINE=InnoDB AUTO_INCREMENT=55295 DEFAULT CHARSET=utf8 COMMENT='招聘帖子表'
參考文檔:https://blog.csdn.net/yuzhouxiang/article/details/7088352