如果我在一個引用另一個表中的相同主鍵的表中有兩個外鍵,這是什麼類型的關係?一對多?或一對一?數據建模兩個引用相同主鍵的外鍵
例如:
表作者有主鍵AUTHOR_ID
表本書有兩個外鍵PRIMARY_AUTHOR_ID和SECONDARY_AUTHOR_ID兩個參考AUTHOR_ID
什麼樣的關係,這是?
*我知道作者書中的例子可以用更好的方式處理,我只是用這些字段作爲例子。
如果我在一個引用另一個表中的相同主鍵的表中有兩個外鍵,這是什麼類型的關係?一對多?或一對一?數據建模兩個引用相同主鍵的外鍵
例如:
表作者有主鍵AUTHOR_ID
表本書有兩個外鍵PRIMARY_AUTHOR_ID和SECONDARY_AUTHOR_ID兩個參考AUTHOR_ID
什麼樣的關係,這是?
*我知道作者書中的例子可以用更好的方式處理,我只是用這些字段作爲例子。
它看起來像你建立一個書籍和它的作者之間的1 .. [1-2]關係。換句話說,書和主作者之間有1..1的關係,並且書和次作者之間實際上有1 .. [0-1]的關係。有人可能會爭辯說,因此,書本與其作者之間有1 .. [1-2]的關係。
這隻考慮方程的一個方向,因爲顯然作者也可以有多本書,所以真正的關係更像N .. [1-2]書籍(複數)和作者之間,取決於關於使用的符號和方法。
我意識到你剛剛做了一個例子,以便你可以問這個問題。關於這個構造的使用,我會主張你應該考慮一個更一般的N..M關係(在書籍和它的作者之間)。從設計的角度來看,你不想要的一件事do是將過多的業務邏輯代碼寫入到結構表示中的,對於初始的業務規則來說,建議你有一個有限的(1..1或1..N)關係以及後來的業務需求(微妙的或可能不是這樣)巧妙地)改變,現在你需要能夠建模N..M,這意味着模式的改變,這當然是可能的,但在某些情況下可以預見的可以避免的,你可以選擇不脆弱。另一種說法是不成熟的優化是所有邪惡的根源。)
你可能已經知道這一點,雖然也許是爲了別人的利益,去N..M你會刪除外鍵BOOKS表,並引入第三個表:BOOKS_AUTHORS,它將有一個用於表BOOKS(BOOK_ID)的外鍵和另一個用於AUTHORS(AUTHOR_ID)的外鍵。您還可以添加一列來指定作者的順序,爲作者排序,爲主要,次要,第三等...
(注:我傾向於命名錶使用複數,例如書籍,因爲表是一個集合,Book是作爲BOOKS表的一員,當然,從OOP開始,你傾向於用單數命名一個類,例如BOOK,Book是類BOOK的一個實例 - 只是術語,主要是。)
呃.... *兩個外鍵關係*?我不認爲這個特定的「結構」有任何花哨或吸引人的名字..... – 2012-07-05 19:43:04
但是,當定義表格之間的基數時,你會考慮關係a 1..1還是1..n? – 2012-07-05 19:43:44
那麼,最有可能的'PRIMARY_AUTHOR_ID'將是1:1(必需)關係,而'SECONDARY_AUTHOR_ID'最有可能是0:1(可選) - 但這只是我的猜測 – 2012-07-05 19:44:30