有没有办法在数据库中创建一个从0到1的关系?例如,我有一个经理表和一个艺术家表。一个经理只能管理一个艺术家,而一个艺术家也只能有一个经理。但是,一个经理可能没有艺术家(即正在寻找要管理的艺术家),而一个艺术家可能没有经理。是否有任何方法可以实现这一点?在任一表中创建外键只会创建一个一对多的关系。
这很简单。
你有一个可能不存在的1:1关系。
因此,你有一个可空的唯一外键
,因此可以指定为空。
类似以下内容:
CREATE TABLE manager (
id int primary key,
....
);
CREATE TABLE artist (
id int primary key,
manager_id int unique references manager(id)
...
);
现在,艺术家不能有超过一个经纪人,经纪人也不能代理超过一个艺术家。此外,艺术家不得拥有经纪人。
我认为,应该有一个单独的表格
来管理关系。它将包含两个表格的键,但会有一个限制来防止重复的组合键。
这样,您无需为没有艺术家的经理或没有任何经理的艺术家插入键(避免空条目)。
我会在经纪人表上放置一个指向他们管理的艺术家的外键字段,允许为空。
然后您可以使用它来查找他们正在管理的艺术家,并查找特定艺术家的经理。
一对一; 一对多; 多对多
虽然不存在一对零的关系,但在实际工作中可能会遇到一对零的情况,即某些数据存在一对零的关系,但不能像一对一、一对多或多对多关系那样明确定义一对零的关系。
唯一
约束将不允许第二个NULL
。 - BretUNIQUE
约束在检查唯一性时必须忽略NULL
值。大多数 RDBMS 都正确实现了这一点:Oracle / PostgreSQL / MySQL / MariaDB。但是 SQL Server 没有,不过可以通过在约束条件上添加WHERE column IS NOT NULL
子句来获得相同的行为。 - Maxime Rossini