一般情況下(xià),可(kě)以從兩個(gè)方面來(lái)判斷數據庫是否設計的(de)比較規範,1是看是否擁有大(dà)量的(de)窄表,2是寬表的(de)數量是否足夠的(de)少,如果符合這(zhè)兩個(gè)條件,則可(kě)以說明(míng)這(zhè)個(gè)數據庫的(de)設計水(shuǐ)平還(hái)是比較高(gāo)的(de),當然這(zhè)是兩個(gè)表面上的(de)指标,爲了(le)達到數據庫設計規範的(de)要求,一般來(lái)說,需要符合以下(xià)幾個(gè)要求。
1. 表中要避免可(kě)爲空的(de)列:
雖然表中允許有空列,但是,空字段是一種比較特殊的(de)數據類型,數據庫在處理(lǐ)的(de)時(shí)候 需要進行特殊的(de)處理(lǐ),這(zhè)樣的(de)話(huà),就會增加數據庫處理(lǐ)記錄的(de)複雜(zá)性,當表中要比較多(duō)的(de)空字段時(shí),在同等條件下(xià),數據庫處理(lǐ)的(de)性能會降低許多(duō),所以,雖然在數據庫表的(de)設計的(de)時(shí)候,允許表中具有空字段,但是,我們應該盡量避免,若的(de)确需要的(de)話(huà),可(kě)以通(tōng)過一些折中的(de)方式,來(lái)處理(lǐ)這(zhè)些空字段,讓他(tā)對(duì)數據庫性的(de)影(yǐng)響降到最低。
通(tōng)過設置默認值的(de)形式,來(lái)避免空字段的(de)産生,如一個(gè)商城(chéng)VIP系統,有的(de)時(shí)候身份證号字段可(kě)以爲空,因爲不是每個(gè)人(rén)都能記得(de)住身份證号的(de),辦理(lǐ)業務時(shí)身份證沒帶身上不能及時(shí)提供,因此身份證号碼字段可(kě)以爲空,滿足這(zhè)些特殊需求,但是,在數據庫設計的(de)時(shí)候,就要做(zuò)一些處理(lǐ)了(le),如果用(yòng)戶沒有輸入的(de)時(shí)候,把這(zhè)個(gè)字段的(de)val默認值改爲0/1,這(zhè)樣能避免空字段的(de)産生。若是一張表中,允許爲空的(de)列比較多(duō),接近全部列數的(de)三分(fēn)之一,而且,這(zhè)些列在大(dà)部分(fēn)情況下(xià),都是可(kě)有可(kě)無的(de),如果數據庫管理(lǐ)員(yuán)遇到這(zhè)樣的(de)狀況,建議(yì)另外建立一張副表,以保存這(zhè)些列,然後通(tōng)過關鍵字把主表和(hé)副表關聯起來(lái),把數據存儲在兩個(gè)獨立的(de)表中是的(de)主表的(de)設計更爲簡單,同時(shí)也(yě)能夠滿足存儲空值的(de)信息需要。
2. 表不應該要有重複的(de)Key或val:
如果現在有一個(gè)進銷存系統,這(zhè)個(gè)系統中有一張成品基本信息表。這(zhè)個(gè)産品開發有時(shí)間可(kě)以是一個(gè)人(rén)完成。
如進銷存管理(lǐ)中,還(hái)需要對(duì)客戶的(de)聯系人(rén)進行管理(lǐ),有時(shí)候,企業可(kě)能隻知道客戶一個(gè)采購(gòu)員(yuán)的(de)姓名,但是必要情況下(xià),企業需要對(duì)客戶的(de)采購(gòu)人(rén)員(yuán),倉庫人(rén)員(yuán),财務人(rén)員(yuán)共同進行管理(lǐ),因爲在訂單上,可(kě)能需要填入采購(gòu)代表的(de)名字,在出貨單上,則需要填入倉庫管理(lǐ)人(rén)員(yuán)的(de)名字等等。
爲解決這(zhè)個(gè)問題,有多(duō)個(gè)實現方式,但是,如果設計不會理(lǐ)的(de)話(huà),就會導緻重複的(de)val和(hé)key,如我們也(yě)可(kě)以這(zhè)麽設計。吧客戶信息,聯系人(rén)都放入同一張表中,爲了(le)解決多(duō)個(gè)聯系人(rén)問題,可(kě)以設置第一個(gè)聯系人(rén) 第一聯系人(rén)電話(huà) ,第二聯系人(rén) 第二聯系人(rén)電話(huà)等等,如果更多(duō)就會有更多(duō)字段加入。
可(kě)是如果這(zhè)麽設計會有一系列問題,如客戶的(de)采購(gòu)員(yuán)流動性比較大(dà),一年有七八個(gè)采購(gòu)員(yuán),這(zhè)樣的(de)話(huà)在用(yòng)到這(zhè)樣的(de)設計就顯然不合理(lǐ)了(le)。所以,在數據庫設計的(de)時(shí)候要盡量避免這(zhè)種重複的(de)key或者val的(de)産生,如果用(yòng)到這(zhè)種情況,就需要改變一下(xià)策略,如:吧客戶聯系人(rén)另外設置一張表,然後通(tōng)過客戶ID把供應商信息表跟客戶聯系人(rén)信息連接起來(lái),就是說盡量把重複的(de)key放至到一張獨立的(de)表中進行管理(lǐ),然後通(tōng)過視圖或者其他(tā)手段把這(zhè)些獨立的(de)表關聯起來(lái)
3. 表中記錄應該有一個(gè)标識符:
在數據庫表設計的(de)時(shí)候,數據庫管理(lǐ)員(yuán)就應有個(gè)好習(xí)慣,用(yòng)一個(gè)ID号碼 标識進行記錄,而不是通(tōng)過名字 編号等字段對(duì)記錄進行區(qū)分(fēn),每個(gè)表都應該有一個(gè)id任何兩個(gè)記錄都不能共用(yòng)一個(gè)id值 另外 這(zhè)個(gè)id值最好有數據庫來(lái)進行自動管理(lǐ),而不要吧這(zhè)個(gè)任務給前台應用(yòng)程序,否則 很容易産生id值不統一的(de)情況
4. 數據庫對(duì)象要有統一的(de)前綴名:
一個(gè)比較複雜(zá)的(de)應用(yòng)系統,其對(duì)應的(de)數據表往往數以千計,鑰匙讓數據庫管理(lǐ)員(yuán)看到對(duì)象名就了(le)解這(zhè)個(gè)數據庫對(duì)象所起的(de)作用(yòng) 這(zhè)樣比較困難,而且在數據庫對(duì)象引用(yòng)的(de)時(shí)候,數據庫管理(lǐ)員(yuán)也(yě)會爲不能迅速找到數據對(duì)象對(duì)發愁。爲此在開發數據庫之前,最好花時(shí)間去制定一個(gè)數據庫的(de)對(duì)象的(de)前綴命名規範,
如在設計數據庫時(shí)和(hé)前台應用(yòng)程序協商,确定合理(lǐ)的(de)命名規範,如和(hé)物(wù)料管理(lǐ)模塊相關的(de)表可(kě)以用(yòng)M爲前綴,而訂單管理(lǐ)相關的(de)就用(yòng)C作爲前綴,具體采用(yòng)什(shén)麽前綴就根據用(yòng)戶的(de)愛(ài)好,但是注意 這(zhè)個(gè)命名規範應該在數據庫管理(lǐ)員(yuán)和(hé)前台應用(yòng)程序開發者之間達成共識,并且嚴格暗戰這(zhè)個(gè)命名規範來(lái)定義對(duì)象名。
其次 表 視圖 函數等較好也(yě)要有統一的(de)前綴,如視圖可(kě)以用(yòng)V爲前綴 函數用(yòng)F爲前綴 這(zhè)樣數據庫管理(lǐ)員(yuán)無論在日常管理(lǐ)還(hái)是對(duì)象引用(yòng)都能在最短的(de)時(shí)間找到自己需要的(de)對(duì)象。
5. 盡量隻存儲單一實體類型數據:
這(zhè)裏實體類型和(hé)數據類型不是一回事,要注意區(qū)分(fēn),這(zhè)裏講的(de)實體類型是指所需要描述對(duì)象的(de)本身 舉個(gè)例子 如現在有一個(gè)圖書(shū)館系統,有圖書(shū)基本信息,作者信息兩個(gè)實體對(duì)象,若用(yòng)戶要吧這(zhè)兩個(gè)實體對(duì)象信息放在同一張表中也(yě)可(kě)以,如果把表設計成圖書(shū)的(de)名字,作者等等如果這(zhè)樣設計的(de)話(huà),回給後續的(de)維護帶來(lái)麻煩
如果後續有書(shū)出版時(shí),就需要爲每次出版的(de)圖書(shū)增加作者信息,這(zhè)無疑會增加額外的(de)存儲空間,也(yě)會增加記錄的(de)長(cháng)度,而且作者的(de)情況有變,如住址修改,這(zhè)樣還(hái)會修改每本書(shū)的(de)記錄,同屬若這(zhè)個(gè)作者的(de)數從庫中全部删除後,跟著(zhe)這(zhè)個(gè)作者的(de)信息也(yě)就沒了(le)很明(míng)顯這(zhè)不符合數據庫設計規範要求。
遇到這(zhè)種情況 建議(yì)把上面的(de)這(zhè)張表分(fēn)爲三個(gè)獨立的(de)表,分(fēn)别爲圖書(shū)基本表 ,作者表 圖書(shū)合作者對(duì)應表等等 這(zhè)樣設計 在遇到問題也(yě)能迎刃而解。
重慶安菲科技軟件開發具有多(duō)類産品的(de)研發和(hé)設計經驗,産品種類包括:電子商務、生活服務、金融服務、新媒體、教育教學、手機遊戲等多(duō)領域的(de)app應用(yòng)及組件,安菲科技以專業的(de)解決方案,快(kuài)速的(de)需求反應,靈活的(de)開發流程和(hé)細緻的(de)客戶服務,爲企業提供全方位的(de)移動應用(yòng)開發,推廣運營服務。近年來(lái)近百家國内外各行各業的(de)客戶,緻力于想客戶所想的(de)原則,努力爲客戶提供更進準更完善的(de)移動互聯網應用(yòng)及解決方案。