亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > 文庫 > 正文

程序員應該知道的數據庫設計的兩個誤區

2020-10-29 21:52:48
字體:
來源:轉載
供稿:網友

然而,在我所經歷過的項目中,某些數據庫的設計會存在一些問題,尤其普遍的就是下面將要描述的這兩點,個人覺得是應該避免的誤區,總結出來與大家討論。

誤區之一 備用字段

現象描述:

在數據表中,不僅設計了當前所需要的字段,而且還在其中留出幾個字段作為備用。

比方說,我設計了一個人員表(Person),其中已經添加了各種必要的字段,包括姓名(Name)、性別(Sex)、出生年月日(birthday)等等。大功告成之后,我忽然想到,將來系統中應該還會有很多其它與人相關的內容吧,比方說畢業院校,比方說工作單位等等,盡管現在根本不需要填寫,以后可能還是會用到的吧。拍腦袋一項,那就加入5個varchar2型的字段,分別叫做Text1、Text2……Text5,然后又想,應該還有一些日期型的字段需要備用,就又建立了三個date型的字段,分別起名叫做date1、date2、date3,……

原因分析:

大家應該已經看出問題了,在這個數據表中存在大量暫時無用的字段,我們可以稱之為備用字段,它們的作用是什么呢?就是以防萬一,防備可能的情況。

這似乎可以叫做防患于未然,等到時候需要的時候,就不需要在表中增加新的字段了,而且這樣做的話,一個表的數據應該會被存儲在相鄰的物理空間中,這對于性能也是有好處的。

另外的原因就是,在古老的數據庫中,如果改變數據庫的定義(包括增加字段、改變字段的類型、刪除字段等等),那么其中所有的數據就會丟失,所以這項工作非常麻煩,我們需要先建立臨時表,將數據備份出來,然后創建新表,將數據導入其中,最后再刪除原來的表。

問題所在:

這樣的做法對于項目會導致很多問題,而且原先想要解決的問題并不一定能夠解決,不信的話,請往下看。

問題一:增加大量備用字段,必定會浪費很多空間,盡管其中可能都沒有具體的數據,但是僅僅是空字段也會占據一定的空間的。

問題二:由于命名的特點,如果沒有完善的文檔管理流程,用不了多久(可能也就是兩三年),就沒有人能夠說清楚到底哪個字段代表的是什么意義了。就算有文檔管理,這些管理工作也會比較麻煩,而且在每次使用的時候都需要申請,還有可能會出現沖突的情況。

問題三:增加了這些備用字段就真的會夠用嗎?不一定,因為我們只是每個類型的字段留出幾個備用,如果數量超過,或者要使用特殊的、不常用的類型的時候,還是需要增加新的字段。比方說在上述的Person表中,我們要存儲照片,那么可能就要增加一個blob類型的photo字段,這在初期設計的時候可不一定會留出這樣的備用字段。而且如果沒有完善的管理,誰又能說清楚倒底哪個字段已經被使用,哪個字段還可以使用呢?到時候還不是要增加新的字段。

解決方案:

其實上面的這種設計方式就是一種“過度設計”,我們應該做的就是“按需設計”,在經過詳細有效的分析之后,在數據表中只放置必要的字段,而不要留出大量的備用字段。

當需要增加相關的信息的時候,就要具體情況具體分析:

如果數量很少,而且信息的性質與原表密切相關,那么就可以直接在原表上增加字段,并將相關的數據更新進去。

如果數量較大,或者并非是原表對象至關重要的屬性,那么就可以新增一個表,然后通過鍵值連接起來。

對于表的數據的存儲位置所導致的性能問題,我們可以通過在特定時間對數據庫的數據進行重組來解決,而這項工作對于長期運行的數據庫來說,也是需要定期進行的。

誤區之二 有意義的編碼

現象描述:

使用有意義的編碼作為一條記錄的ID,甚至作為數據庫的主鍵存在,例如,一個員工的編碼設置為0203004,其中02代表員工所在分公司,03代表員工所在部門,004代表員工進入到該部門的序號。

原因分析:

