這篇文章主要介紹“數(shù)據(jù)庫(kù)設(shè)計(jì)的誤區(qū)有哪些”,在日常操作中,相信很多人在數(shù)據(jù)庫(kù)設(shè)計(jì)的誤區(qū)有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”數(shù)據(jù)庫(kù)設(shè)計(jì)的誤區(qū)有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),金堂縣企業(yè)網(wǎng)站建設(shè),金堂縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,金堂縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,金堂縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。誤區(qū)之一 備用字段
現(xiàn)象描述:
在數(shù)據(jù)表中,不僅設(shè)計(jì)了當(dāng)前所需要的字段,而且還在其中留出幾個(gè)字段作為備用。
比方說,我設(shè)計(jì)了一個(gè)人員表(Person),其中已經(jīng)添加了各種必要的字段,包括姓名(Name)、性別(Sex)、出生年月日(birthday)等等。大功告成之后,我忽然想到,將來系統(tǒng)中應(yīng)該還會(huì)有很多其它與人相關(guān)的內(nèi)容吧,比方說畢業(yè)院校,比方說工作單位等等,盡管現(xiàn)在根本不需要填寫,以后可能還是會(huì)用到的吧。拍腦袋一項(xiàng),那就加入5個(gè)varchar2型的字段,分別叫做Text1、Text2……Text5,然后又想,應(yīng)該還有一些日期型的字段需要備用,就又建立了三個(gè)date型的字段,分別起名叫做date1、date2、date3,……
原因分析:
大家應(yīng)該已經(jīng)看出問題了,在這個(gè)數(shù)據(jù)表中存在大量暫時(shí)無用的字段,我們可以稱之為備用字段,它們的作用是什么呢?就是以防萬一,防備可能的情況。
這似乎可以叫做防患于未然,等到時(shí)候需要的時(shí)候,就不需要在表中增加新的字段了,而且這樣做的話,一個(gè)表的數(shù)據(jù)應(yīng)該會(huì)被存儲(chǔ)在相鄰的物理空間中,這對(duì)于性能也是有好處的。
另外的原因就是,在古老的數(shù)據(jù)庫(kù)中,如果改變數(shù)據(jù)庫(kù)的定義(包括增加字段、改變字段的類型、刪除字段等等),那么其中所有的數(shù)據(jù)就會(huì)丟失,所以這項(xiàng)工作非常麻煩,我們需要先建立臨時(shí)表,將數(shù)據(jù)備份出來,然后創(chuàng)建新表,將數(shù)據(jù)導(dǎo)入其中,最后再刪除原來的表。
問題所在:
這樣的做法對(duì)于項(xiàng)目會(huì)導(dǎo)致很多問題,而且原先想要解決的問題并不一定能夠解決,不信的話,請(qǐng)往下看。
問題一:增加大量備用字段,必定會(huì)浪費(fèi)很多空間,盡管其中可能都沒有具體的數(shù)據(jù),但是僅僅是空字段也會(huì)占據(jù)一定的空間的。
問題二:由于命名的特點(diǎn),如果沒有完善的文檔管理流程,用不了多久(可能也就是兩三年),就沒有人能夠說清楚到底哪個(gè)字段代表的是什么意義了。就算有文檔管理,這些管理工作也會(huì)比較麻煩,而且在每次使用的時(shí)候都需要申請(qǐng),還有可能會(huì)出現(xiàn)沖突的情況。
問題三:增加了這些備用字段就真的會(huì)夠用嗎?不一定,因?yàn)槲覀冎皇敲總€(gè)類型的字段留出幾個(gè)備用,如果數(shù)量超過,或者要使用特殊的、不常用的類型的時(shí)候,還是需要增加新的字段。比方說在上述的Person表中,我們要存儲(chǔ)照片,那么可能就要增加一個(gè)blob類型的photo字段,這在初期設(shè)計(jì)的時(shí)候可不一定會(huì)留出這樣的備用字段。而且如果沒有完善的管理,誰又能說清楚倒底哪個(gè)字段已經(jīng)被使用,哪個(gè)字段還可以使用呢?到時(shí)候還不是要增加新的字段。
解決方案:
其實(shí)上面的這種設(shè)計(jì)方式就是一種“過度設(shè)計(jì)”,我們應(yīng)該做的就是“按需設(shè)計(jì)”,在經(jīng)過詳細(xì)有效的分析之后,在數(shù)據(jù)表中只放置必要的字段,而不要留出大量的備用字段。
當(dāng)需要增加相關(guān)的信息的時(shí)候,就要具體情況具體分析:
如果數(shù)量很少,而且信息的性質(zhì)與原表密切相關(guān),那么就可以直接在原表上增加字段,并將相關(guān)的數(shù)據(jù)更新進(jìn)去。
如果數(shù)量較大,或者并非是原表對(duì)象至關(guān)重要的屬性,那么就可以新增一個(gè)表,然后通過鍵值連接起來。
對(duì)于表的數(shù)據(jù)的存儲(chǔ)位置所導(dǎo)致的性能問題,我們可以通過在特定時(shí)間對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行重組來解決,而這項(xiàng)工作對(duì)于長(zhǎng)期運(yùn)行的數(shù)據(jù)庫(kù)來說,也是需要定期進(jìn)行的。
誤區(qū)之二 有意義的編碼
現(xiàn)象描述:
使用有意義的編碼作為一條記錄的ID,甚至作為數(shù)據(jù)庫(kù)的主鍵存在,例如,一個(gè)員工的編碼設(shè)置為0203004,其中02代表員工所在分公司,03代表員工所在部門,004代表員工進(jìn)入到該部門的序號(hào)。
原因分析:
ID的設(shè)置方式大概有以下幾種,一種是純粹的流水號(hào),從1開始,每次加1,或者對(duì)其將以改進(jìn),將數(shù)字轉(zhuǎn)換成為字符串的格式,比方說“0000001”;一種是無意義的隨機(jī)編碼,比方說GUID;還有一種就是有意義的編碼,特定的位數(shù)會(huì)代表一定的意義。
我想之所以大家這么喜歡使用這種方式,主要是因?yàn)橄胍獜木幋a中就能夠得到一些信息,甚至有些程序中還有專門的對(duì)編碼進(jìn)行解析的模塊。就像我們的身份證號(hào)碼一樣,看到身份證號(hào)就可以知道辦身份證時(shí)的所在地、生日、性別等信息。
問題所在:
其實(shí)有意義的編碼會(huì)導(dǎo)致很多問題,請(qǐng)看:
問題一:對(duì)編碼資源的浪費(fèi)。如果是純粹的流水號(hào),那么從1到10000就可以代表一萬條記錄,但是,如果使用有意義的編碼,很可能1000條記錄就會(huì)讓五位的編碼不夠用。我就遇到過真正的情況,我們公司的投保單號(hào)碼的第一位就是有意義的,代表的時(shí)該投保單所屬的渠道,后面跟著很長(zhǎng)的一串?dāng)?shù)字(9位)。理論上來說,這些編碼永遠(yuǎn)都不會(huì)用完,但是,最開始的三個(gè)渠道使用的是1、4、7三個(gè)編碼,但是一次新保險(xiǎn)法的實(shí)行,導(dǎo)致原有的投保單作廢,于是又啟用了三個(gè)數(shù)字2、5、8,接下來公司改名,三個(gè)渠道又分別將投保單報(bào)廢,重新啟用新的開頭數(shù)字,就這樣,短短的幾年間,所有的投保單號(hào)碼全都被用完了,其實(shí)打印出來的投保單不過100萬張。
問題二:不一定是的,難以作為主鍵。想一下,我們的身份證號(hào)碼就是這樣的。原先15位的時(shí)候,后三位是序號(hào),而男性會(huì)使用奇數(shù),女性會(huì)使用偶數(shù),這樣就是說,一個(gè)地區(qū)同一天生日的人,男女都不能超過500人,否則就會(huì)導(dǎo)致號(hào)碼的重復(fù),盡管出現(xiàn)這種現(xiàn)象的概率比較低,但是還是客觀存在的。
問題三:代表的意義不一定準(zhǔn)確。比方說用帶有意義的編碼來為員工定義工號(hào),其中可能會(huì)有部門、職務(wù)等等意義,但是如果員工在部門間發(fā)生了調(diào)動(dòng),或者職級(jí)發(fā)生了改變,是否需要改變他的編碼呢?改變吧,那么所有的歷史數(shù)據(jù)都要隨之修改一次,工作量會(huì)非常大;不改變吧,那么代表的意義就不再準(zhǔn)確,我們就無法從編碼中得到該員工準(zhǔn)確的信息。
解決方案:
所以,對(duì)于編碼,非常不建議使用有意義的編碼,要么使用純粹的流水號(hào),但這樣可能需要定義一個(gè)范圍比較大的類型,對(duì)于海量記錄的數(shù)據(jù),可能會(huì)不夠用;那樣的話就可以使用GUID,這樣編碼永遠(yuǎn)都不會(huì)重復(fù),而且會(huì)有大量的編碼資源可用。
到此,關(guān)于“數(shù)據(jù)庫(kù)設(shè)計(jì)的誤區(qū)有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
網(wǎng)頁(yè)標(biāo)題:數(shù)據(jù)庫(kù)設(shè)計(jì)的誤區(qū)有哪些-創(chuàng)新互聯(lián)
分享鏈接:http://www.rwnh.cn/article8/ceghop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、云服務(wù)器、靜態(tài)網(wǎng)站、定制開發(fā)、網(wǎng)站營(yíng)銷、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容