Sql 零或一对零或一关系

Sql 零或一对零或一关系,sql,sql-server,Sql,Sql Server,有没有办法在数据库中创建0或1到0或1的关系 例如,假设我有一张经理表和一张艺术家表。经理只能管理一名艺术家,而艺术家只能有一名经理。 但是,管理者可能没有艺术家(即寻找艺术家进行管理),而艺术家可能没有管理者 有没有办法做到这一点?在任一表中创建外键只会创建一个1对多关系。这相当简单 您的关系可能不存在1:1 因此,您有一个唯一外键,它是可为空的,因此可以指定为不指向任何内容 比如: CREATE TABLE manager ( id int primary key, ....

有没有办法在数据库中创建
0或1
0或1
的关系

例如,假设我有一张经理表和一张艺术家表。经理只能管理一名艺术家,而艺术家只能有一名经理。 但是,管理者可能没有艺术家(即寻找艺术家进行管理),而艺术家可能没有管理者

有没有办法做到这一点?在任一表中创建外键只会创建一个
1对多关系。

这相当简单

您的关系可能不存在1:1

因此,您有一个
唯一
外键
,它是
可为空的
,因此可以指定为不指向任何内容

比如:

CREATE TABLE manager (
    id int primary key,
    ....
);

CREATE TABLE artist (
     id int primary key,
     manager_id int unique references manager(id)
     ...
);

现在,艺术家不能有多个经理,经理也不能有多个艺术家。艺术家可能没有管理者。

我会在管理者表上放置一个外键字段,指向他们正在管理的艺术家,允许为空


然后,您可以使用它找到他们正在管理的艺术家,并找到特定艺术家的经理。

正如我所想,应该有
单独的表来管理关系。它将包含两个表的键,但会有一个约束来防止重复的复合键


通过这种方式,您不需要为没有艺术家的经理或没有任何经理的艺术家插入键(避免空条目)

在RDBMS中,您可以得到表之间的三种关系

一对一; 一对多; 多对多


没有什么像一对零的关系,但在工作时可能会得到一对零的关系,也就是说,在发生1-0关系的情况下可能存在一些数据,但无法明确定义1-0关系,如一对一、一对多或多对多关系

您甚至不能像
一对一
一对多
那样定义这种关系。它们实际上是概念,有不同的方法来解决它们。是的,我的意思也是(Y)我相信您需要两个唯一的约束,关系表中的两个字段各一个。在大多数RDBMS中,这只允许您创建一个非托管艺术家。
unique
约束将不允许第二个
NULL
@Bret:SQL标准规范确实规定在检查唯一性时
unique
约束必须忽略
NULL
值。大多数RDBMS都正确地实现了它:Oracle/PostgreSQL/MySQL/MariaDB。SQL server没有,但是可以通过在约束上添加
WHERE column IS not NULL
子句来获得相同的行为。