ID的設置方式大概有以下幾種,一種是純粹的流水號,從1開始,每次加1,或者對其將以改進,將數字轉換成為字符串的格式,比方說“0000001”;一種是無意義的隨機編碼,比方說GUID;還有一種就是有意義的編碼,特定的位數會代表一定的意義。

我想之所以大家這么喜歡使用這種方式,主要是因為想要從編碼中就能夠得到一些信息,甚至有些程序中還有專門的對編碼進行解析的模塊。就像我們的身份證號碼一樣,看到身份證號就可以知道辦身份證時的所在地、生日、性別等信息。

問題所在:

其實有意義的編碼會導致很多問題,請看:

問題一:對編碼資源的浪費。如果是純粹的流水號,那么從1到10000就可以代表一萬條記錄,但是,如果使用有意義的編碼,很可能1000條記錄就會讓五位的編碼不夠用。我就遇到過真正的情況,我們公司的投保單號碼的第一位就是有意義的,代表的時該投保單所屬的渠道,后面跟著很長的一串數字(9位)。理論上來說,這些編碼永遠都不會用完,但是,最開始的三個渠道使用的是1、4、7三個編碼,但是一次新保險法的實行,導致原有的投保單作廢,于是又啟用了三個數字2、5、8,接下來公司改名,三個渠道又分別將投保單報廢,重新啟用新的開頭數字,就這樣,短短的幾年間,所有的投保單號碼全都被用完了,其實打印出來的投保單不過100萬張。

問題二:不一定是唯一的,難以作為主鍵。想一下,我們的身份證號碼就是這樣的。原先15位的時候,后三位是序號,而男性會使用奇數,女性會使用偶數,這樣就是說,一個地區同一天生日的人,男女都不能超過500人,否則就會導致號碼的重復,盡管出現這種現象的概率比較低,但是還是客觀存在的。

問題三:代表的意義不一定準確。比方說用帶有意義的編碼來為員工定義工號,其中可能會有部門、職務等等意義,但是如果員工在部門間發生了調動,或者職級發生了改變,是否需要改變他的編碼呢?改變吧,那么所有的歷史數據都要隨之修改一次,工作量會非常大;不改變吧,那么代表的意義就不再準確,我們就無法從編碼中得到該員工準確的信息。

解決方案:

所以,對于編碼,非常不建議使用有意義的編碼,要么使用純粹的流水號,但這樣可能需要定義一個范圍比較大的類型,對于海量記錄的數據,可能會不夠用;那樣的話就可以使用GUID,這樣編碼永遠都不會重復,而且會有大量的編碼資源可用。

