數(shù)據(jù)庫的設(shè)計應(yīng)考慮哪些設(shè)計原則?
數(shù)據(jù)庫是整個軟件應(yīng)用的根基,是軟件設(shè)計的起點,它起著決定性的質(zhì)變作用,因此我們必須對數(shù)據(jù)庫設(shè)計高度重視起來,培養(yǎng)設(shè)計良好數(shù)據(jù)庫的習(xí)慣,是一個優(yōu)秀的軟件設(shè)計師所必須具備的基本素質(zhì)條件!
那么我們要做到什么程度才是對的呢?下面做網(wǎng)站小編就說說數(shù)據(jù)庫設(shè)計的原則:
1、數(shù)據(jù)庫設(shè)計最起碼要占用整個項目開發(fā)的40%以上的時間
數(shù)據(jù)庫是需求的直觀反應(yīng)和表現(xiàn),因此設(shè)計時必須要切實符合用戶的需求,要多次與用戶溝通交流來細(xì)化需求,將需求中的要求和每一次的變化都要一一體現(xiàn)在數(shù)據(jù)庫的設(shè)計當(dāng)中。如果需求不明確,就要分析不確定的因素,設(shè)計表時就要事先預(yù)留出可變通的字段,正所謂“有備無患”。
2、數(shù)據(jù)庫設(shè)計不僅僅停留于頁面demo的表面
頁面內(nèi)容所需要的字段,在數(shù)據(jù)庫設(shè)計中只是一部分,還有系統(tǒng)運轉(zhuǎn)、模塊交互、中轉(zhuǎn)數(shù)據(jù)、表之間的聯(lián)系等等所需要的字段,因此數(shù)據(jù)庫設(shè)計絕對不是簡單的基本數(shù)據(jù)存儲,還有邏輯數(shù)據(jù)存儲。
3、數(shù)據(jù)庫設(shè)計完成后,項目80%的設(shè)計開發(fā)在你腦海中就已經(jīng)完成了
每個字段的設(shè)計都是有他必要的意義的,你在設(shè)計每一個字段的同時,就應(yīng)該已經(jīng)想清楚程序中如何去運用這些字段,多張表的聯(lián)系在程序中是如何體現(xiàn)的。換句話說,你完成數(shù)據(jù)庫設(shè)計后,程序中所有的實現(xiàn)思路和實現(xiàn)方式在你的腦海中就已經(jīng)考慮過了。如果達(dá)不到這種程度,那當(dāng)進(jìn)入編碼階段后,才發(fā)現(xiàn)要運用的技術(shù)或?qū)崿F(xiàn)的方式數(shù)據(jù)庫無法支持,這時再改動數(shù)據(jù)庫就會很麻煩,會造成一系列不可預(yù)測的問題。
4、數(shù)據(jù)庫設(shè)計時就要考慮到效率和優(yōu)化問題
一開始就要分析哪些表會存儲較多的數(shù)據(jù)量,對于數(shù)據(jù)量較大的表的設(shè)計往往是粗粒度的,也會冗余一些必要的字段,已達(dá)到盡量用最少的表、最弱的表關(guān)系去存儲海量的數(shù)據(jù)。并且在設(shè)計表時,一般都會對主鍵建立聚集索引,含有大數(shù)據(jù)量的表更是要建立索引以提供查詢性能。對于含有計算、數(shù)據(jù)交互、統(tǒng)計這類需求時,還要考慮是否有必要采用存儲過程。
5、添加必要的(冗余)字段
像“創(chuàng)建時間”、“修改時間”、“備注”、“操作用戶IP”和一些用于其他需求(如統(tǒng)計)的字段等,在每張表中必須都要有,不是說只有系統(tǒng)中用到的數(shù)據(jù)才會存到數(shù)據(jù)庫中,一些冗余字段是為了便于日后維護(hù)、分析、拓展而添加的,這點是非常重要的,比如黑客攻擊,篡改了數(shù)據(jù),我們便就可以根據(jù)修改時間和操作用戶IP來查找定位。
6、設(shè)計合理的表關(guān)聯(lián)
若多張表之間的關(guān)系復(fù)雜,建議采用第三張映射表來關(guān)聯(lián)維護(hù)兩張表之間的關(guān)系,以降低表之間的直接耦合度。若多張表涉及到大數(shù)據(jù)量的問題,表結(jié)構(gòu)盡量簡單,關(guān)聯(lián)也要盡可能避免。
7、設(shè)計表時不加主外鍵等約束性關(guān)聯(lián),系統(tǒng)編碼階段完成后再添加約束性關(guān)聯(lián)
這樣做的目的是有利于團隊并行開發(fā),減少編碼時所遇到的問題,表之間的關(guān)系靠程序來控制。編碼完成后再加關(guān)聯(lián)并進(jìn)行測試。不過也有一些公司的做法是干脆就不加表關(guān)聯(lián)。
8、選擇合適的主鍵生成策略