我想正常化一個數據庫,並且我們目前有一個名爲BOOK的表格,其中ISBN(FK)和CoverType是列,並且它們連接在一起形成一個PK。正常化兩列表
即
BOOK
| ISBN | CoverType |
|__________________|_____________|
| 978-0132354790 | Hardback |
| 978-0132354790 | Paperback |
這張桌子已經歸?我假設它是這樣的,但我並沒有太多的理由支持它。 感謝
我想正常化一個數據庫,並且我們目前有一個名爲BOOK的表格,其中ISBN(FK)和CoverType是列,並且它們連接在一起形成一個PK。正常化兩列表
即
BOOK
| ISBN | CoverType |
|__________________|_____________|
| 978-0132354790 | Hardback |
| 978-0132354790 | Paperback |
這張桌子已經歸?我假設它是這樣的,但我並沒有太多的理由支持它。 感謝
因爲它在你的文章BOOK(ISBN, COVERTYPE)
是規範化的,因爲所有的字段都是單值的,主鍵的任何部分都不能從它的一個子集派生(例如,你不能分辨哪些是可能的CoverTypes對於ISBN只是通過查看ISBN本身,反過來也是如此)。
我不知道什麼是不歸它....
如果有別的話,我不知道,但是從我所看到的,它看起來不錯。
其實在這張桌子上沒有太多標準化的東西..你沒有裁員,也沒有關係。看起來很好。
該表是否已歸一化?
首先要小心,然後回答。
時應注意的事項
在關係建模的某些術語具有非常特定的含義。 正常化不是其中之一,至少在有人按照您的方式使用時不會這樣。
有必要問一下,「這張桌子是3NF嗎?」還是「這張桌子是5NF?」,但是詢問它是否正常化是沒有意義的。在如此孤獨,你可以找到答案,其中「這是標準化」是指
只有前兩個纔有意義。其餘與標準化完全無關。
最後,我的回答
我假設你的數據是有意義的。我從來沒有比會計層面更詳細地處理書籍,所以我從不需要知道ISBN和封面類型如何協同工作。
您可以像這樣構建您的表格。
create table books (
isbn varchar(13) not null,
cover_type varchar(10) not null,
primary key (isbn, cover_type)
);
如果你這樣做,你有沒有非黃金屬性(所有列的至少一個候選關鍵字的一部分),所以你至少2NF是。沒有傳遞依賴性,所以你至少在3NF。沒有多值依賴關係,所以至少4NF。根本沒有連接依賴關係,所以你處於6NF或「最終標準形式」。
在現實生活中,你會希望對這些列有更多限制。我建議至少兩個。
如果您只導入,則可以在導入之前編寫一個外部程序來驗證檢查數字。
假設會添加更多的行,您可以預計像「精裝本」和「平裝本」這樣的值將被複制。把它們移動到一個單獨的表格如「CoverType」並加入ID是否有意義?