每個(gè)人都會(huì)犯錯(cuò)誤,但作為數(shù)據(jù)庫(kù)管理員,我們應(yīng)該盡量避免失誤,從而為公司降低成本,并確保數(shù)據(jù)質(zhì)量。下面的五個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)失誤必須引起我們的警惕。

1、選擇恰當(dāng)?shù)臄?shù)據(jù)類(lèi)型,避免數(shù)據(jù)庫(kù)的過(guò)度膨脹
請(qǐng)留意數(shù)據(jù)類(lèi)型的選擇。例如,如果你很清楚某列的數(shù)值范圍在0-100,000之間,那么就不必使用BIGINT數(shù)據(jù)類(lèi)型,因?yàn)镮NT類(lèi)型就已經(jīng)足夠了。
選擇前者意味著,你每插入一條數(shù)據(jù)就比后者浪費(fèi)了4個(gè)字節(jié)。這聽(tīng)起來(lái)也許微不足道,但隨著數(shù)據(jù)量的增長(zhǎng),問(wèn)題將會(huì)凸顯出來(lái)。
2、遵循ISO標(biāo)準(zhǔn),保證異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)之間的互通性
大型企業(yè)的IT基礎(chǔ)架構(gòu)非常復(fù)雜,可能需要不同數(shù)據(jù)庫(kù)系統(tǒng)之間的數(shù)據(jù)交換。我們以TIMESTAMP數(shù)據(jù)類(lèi)型為例,在Transact-SQL中定義的 TIMESTAMP數(shù)據(jù)類(lèi)型與ISO標(biāo)準(zhǔn)有所不同。其它的數(shù)據(jù)庫(kù)系統(tǒng)與ISO標(biāo)準(zhǔn)也有所差別。所以,我們要盡可能地遵循ISO標(biāo)準(zhǔn),以保證異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng) 之間的互通性。
3、以恰當(dāng)?shù)臋C(jī)制實(shí)現(xiàn)序列化
保證在數(shù)據(jù)庫(kù)中插入記錄的序列化非常 有必要,許多數(shù)據(jù)庫(kù)設(shè)計(jì)者通過(guò)各種機(jī)制來(lái)確保序列化的應(yīng)用。一些數(shù)據(jù)庫(kù)設(shè)計(jì)者喜歡在數(shù)據(jù)庫(kù)設(shè)計(jì)中引入GUID,但引入GUID并不是一個(gè)好的選擇,這是因 為GUID默認(rèn)并非序列化的,使用GUID列作為主鍵和/或索引甚至?xí)斐尚阅軉?wèn)題。
4、創(chuàng)建索引時(shí)要將外鍵考慮在內(nèi)
如果你的數(shù)據(jù)庫(kù)中已定義外鍵,那么在建立索引的時(shí)候就要多加留神了,要把這種情況納入數(shù)據(jù)庫(kù)設(shè)計(jì)的整體之中去。
5、不要忽略與業(yè)務(wù)需求相關(guān)的候選鍵
數(shù)據(jù)庫(kù)設(shè)計(jì)者不應(yīng)只將注意力放在代理鍵上,而忘卻業(yè)務(wù)需求。顯然,這對(duì)數(shù)據(jù)質(zhì)量非常不利。如果你沒(méi)有在與業(yè)務(wù)相關(guān)的候選鍵上建立任何約束或索引,可能會(huì)出現(xiàn)重復(fù)值。
請(qǐng)遠(yuǎn)離上面的5個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)失誤吧,這會(huì)幫助你為公司節(jié)省成本,并提高數(shù)據(jù)質(zhì)量。