2014-05-20 138 views
-1

我目前正在努力規範化現有的數據庫。我的問題類似於這個視頻http://youtu.be/4q-keGvUnag?t=5m1s約5分鐘英寸的問題。訪問數據庫正常化

他說不要做(有兩個作者的書有兩列)是我的數據庫有問題。我想知道是否可以將查詢修改爲只有一個作者列併爲每個作者分隔行的表。

這樣:

(1)[書名] [ISBN] [作者#1] [作者#2]

應該是這樣的:

(1)[書名] [ ISBN] [作者#1]

(2)[書名] [ISBN] [作者#2]

+0

對於同一本書而言,是否有兩行可以更好地解決這個問題?似乎作家應該是自己的桌子。 –

回答

0

我不認爲你在這裏描述的是規範化。在標準化的數據庫中,您將擁有

Table1 - bookId, title, isbn, authorId 
Table2 - authorId, Name... 
Table3 - book_authorId, bookId, authorId <-- assign authors to book 

但是對於您的具體問題,您描述的方式,在這裏您可以執行的操作。首先,創建第二個記錄:

Insert into <table> (title, isbn, author#1) 
    Select title, isbn, author#2 from <table> where not author#2 is null 

在此描述http://msdn.microsoft.com/en-us/library/office/bb208861%28v=office.12%29.aspx

現在,你可以刪除列author#2

這些行動應該建立什麼你在你的問題中所述

+0

誰低估了這一點,因爲我確實沒有輸入多對多的任務表。現在它是固定的 –

2

我會認爲既然關係是M:N,書籍作者關係應該有一個交集表:

書籍表

bookId (PK) | bookTitle  | isbn | etc... 

作者表

authorId (PK) | authorName | etc... 

交集表

bookId (PK) | authorId (PK) | etc... 

這是爲了做到這一點,數據庫明智的最正確的方法。

如果你對作者沒有興趣作爲一個實體,則可以跳過authors表和intersectionauthorName取代authorId

+0

+1。除了最後一段。 – podiluska