「因此到訂單項目的主鍵是訂單項目SEQ ID 加的順序的主鍵,訂單ID」。
看起來像一個identifying relationship 。或者是多對多關係的部分表示。
在任何情況下,上圖都是不完整的 - 它不顯示通過關係遷移的屬性。換句話說,「ORDER ITEM」實體中應該有一個「ORDER ID」屬性。
在這種情況下,在複合鍵中的屬性的順序應該被反轉(即,{「ORDER ID」,「SEQ ID」}),以物理cluster相同的順序的項目一起。
「如何找到它們訂單的孩子的所有訂單項?」
如果你已經知道訂單ID,那麼你可以:
SELECT *
FROM "ORDER ITEM"
WHERE "ORDER ID" = <known value>
否則,您可以:
SELECT *
FROM "ORDER ITEM"
WHERE "ORDER ID" = (SELECT "ORDER ID" FROM ORDER WHERE <some search criteria>)
甚至:
SELECT "ORDER"."ORDER ID", <other fields...>
FROM "ORDER" JOIN "ORDER ITEM" ON "ORDER"."ORDER ID" = "ORDER ITEM"."ORDER ID"
WHERE <some search criteria>
「什麼時候我們刪除了一個訂單,如何確保所有訂單商品(訂單的子女)之前被刪除?「
也許最簡單的方法是使用了正確的級聯參照動作......
CREATE TABLE "ORDER ITEM" (
...
FOREIGN KEY ("ORDER ID") REFERENCES ORDER ("ORDER ID") ON DELETE CASCADE
)
...和DBMS會自動刪除當你刪除父相應的兒童。
否則,你可以手動刪除這樣的:
DELETE FROM "ORDER ITEM"
WHERE "ORDER ID" = <known value>
甚至:
DELETE FROM "ORDER ITEM"
WHERE "ORDER ID" = (SELECT "ORDER ID" FROM ORDER WHERE <some search criteria>)
「如果訂單項目有多於一個外鍵會發生什麼?」
沒什麼特別的。 DBMS將爲每個聲明的外鍵強制執行參照完整性。可以「合併」通過多個外鍵遷移的字段,這對於正確建模某些情況是必需的,而對於其他情況則完全錯誤。
有什麼具體的情況,你想知道更多關於?
感謝您的回答。我的意思是'Plus'是a + b = c,並不意味着'Plus'是'include'。但你是真的,我已經研究過B2B,而且我不認爲這個建模太簡單。問題來自'Plus' :-) –