簡體   English   中英

外鍵來自SQL中一列中的兩個表

[英]Foreign Key From two tables in one column in SQL

我有一個order表,該表中的每個訂單都屬於一個device或一個part (這兩個在字段中沒有特定的交集)。
所以我需要在order表中將didpid存儲為FK。

"device"
+----+....
| id |<---------+
+----+....      :
: : : : .       :
                :
                :
"part"          :
+----+....      :
| id |<-------+ :
+----+....    : :
: : : : .     : :
              : :
              : :
     "order"  @ @
     +-----+-------+....
     | id  |  for  |....
     +-----+-------+....
     : : : : : : : : .

現在我該怎么做?

  • 將一個type字段添加到order表並將piddid存儲在一列上(例如for
  • 使用typepiddid列創建中間視圖
  • 創建更高級別的表(例如goods )並使其PK在orderpartdevice上為FK

哪一個是最好的方法? 還是其他一些方法?

要么使用獨家的外鍵繼承 ,如解釋在這里 請注意CHECK 沒有強制執行 ,因此你必須通過觸發器“模擬”它。

請不要做“類型”的方法,它可能會導致問題

我會選擇兩個表,一個用於訂單,另一個用於商品。 物料表將具有ID,類型(部件或設備; P或D)以及其余詳細信息。 在訂單表中,我將只有一個FK到項目表ID。

如果是我,我會創建以下FK字段: didpid 你總是有一個值,而不是另一個。

您的查詢將如下所示:

SELECT o.*, COALESCE(p.descr, d.descr) AS Description,
            COALESCE(p.number, d.number) AS PNumber
FROM order o
LEFT JOIN device d ON o.did = d.id
LEFT JOIN part p ON o.pid = p.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM