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