數據庫表的常見設計規則總結


前言:數據庫設計在平時的工作是必不可少的,良好的表設計可以讓我們查詢效率更高,加快網站訪問速度,提升用戶體驗,並且方便於我們查詢數據。本篇博客就來聚焦一下,如何設計出高可復用,優良的表結構,從而在實際的工作中使我們寫出更好的代碼。

數據庫表設計的幾條黃金准則:

一:字段的原子性

解釋:保證每列的原子性,不可分解,意思表達要清楚,不能含糊,高度概括字段的含義,能用一個字段表達清楚的絕不使用第二個字段,必須要使用兩個字段表達清楚的絕不能使用一個字段

二:主鍵設計

解釋:主鍵不要與業務邏輯有所關聯,最好是毫無意義的一串獨立不重復的數字,常見的比如UUID或者將主鍵設置為Auto_increment;

三:字段使用次數

解釋:對於頻繁修改的字段(一般是指狀態類字段)最好用獨立的數字或者單個字母去表示,不用使用漢字或長字符的英文

四:字段長度

解釋:建表的時候,字段長度盡量要比實際業務的字段大3-5個字段左右(考慮到合理性和伸縮性),最好是2的n次方冪值。不能建比實際業務太大的字段長度(比如訂單id如果考慮要業務增長的話,一定要使用Long型,對應的數據庫的數據類型是bigint),這是因為如果字段長度過大,在進行查詢的時候索引在B-Tree樹上遍歷會越耗費時間,從而查詢的時間會越久;但是絕對不能建小,否則mysql數據會報錯,程序會拋出異常;

五:關於外鍵

解釋:盡量不要建立外鍵,保證每個表的獨立性。如果非得保持一定的關系,最好是通過id進行關聯

六:動靜分離

解釋:最好做好靜態表和動態表的分離。這里解釋一下靜態表和動態表的含義,靜態表:存儲着一些固定不變的資源,比如城市/地區名/國家(靜態表一定要使用緩存)。動態表:一些頻繁修改的表

七:關於code值

解釋:使用數字碼或者字母去代替實際的名字,也就是盡量把name轉換為code,因為name可能會變(萬一變化就會查詢處多條數據,從而拋出錯誤),但是code一般是不會變化的.另一方面,code值存儲的字符較少,也能減少數據庫的存儲空間的壓力

八:關於Null值

解釋:盡量不要有null值,有null值的話,數據庫在進行索引的時候查詢的時間更久,從而浪費更多的時間!可以在建表的時候設置一個默認值!

九:關於引擎的選擇

解釋:關於引擎的選擇,innodb與myisam,myisam的實際查詢速度要比innodb快,因為它不掃面全表,但是myisam不支持事務,沒辦法保證數據的Acid。選擇哪個這就要看自己對於效率和數據穩定性方面的實際業務的取舍了

十:資源存儲

解釋:數據庫不要存儲任何資源文件,比如照片/視頻/網站等,可以用文件路徑/外鏈用來代替,這樣可以在程序中通過路徑,鏈接等來進行索引

十一:與主鍵相關

解釋:根據數據庫設計三大范式,盡量保證列數據和主鍵直接相關而不是間接相關

十二:關系映射

解釋:多對一或者一對多的關系,關聯一張表最好通過id去建立關系,而不是去做重復數據,這樣做最大的好處就是中間的關系表比較清楚明白。

十三:預留字段

解釋:在設計一張表的時候應該預制一個空白字段,用於以后的擴展,因為你也不是確定這張表以后不會擴展。

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

解釋:通過一個單一字段去控制表是否可用,比如通常起名為isVaild,預制的含義為0為有效,1為無效,這樣便於以后我們去剔除數據或者重整數據,使其成為boolean性質的數據 更加便於我們去操控。

十五:刪除字段

解釋:數據庫是禁止使用delete命令的,一般都不會真正刪除數據,都是采用改狀態的方式,設置state字段,通過修改狀態賦予它是否有效的邏輯含義!

總結:本篇博文主要介紹了關於數據庫設計的幾條准則,如何設計出高可復用的數據庫和條例清晰的數據庫表是我們一直要關注的話題,在實際的開發中,謹遵以上的准則,起碼保證自己的表設計出來的標准性,將會大大提升我們的工作效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM