外键是否可能存储与主键值不匹配的值?

时间:2019-07-07 09:30:01

标签: mysql database database-design

数据库设计问题。假设我有两个表:[PEOPLE]和[FRUITS]:

[PEOPLE]
- id
- fruit_id
- many other columns

[FRUITS]
- id
- name
- many other columns

与PEOPLE.fruit_id = FRUITS.id相关。

因此,fruit_id可以存储[FRUITS]表的ID中的任何值。但是问题是,我希望fruit_id除了其他值之外还存储值,例如“所有水果”,“一些水果”,“没有水果”。

我已经使用NULL作为“无毛发”值的标志。

在这种情况下最好的解决方案是什么?

出于好奇,我想问:当我想要一个外键存储多个主键的值时,该怎么办?例如:还有一个表[VEGETABLES]:

[VEGETABLES]
- id
- name
- many other columns different from [FRUITS]

我希望PEOPLE.fruits_id能够存储FRUITS.id和VEGETABLES.id的值。

我不是英语母语人士,所以请原谅我的错误。

1 个答案:

答案 0 :(得分:0)

在用户表中存储fruit_id可以使您为一个人分配一个或一个(空)水果。 如果要为人员表中的一行分配多个水果,则需要一个数据透视表(一对多)

例如

PEOPLE_FRUITS
- people_id
- fruit_id
- unique key people_id, fruit_id

通过这种方式,您可以将任何一个水果,一个或多个水果分配给people表中的一行。 唯一键将不允许多次将同一水果分配给同一个人。

蔬菜也一样

相关问题