Sql-Server

在廣義數據模型上實現外鍵

  • November 20, 2013

假設下面的 ASCII 樹是一個 UML 通用概念模型。為了在 UML 中表示這些實體/類,讓我們假設

$$ mammal $$一個超級班,和一級班,$$ wild $$和$$ domestic $$是 UML 中的子類。換句話說,類$$ wild $$繼承所有屬性$$ mammal $$, 和$$ domestic $$繼承所有屬性$$ mammal $$也是。此外,$$ raccoon $$和$$ white tail deer $$繼承所有屬性$$ wild $$. 我想將 UML 模型轉換為關係數據庫模型。

注意如何

$$ raccoon $$擴展兩者$$ wild $$和$$ domestic $$. 換句話說,它有兩個父母。我通常會使所有後代表的主鍵與其父主鍵相同。此外,我會讓後代表中的外鍵與其父表中的主鍵相同。因為$$ raccoon $$有兩個父母,我將如何建造那張桌子?

mammal
|
+- wild
|  |
|  +- raccoon
|  |
|  +- white tail deer
|
+- domestic
   |
   +- cat
   |   |
   |   +- siberian
   |
   +- dog
   |   |
   |   +- golden retriever
   |   |
   |   +- lab
   |
   +- raccoon 

一個表中可以有兩個(或更多)外鍵。它們既可以涉及相同的屬性,也可以引用不同的表。所以你可以有 2 個外鍵racoon(pk),一個引用wild(pk),另一個引用domestic(pk)。就像是:

CREATE TABLE raccon
( mammal_id INT  PRIMARY KEY
, FOREIGN KEY (mammal_id)
   REFERENCES domestic (mammal_id)
, FOREIGN KEY (mammal_id)
   REFERENCES wild (mammal_id)
) ;

(假設所有表都mammal_id作為主鍵)

引用自:https://dba.stackexchange.com/questions/53604