數(shù)據(jù)庫表設(shè)計(jì)的幾條準(zhǔn)則

前言:數(shù)據(jù)庫設(shè)計(jì)在平時(shí)的工作是必不可少的轿亮,良好的表設(shè)計(jì)可以讓我們查詢效率更高,加快網(wǎng)站訪問速度捐寥,提升用戶體驗(yàn),并且方便于我們查詢數(shù)據(jù)祖驱。本篇博客就來聚焦一下握恳,如何設(shè)計(jì)出高可復(fù)用,優(yōu)良的表結(jié)構(gòu)捺僻,從而在實(shí)際的工作中使我們寫出更好的代碼乡洼。

數(shù)據(jù)庫表設(shè)計(jì)的幾條黃金準(zhǔn)則:

一:字段的原子性

解釋:保證每列的原子性,不可分解匕坯,意思表達(dá)要清楚束昵,不能含糊,高度概括字段的含義葛峻,能用一個(gè)字段表達(dá)清楚的絕不使用第二個(gè)字段锹雏,必須要使用兩個(gè)字段表達(dá)清楚的絕不能使用一個(gè)字段

二:主鍵設(shè)計(jì)

解釋:主鍵不要與業(yè)務(wù)邏輯有所關(guān)聯(lián),最好是毫無意義的一串獨(dú)立不重復(fù)的數(shù)字术奖,常見的比如UUID或者將主鍵設(shè)置為Auto_increment;

三:字段使用次數(shù)

解釋:對(duì)于頻繁修改的字段(一般是指狀態(tài)類字段)最好用獨(dú)立的數(shù)字或者單個(gè)字母去表示礁遵,不用使用漢字或長(zhǎng)字符的英文

四:字段長(zhǎng)度

解釋:建表的時(shí)候,字段長(zhǎng)度盡量要比實(shí)際業(yè)務(wù)的字段大3-5個(gè)字段左右(考慮到合理性和伸縮性)采记,最好是2的n次方冪值佣耐。不能建比實(shí)際業(yè)務(wù)太大的字段長(zhǎng)度(比如訂單id如果考慮要業(yè)務(wù)增長(zhǎng)的話,一定要使用Long型唧龄,對(duì)應(yīng)的數(shù)據(jù)庫的數(shù)據(jù)類型是bigint)兼砖,這是因?yàn)槿绻侄伍L(zhǎng)度過大,在進(jìn)行查詢的時(shí)候索引在B-Tree樹上遍歷會(huì)越耗費(fèi)時(shí)間,從而查詢的時(shí)間會(huì)越久讽挟;但是絕對(duì)不能建小然走,否則mysql數(shù)據(jù)會(huì)報(bào)錯(cuò),程序會(huì)拋出異常戏挡;

五:關(guān)于外鍵

解釋:盡量不要建立外鍵芍瑞,保證每個(gè)表的獨(dú)立性。如果非得保持一定的關(guān)系褐墅,最好是通過id進(jìn)行關(guān)聯(lián)

六:動(dòng)靜分離

解釋:最好做好靜態(tài)表和動(dòng)態(tài)表的分離拆檬。這里解釋一下靜態(tài)表和動(dòng)態(tài)表的含義,靜態(tài)表:存儲(chǔ)著一些固定不變的資源妥凳,比如城市/地區(qū)名/國(guó)家(靜態(tài)表一定要使用緩存)竟贯。動(dòng)態(tài)表:一些頻繁修改的表

七:關(guān)于code值

解釋:使用數(shù)字碼或者字母去代替實(shí)際的名字,也就是盡量把name轉(zhuǎn)換為code逝钥,因?yàn)閚ame可能會(huì)變(萬一變化就會(huì)查詢處多條數(shù)據(jù)屑那,從而拋出錯(cuò)誤),但是code一般是不會(huì)變化的.另一方面艘款,code值存儲(chǔ)的字符較少持际,也能減少數(shù)據(jù)庫的存儲(chǔ)空間的壓力

八:關(guān)于Null值

解釋:盡量不要有null值,有null值的話哗咆,數(shù)據(jù)庫在進(jìn)行索引的時(shí)候查詢的時(shí)間更久蜘欲,從而浪費(fèi)更多的時(shí)間!可以在建表的時(shí)候設(shè)置一個(gè)默認(rèn)值晌柬!

