Sql 错误:外键引用两个不同表中的主键

Sql 错误:外键引用两个不同表中的主键,sql,foreign-keys,primary-key,anomaly-detection,Sql,Foreign Keys,Primary Key,Anomaly Detection,我创建了一个如下的测试场景: 我有三张桌子,即父亲、孩子、食物 父表具有主自动递增键和名称列。 子表具有主自动递增键和名称列。 食物有一列,我想要一个外键和一列食物名称 father ----------- id name 1 kevin 2 adam child ----------- id father_id name 1 1 fred 2 1 john 3 2 al

我创建了一个如下的测试场景:

我有三张桌子,即父亲、孩子、食物

父表具有主自动递增键和名称列。 子表具有主自动递增键和名称列。 食物有一列,我想要一个外键和一列食物名称

father
-----------
id    name
1     kevin
2     adam

child
-----------
id    father_id    name
1     1            fred
2     1            john
3     2            alan

food
------------
person_id                name
1(from father table)     pizza
2(from child table)      burger
1(from child table)      hotdog
现在餐桌上出现了异常。我分不清(1个比萨饼)是给父亲还是孩子的

测试用例: 从father.id=1的食物中选择food.name;产量:比萨饼
从child.id=1的食物中选择food.name;输出:热狗

我认为设计相当糟糕。为什么不创建一个“person”表,填充它并确定其中的一个人是孩子还是父亲,然后在food table中使用person id?

为父亲和孩子创建两个表很重要,但我们可以编辑food table,您还有什么建议吗?您可以将person_type字段添加到food table中,假设这个人是父亲还是孩子。当然,您需要删除外键或任何类型的外键控件。同样,在我看来,这是一个糟糕的设计。@GhazniAli如果某件事对这个问题很重要,就把它放在这个问题上。(但请用足够的字眼说清楚。)谷歌我关于“数据库子类型”的评论可能重复。(你会看到它与“两个/多个表的外键”关联。)(虽然这里实际上没有FK。)事实上,如果你刚刚在谷歌上搜索了你的标题或其他关于你的问题的明确声明,你会发现这是一个有很多重复的常见问题解答。例如。