軟件開發(fā)公司 > 動態(tài) > 常見問題
? ? 一般情況下,可以從兩個(gè)方面來判斷數(shù)據(jù)庫是否設(shè)計(jì)的比較規(guī)范,1是看是否擁有大量的窄表,2是寬表的數(shù)量是否足夠的少,如果符合這兩個(gè)條件,則可以說明這個(gè)數(shù)據(jù)庫的設(shè)計(jì)水平還是比較高的,當(dāng)然這是兩個(gè)表面上的指標(biāo),為了達(dá)到數(shù)據(jù)庫設(shè)計(jì)規(guī)范的要求,一般來說,需要符合以下幾個(gè)要求。
?? ?1.? 表中要避免可為空的列:
?? ?雖然表中允許有空列,但是,空字段是一種比較特殊的數(shù)據(jù)類型,數(shù)據(jù)庫在處理的時(shí)候 需要進(jìn)行特殊的處理,這樣的話,就會增加數(shù)據(jù)庫處理記錄的復(fù)雜性,當(dāng)表中要比較多的空字段時(shí),在同等條件下,數(shù)據(jù)庫處理的性能會降低許多,所以,雖然在數(shù)據(jù)庫表的設(shè)計(jì)的時(shí)候,允許表中具有空字段,但是,我們應(yīng)該盡量避免,若的確需要的話,可以通過一些折中的方式,來處理這些空字段,讓他對數(shù)據(jù)庫性的影響降到最低。
?? ?通過設(shè)置默認(rèn)值的形式,來避免空字段的產(chǎn)生,如一個(gè)商城VIP系統(tǒng),有的時(shí)候身份證號字段可以為空,因?yàn)椴皇敲總€(gè)人都能記得住身份證號的,辦理業(yè)務(wù)時(shí)身份證沒帶身上不能及時(shí)提供,因此身份證號碼字段可以為空,滿足這些特殊需求,但是,在數(shù)據(jù)庫設(shè)計(jì)的時(shí)候,就要做一些處理了,如果用戶沒有輸入的時(shí)候,把這個(gè)字段的val默認(rèn)值改為0/1,這樣能避免空字段的產(chǎn)生。若是一張表中,允許為空的列比較多,接近全部列數(shù)的三分之一,而且,這些列在大部分情況下,都是可有可無的,如果數(shù)據(jù)庫管理員遇到這樣的狀況,建議另外建立一張副表,以保存這些列,然后通過關(guān)鍵字把主表和副表關(guān)聯(lián)起來,把數(shù)據(jù)存儲在兩個(gè)獨(dú)立的表中是的主表的設(shè)計(jì)更為簡單,同時(shí)也能夠滿足存儲空值的信息需要。
?? ?2. 表不應(yīng)該要有重復(fù)的Key或val:
?? ?如果現(xiàn)在有一個(gè)進(jìn)銷存系統(tǒng),這個(gè)系統(tǒng)中有一張成品基本信息表。這個(gè)產(chǎn)品開發(fā)有時(shí)間可以是一個(gè)人完成。
?? ?如進(jìn)銷存管理中,還需要對客戶的聯(lián)系人進(jìn)行管理,有時(shí)候,企業(yè)可能只知道客戶一個(gè)采購員的姓名,但是必要情況下,企業(yè)需要對客戶的采購人員,倉庫人員,財(cái)務(wù)人員共同進(jìn)行管理,因?yàn)樵谟唵紊希赡苄枰钊氩少彺淼拿?,在出貨單上,則需要填入倉庫管理人員的名字等等。
?? ?為解決這個(gè)問題,有多個(gè)實(shí)現(xiàn)方式,但是,如果設(shè)計(jì)不會理的話,就會導(dǎo)致重復(fù)的val和key,如我們也可以這么設(shè)計(jì)。吧客戶信息,聯(lián)系人都放入同一張表中,為了解決多個(gè)聯(lián)系人問題,可以設(shè)置第一個(gè)聯(lián)系人 第一聯(lián)系人電話 ,第二聯(lián)系人 第二聯(lián)系人電話等等,如果更多就會有更多字段加入。
?? ?可是如果這么設(shè)計(jì)會有一系列問題,如客戶的采購員流動性比較大,一年有七八個(gè)采購員,這樣的話在用到這樣的設(shè)計(jì)就顯然不合理了。所以,在數(shù)據(jù)庫設(shè)計(jì)的時(shí)候要盡量避免這種重復(fù)的key或者val的產(chǎn)生,如果用到這種情況,就需要改變一下策略,如:吧客戶聯(lián)系人另外設(shè)置一張表,然后通過客戶ID把供應(yīng)商信息表跟客戶聯(lián)系人信息連接起來,就是說盡量把重復(fù)的key放至到一張獨(dú)立的表中進(jìn)行管理,然后通過視圖或者其他手段把這些獨(dú)立的表關(guān)聯(lián)起來
?? ?3. 表中記錄應(yīng)該有一個(gè)標(biāo)識符:
?? ?在數(shù)據(jù)庫表設(shè)計(jì)的時(shí)候,數(shù)據(jù)庫管理員就應(yīng)有個(gè)好習(xí)慣,用一個(gè)ID號碼 標(biāo)識進(jìn)行記錄,而不是通過名字 編號等字段對記錄進(jìn)行區(qū)分,每個(gè)表都應(yīng)該有一個(gè)id任何兩個(gè)記錄都不能共用一個(gè)id值 另外 這個(gè)id值最好有數(shù)據(jù)庫來進(jìn)行自動管理,而不要吧這個(gè)任務(wù)給前臺應(yīng)用程序,否則 很容易產(chǎn)生id值不統(tǒng)一的情況
?? ?4. 數(shù)據(jù)庫對象要有統(tǒng)一的前綴名:
?? ?一個(gè)比較復(fù)雜的應(yīng)用系統(tǒng),其對應(yīng)的數(shù)據(jù)表往往數(shù)以千計(jì),鑰匙讓數(shù)據(jù)庫管理員看到對象名就了解這個(gè)數(shù)據(jù)庫對象所起的作用 這樣比較困難,而且在數(shù)據(jù)庫對象引用的時(shí)候,數(shù)據(jù)庫管理員也會為不能迅速找到數(shù)據(jù)對象對發(fā)愁。為此在開發(fā)數(shù)據(jù)庫之前,最好花時(shí)間去制定一個(gè)數(shù)據(jù)庫的對象的前綴命名規(guī)范,
?? ?如在設(shè)計(jì)數(shù)據(jù)庫時(shí)和前臺應(yīng)用程序協(xié)商,確定合理的命名規(guī)范,如和物料管理模塊相關(guān)的表可以用M為前綴,而訂單管理相關(guān)的就用C作為前綴,具體采用什么前綴就根據(jù)用戶的愛好,但是注意 這個(gè)命名規(guī)范應(yīng)該在數(shù)據(jù)庫管理員和前臺應(yīng)用程序開發(fā)者之間達(dá)成共識,并且嚴(yán)格暗戰(zhàn)這個(gè)命名規(guī)范來定義對象名。
?? ?其次 表 視圖 函數(shù)等較好也要有統(tǒng)一的前綴,如視圖可以用V為前綴 函數(shù)用F為前綴 這樣數(shù)據(jù)庫管理員無論在日常管理還是對象引用都能在最短的時(shí)間找到自己需要的對象。
?? ?5. 盡量只存儲單一實(shí)體類型數(shù)據(jù):
?? ?這里實(shí)體類型和數(shù)據(jù)類型不是一回事,要注意區(qū)分,這里講的實(shí)體類型是指所需要描述對象的本身 舉個(gè)例子 如現(xiàn)在有一個(gè)圖書館系統(tǒng),有圖書基本信息,作者信息兩個(gè)實(shí)體對象,若用戶要吧這兩個(gè)實(shí)體對象信息放在同一張表中也可以,如果把表設(shè)計(jì)成圖書的名字,作者等等如果這樣設(shè)計(jì)的話,回給后續(xù)的維護(hù)帶來麻煩
?? ?如果后續(xù)有書出版時(shí),就需要為每次出版的圖書增加作者信息,這無疑會增加額外的存儲空間,也會增加記錄的長度,而且作者的情況有變,如住址修改,這樣還會修改每本書的記錄,同屬若這個(gè)作者的數(shù)從庫中全部刪除后,跟著這個(gè)作者的信息也就沒了很明顯這不符合數(shù)據(jù)庫設(shè)計(jì)規(guī)范要求。
?? ?遇到這種情況 建議把上面的這張表分為三個(gè)獨(dú)立的表,分別為圖書基本表 ,作者表 圖書合作者對應(yīng)表等等 這樣設(shè)計(jì) 在遇到問題也能迎刃而解。
? 北京銳智互動軟件開發(fā)具有多類產(chǎn)品的研發(fā)和設(shè)計(jì)經(jīng)驗(yàn),產(chǎn)品種類包括:電子商務(wù)、生活服務(wù)、金融服務(wù)、新媒體、教育教學(xué)、手機(jī)游戲等多領(lǐng)域的app應(yīng)用及組件,銳智互動以專業(yè)的解決方案,快速的需求反應(yīng),靈活的開發(fā)流程和細(xì)致的客戶服務(wù),為企業(yè)提供全方位的移動應(yīng)用開發(fā),推廣運(yùn)營服務(wù)。近年來近百家國內(nèi)外各行各業(yè)的客戶,致力于想客戶所想的原則,努力為客戶提供更進(jìn)準(zhǔn)更完善的移動互聯(lián)網(wǎng)應(yīng)用及解決方案。
銳智互動/銳智開高軟件遵循嚴(yán)格的質(zhì)量和安全標(biāo)準(zhǔn), 實(shí)施嚴(yán)密的安全措施, 擁有成熟可靠的管理和開發(fā)流程, 公司憑借多年的行業(yè)積累、深厚的 行業(yè)專長和成熟的行業(yè)實(shí)踐,為客戶持續(xù)創(chuàng)造關(guān)鍵價(jià)值。我們始終關(guān) 注前沿技術(shù),保持國際領(lǐng)先的眼界和技術(shù)儲備。公司自 成立以來, 在團(tuán)隊(duì)成員的共同努力下,已經(jīng)成功服務(wù)于上百家企業(yè),其中包括 我愛我家、聯(lián)東集團(tuán)、優(yōu)財(cái)CMA、5100、奔馳、華為、伊利、寶馬、 迪思公關(guān)、航天國旅、HOTWIND、北京電通等眾多知名企業(yè)。
Tag:軟件開發(fā) Vue JS
Tag:軟件開發(fā)過程 軟件定制
Tag:教育軟件開發(fā) 互聯(lián)網(wǎng)教育平 APP開發(fā)
Tag:軟件開發(fā) 項(xiàng)目重構(gòu) 軟件定制
Tag:緩存數(shù)據(jù)庫 Redis Nosql
Tag:物聯(lián)網(wǎng) 軟件開發(fā) 人工智能
Ruizhi Interactive Network Technology Co. Ltd.
服務(wù)熱線(國外用戶請加0086):
400-1050-360 7×24小時(shí)
項(xiàng)目經(jīng)理:QQ:84083083電話/微信:15201301399
項(xiàng)目經(jīng)理:QQ:18818131電話/微信:13520607989
電子郵箱:PMO@irzhd.com
歡迎掃碼關(guān)注、咨詢
北京公司:北京市朝陽區(qū)住邦2000商務(wù)中心1號樓B區(qū)
上海公司:上海市松江區(qū)車墩北松路5255號2樓
成都公司:四川省成都市高新區(qū)益州大道復(fù)城國際T4
2009-2023 銳智互動/銳智開高軟件.All Right Reserved.京ICP備15026839號-1 隱私政策