九:關(guān)于引擎的選擇

解釋:關(guān)于引擎的選擇姥份,innodb與myisam,myisam的實(shí)際查詢速度要比innodb快年碘,因?yàn)樗粧呙嫒沓呵福莔yisam不支持事務(wù),沒辦法保證數(shù)據(jù)的Acid屿衅。選擇哪個(gè)這就要看自己對(duì)于效率和數(shù)據(jù)穩(wěn)定性方面的實(shí)際業(yè)務(wù)的取舍了

十:資源存儲(chǔ)

解釋:數(shù)據(jù)庫不要存儲(chǔ)任何資源文件埃难,比如照片/視頻/網(wǎng)站等,可以用文件路徑/外鏈用來代替傲诵,這樣可以在程序中通過路徑凯砍,鏈接等來進(jìn)行索引

十一:與主鍵相關(guān)

解釋:根據(jù)數(shù)據(jù)庫設(shè)計(jì)三大范式,盡量保證列數(shù)據(jù)和主鍵直接相關(guān)而不是間接相關(guān)

十二:關(guān)系映射

解釋:多對(duì)一或者一對(duì)多的關(guān)系,關(guān)聯(lián)一張表最好通過id去建立關(guān)系拴竹,而不是去做重復(fù)數(shù)據(jù)悟衩,這樣做最大的好處就是中間的關(guān)系表比較清楚明白。

十三:預(yù)留字段

解釋:在設(shè)計(jì)一張表的時(shí)候應(yīng)該預(yù)制一個(gè)空白字段栓拜,用于以后的擴(kuò)展座泳,因?yàn)槟阋膊皇谴_定這張表以后不會(huì)擴(kuò)展惠昔。

十四:留下單一字段確定是否可用

解釋:通過一個(gè)單一字段去控制表是否可用,比如通常起名為isVaild挑势,預(yù)制的含義為0為有效镇防,1為無效,這樣便于以后我們?nèi)ヌ蕹龜?shù)據(jù)或者重整數(shù)據(jù)潮饱,使其成為boolean性質(zhì)的數(shù)據(jù)?更加便于我們?nèi)ゲ倏亍?/p>

十五:刪除字段

解釋:數(shù)據(jù)庫是禁止使用delete命令的,一般都不會(huì)真正刪除數(shù)據(jù)来氧,都是采用改狀態(tài)的方式,設(shè)置state字段香拉,通過修改狀態(tài)賦予它是否有效的邏輯含義啦扬!

總結(jié):本篇博文主要介紹了關(guān)于數(shù)據(jù)庫設(shè)計(jì)的幾條準(zhǔn)則,如何設(shè)計(jì)出高可復(fù)用的數(shù)據(jù)庫和條例清晰的數(shù)據(jù)庫表是我們一直要關(guān)注的話題凫碌,在實(shí)際的開發(fā)中扑毡,謹(jǐn)遵以上的準(zhǔn)則,起碼保證自己的表設(shè)計(jì)出來的標(biāo)準(zhǔn)性盛险,將會(huì)大大提升我們的工作效率瞄摊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市苦掘,隨后出現(xiàn)的幾起案子换帜,更是在濱河造成了極大的恐慌,老刑警劉巖鸟蜡,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膜赃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡揉忘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門端铛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泣矛,“玉大人,你說我怎么就攤上這事禾蚕∧啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我花吟,道長(zhǎng)大咱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任烛占,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涮母。我一直安慰自己谆趾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布叛本。 她就那樣靜靜地躺著沪蓬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪来候。 梳的紋絲不亂的頭發(fā)上跷叉,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音营搅,去河邊找鬼性芬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剧防,可吹牛的內(nèi)容都是我干的植锉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼峭拘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼俊庇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸡挠,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤辉饱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拣展,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彭沼,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年备埃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姓惑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡按脚,死狀恐怖于毙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辅搬,我是刑警寧澤唯沮,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站堪遂,受9級(jí)特大地震影響介蛉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溶褪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一币旧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竿滨,春花似錦佳恬、人聲如沸捏境。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垫言。三九已至,卻和暖如春倾剿,著一層夾襖步出監(jiān)牢的瞬間筷频,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工前痘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凛捏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓芹缔,卻偏偏與公主長(zhǎng)得像坯癣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子最欠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容