2011-11-22 74 views
1

我想正常化一個數據庫,並且我們目前有一個名爲BOOK的表格,其中ISBN(FK)和CoverType是列,並且它們連接在一起形成一個PK。正常化兩列表

BOOK 

|  ISBN  | CoverType | 
|__________________|_____________| 
| 978-0132354790 | Hardback | 
| 978-0132354790 | Paperback | 

這張桌子已經歸?我假設它是這樣的,但我並沒有太多的理由支持它。 感謝

回答

2

因爲它在你的文章BOOK(ISBN, COVERTYPE)是規範化的,因爲所有的字段都是單值的,主鍵的任何部分都不能從它的一個子集派生(例如,你不能分辨哪些是可能的CoverTypes對於ISBN只是通過查看ISBN本身,反過來也是如此)。

0

我不知道什麼是歸它....

如果有別的話,我不知道,但是從我所看到的,它看起來不錯。

0

其實在這張桌子上沒有太多標準化的東西..你沒有裁員,也沒有關係。看起來很好。

1

該表是否已歸一化?

首先要小心,然後回答。

時應注意的事項

在關係建模的某些術語具有非常特定的含義。 正常化不是其中之一,至少在有人按照您的方式使用時不會這樣。

有必要問一下,「這張桌子是3NF嗎?」還是「這張桌子是5NF?」,但是詢問它是否正常化是沒有意義的。在如此孤獨,你可以找到答案,其中「這是標準化」是指

  • 它在3NF
  • 它在5NF
  • 它有一個ID號
  • 它具有小於20列
  • 所有文字已被替換爲ID號

只有前兩個纔有意義。其餘與標準化完全無關。

最後,我的回答

我假設你的數據是有意義的。我從來沒有比會計層面更詳細地處理書籍,所以我從不需要知道ISBN和封面類型如何協同工作。

您可以像這樣構建您的表格。

create table books (
    isbn varchar(13) not null, 
    cover_type varchar(10) not null, 
    primary key (isbn, cover_type) 
); 

如果你這樣做,你有沒有非黃金屬性(所有列的至少一個候選關鍵字的一部分),所以你至少2NF是。沒有傳遞依賴性,所以你至少在3NF。沒有多值依賴關係,所以至少4NF。根本沒有連接依賴關係,所以你處於6NF或「最終標準形式」。

在現實生活中,你會希望對這些列有更多限制。我建議至少兩個。

  1. 「cover_type」上的檢查約束或外鍵約束。
  2. 計算並比較「isbn」上的校驗位。

如果您只導入,則可以在導入之前編寫一個外部程序來驗證檢查數字。

2

假設會添加更多的行,您可以預計像「精裝本」和「平裝本」這樣的值將被複制。把它們移動到一個單獨的表格如「CoverType」並加入ID是否有意義?