1

外键必须是唯一的吗?

我正在尝试创建一个表来存储引用用户的外键和列“profileIconId”。该表的目的是列出用户拥有的图标。我想使用级联删除。

我的另一个选择是用于SELECT FROM WHERE检索列表并用于DELETE FROM WHERE在删除用​​户时删除与键匹配的所有行。

4

5 回答 5

7

不,他们没有。事实上,外键最常见的用途之一是一对多的关系,例如客户订单之间的关系。

于 2013-02-27T13:53:24.163 回答
4

不,表中的外键在所述表中不必是唯一的。

但是,因为它是另一个表的主键,所以它在这个表中必须是唯一的。

于 2013-02-27T14:06:57.803 回答
3

不。

但值必须首先存在于父表中,然后才能将其插入表中。

于 2013-02-27T13:52:34.307 回答
3

不,外键不必是唯一的。事实上,缺乏唯一性是一对多或多对多关系的必要条件。

于 2013-02-27T13:53:12.197 回答
0

外键必须引用被引用表中的一组唯一属性。因此,您的外键:userprofileIconId不需要是唯一的,但它们引用的内容可以。

考虑以下架构:

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  ... omitted ...
);

CREATE TABLE icons (
  id INTEGER PRIMARY KEY,
  ... omitted ...
);

CREATE TABLE user_icons (
  user INTEGER REFERENCES users,
  profileIconId INTEGER REFERENCES icons
);

userandprofileIconId值不需要在表中是唯一的,user_iconsidusersand中icons必须是唯一的(或者在技术上是候选)。

请注意,在这种情况下,引用的列必须是唯一的才有资格作为主键。

这将是一种可接受的方式来实现创建满足用户具有零个或多个图标关系的表的目标。

于 2021-09-11T00:49:58.433 回答