外键来自SQL中一列中的两个表

时间:2014-07-03 10:47:28

标签: mysql sql database-design relational-database foreign-key-relationship

我有一个order表,该表中的每个订单都属于devicepart(这两个字段在字段中没有特定的交集)。
所以我需要将didpid存储为order表中的FK。

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

现在我应该怎么做?

  • type字段添加到order表格并同时存储piddid 一列(例如for
  • 使用创建中间视图 typepiddid
  • 创建更高级别的表格(例如 goods)并在orderpartdevice
  • 上将其PK设为FK

哪一个是最好的方法?还是其他一些方法?

3 个答案:

答案 0 :(得分:2)

使用独占外键继承,如here所述。请注意CHECK,这是MySQL的not enforced,所以你必须&#34;模拟&#34;它通过触发器。

请不要输入&#34;输入&#34;方法,它可以导致problems

答案 1 :(得分:1)

我会选择两个表,一个用于订单,另一个用于商品。物料表将具有ID,类型(部件或设备; P或D)以及其余详细信息。在订单表中,我将只有一个FK到项目表ID。

答案 2 :(得分:0)

如果是我,我会创建以下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