"遵守標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)具有以下特點(diǎn):有一組表專門存放通過鍵連接起來的關(guān)聯(lián)數(shù)據(jù)。比方說,某個(gè)存放客戶及其有關(guān)定單的 3NF 數(shù)據(jù)庫(kù)就可能有兩個(gè)表:Customer 和 Order。Order 表不包含定單關(guān)聯(lián)客戶的任何信息,但表內(nèi)會(huì)存放一個(gè)鍵值,該鍵指向 Customer 表里包含該客戶信息的那一行。更高層次的標(biāo)準(zhǔn)化也有,但更標(biāo)準(zhǔn)是否就一定更好呢?答案是不一定。事實(shí)上,對(duì)某些項(xiàng)目來說,甚至就連 3NF 都可能給數(shù)據(jù)庫(kù)引入太高的復(fù)雜性。
為了效率的緣故,對(duì)表不進(jìn)行標(biāo)準(zhǔn)化有時(shí)也是必要的,這樣的例子很多。曾經(jīng)有個(gè)開發(fā)餐飲分析軟件的活就是用非標(biāo)準(zhǔn)化表把查詢時(shí)間從平均 40 秒降低到了兩秒左右。雖然我不得不這么做,但我絕不把數(shù)據(jù)表的非標(biāo)準(zhǔn)化當(dāng)作當(dāng)然的設(shè)計(jì)理念。而具體的操作不過是一種派生。所以如果表出了問題重新產(chǎn)生非標(biāo)準(zhǔn)化的表是完全可能的。"
設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候要注意各個(gè)字段實(shí)際的意義, 比如說你做的定單, 如果該業(yè)務(wù)員換了單位, 你還會(huì)去修改他做的所有定單嗎? 這種事情是沒有的也是不應(yīng)該的, 定單就是要反映做好時(shí)的狀況, 所以, 姓名在做定單的時(shí)候一定要填進(jìn)去, 一旦定單簽好了, 無(wú)論ID有什么變化都不應(yīng)該再做改動(dòng), 從這個(gè)意義上說, 定單表里一定要有業(yè)務(wù)員姓名的項(xiàng)目, 以便如實(shí)地反映出定單做好時(shí)的狀態(tài).
比較好的書籍:
<數(shù)據(jù)庫(kù)系統(tǒng)概念>