從上面的兩點我們可以看出,在數據庫設計的過程中,有一些在非常多系統中都使用了,但是卻帶來了很多問題的方法,對于這種情況,我們就應該仔細思考,然后痛下決心,堅決抵制。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩换脸av一区在线观看| 亚洲最大福利视频网站| 1769国产精品| 国产一区二区丝袜高跟鞋图片| 日韩亚洲精品视频| 亚洲第一福利网| 美日韩精品免费观看视频| 亚洲人成伊人成综合网久久久| 久久精品国产清自在天天线| 日韩在线观看电影| 一本色道久久综合狠狠躁篇的优点| 最近2019中文字幕在线高清| 欧美日韩福利在线观看| 欧美在线播放视频| 成人精品一区二区三区电影免费| 美女啪啪无遮挡免费久久网站| 日韩精品在线私人| 国产精品青草久久久久福利99| 日韩欧美精品免费在线| 日本韩国欧美精品大片卡二| 中文字幕日韩专区| 亚洲精品v天堂中文字幕| 亚洲国产精品va在线看黑人| 青草成人免费视频| 日韩中文字幕在线视频| 国产美女久久精品香蕉69| 成人黄色av播放免费| 欧美最猛黑人xxxx黑人猛叫黄| 日韩激情av在线播放| 国产精品一二三视频| 九九热这里只有在线精品视| 性欧美在线看片a免费观看| 91国内在线视频| 久久频这里精品99香蕉| www.亚洲一区| 国产亚洲精品久久久久久777| 国产精品美女av| 精品久久久久久国产91| 中文在线资源观看视频网站免费不卡| 精品精品国产国产自在线| 91精品啪aⅴ在线观看国产| 国产在线观看精品一区二区三区| 亚洲精品欧美日韩| 亚洲精品在线看| 日韩在线观看免费高清完整版| 国产专区精品视频| 国产男人精品视频| 九九精品在线播放| 一区二区三区视频观看| 日韩精品高清视频| 日产日韩在线亚洲欧美| 亚洲人精选亚洲人成在线| 国产精品丝袜久久久久久高清| 成人免费黄色网| 国产中文字幕日韩| 92看片淫黄大片欧美看国产片| 久久久久国产精品www| 成人午夜一级二级三级| 久久久www成人免费精品张筱雨| 久久精品美女视频网站| 亚洲精品美女在线| 日韩在线观看视频免费| 一区二区三区四区视频| 久久精品影视伊人网| 日日狠狠久久偷偷四色综合免费| 亚洲第一天堂无码专区| 日韩中文字幕在线视频播放| 久久亚洲精品一区| 亚洲自拍小视频免费观看| 亚洲资源在线看| 国产成人自拍视频在线观看| 亚洲欧洲日产国码av系列天堂| 国产丝袜高跟一区| 欧美日韩另类视频| 日本不卡高字幕在线2019| 欧美日韩国产精品专区| 国产精品第2页| x99av成人免费| 亚洲国产精品人人爽夜夜爽| 97免费在线视频| 成人精品一区二区三区电影免费| 欧美成人精品在线视频| 69久久夜色精品国产69乱青草| 97在线视频免费看| 中文字幕精品在线| 色久欧美在线视频观看| 国产91露脸中文字幕在线| 亚洲天堂精品在线| 国产精品久久久久aaaa九色| 亚洲男人av电影| 久久精品一本久久99精品| 麻豆国产精品va在线观看不卡| 亚洲伊人成综合成人网| 成人欧美在线视频| 久久99热精品这里久久精品| 亚洲人成亚洲人成在线观看| 91av在线免费观看| 亚洲成人免费在线视频| 国产精品自在线| 精品中文字幕在线| 热久久免费视频精品| 日韩高清电影好看的电视剧电影| 亚洲a级在线播放观看| 国产精品亚洲一区二区三区| 91色精品视频在线| 欧美激情va永久在线播放| 久久久久久国产| 最近2019中文字幕mv免费看| 国产精品www网站| 91精品久久久久久久久中文字幕| 亚洲人成人99网站| 国产视频精品xxxx| 欧美丰满老妇厨房牲生活| 欧美亚洲另类在线| 午夜精品一区二区三区av| 国产精品视频资源| 欧美一级淫片播放口| 中文字幕亚洲综合久久筱田步美| 国产精品白丝av嫩草影院| 久久久这里只有精品视频| 欧美激情喷水视频| 亚洲毛片一区二区| 亚洲欧美制服中文字幕| 欧美日韩视频在线| 91精品视频免费观看| 国产精品91视频| 揄拍成人国产精品视频| 欧美极品少妇xxxxx| 国产亚洲精品一区二区| 色偷偷av一区二区三区| 中文字幕日韩精品有码视频| 亚洲视频自拍偷拍| 91久久国产精品91久久性色| 668精品在线视频| 欧美日韩国产精品一区| 九九热视频这里只有精品| 日韩中文在线观看| 国内精品久久久久久久| 亚洲视频一区二区三区| 国产精品视频永久免费播放| 精品久久久久久中文字幕| 一区二区日韩精品| 色99之美女主播在线视频| 亚洲高清福利视频| 日韩美女av在线免费观看| 色噜噜狠狠狠综合曰曰曰88av| 亚洲夜晚福利在线观看| 亚洲高清色综合| 北条麻妃99精品青青久久| 久久久国产一区二区| 亚洲经典中文字幕| 91天堂在线视频| 国产在线观看精品一区二区三区| 日韩美女在线观看一区| 伊人激情综合网| 久久中文字幕在线| 不卡av在线网站| 欧美午夜美女看片| 欧美另类69精品久久久久9999| 亚洲图片在线综合| 国产成人精品av在线| 亚洲国产精品成人一区二区| 日本三级久久久| 不卡av在线播放|