我有一个order
表,该表中的每个订单都属于device
或part
(这两个字段在字段中没有特定的交集)。
所以我需要将did
或pid
存储为order
表中的FK。
"device"
+----+....
| id |<---------+
+----+.... :
: : : : . :
:
:
"part" :
+----+.... :
| id |<-------+ :
+----+.... : :
: : : : . : :
: :
: :
"order" @ @
+-----+-------+....
| id | for |....
+-----+-------+....
: : : : : : : : .
现在我应该怎么做?
type
字段添加到order
表格并同时存储pid
或did
一列(例如for
)type
,pid
,did
列goods
)并在order
,part
,device
哪一个是最好的方法?还是其他一些方法?
答案 0 :(得分:2)
使用独占外键或继承,如here所述。请注意CHECK,这是MySQL的not enforced,所以你必须&#34;模拟&#34;它通过触发器。
请不要输入&#34;输入&#34;方法,它可以导致problems。
答案 1 :(得分:1)
我会选择两个表,一个用于订单,另一个用于商品。物料表将具有ID,类型(部件或设备; P或D)以及其余详细信息。在订单表中,我将只有一个FK到项目表ID。
答案 2 :(得分:0)
如果是我,我会创建以下FK字段:did
和pid
。你总是有一个值,而不是另一个。
您的查询类似于以下内容:
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