Sql中的关系

时间:2009-08-07 16:22:57

标签: sql sql-server database-design

我知道如何在SQL Server中创建一对多,多对多的关系,但是可以创建一对一的关系吗?是否可以创建1到0或1的关系?

5 个答案:

答案 0 :(得分:3)

是的,只需将两个实体的PRIMARY KEY放入链接表中,在两个实体上定义UNIQUE键:

myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))

因此,如果entityA = 1entityB = 2相关:

entityA  entityB
      1        2

,您既不能将entityA = 1与任何其他entityB相关联,也不能将entityB = 2与任何其他entityA相关联。

如果您的关系是对称(即entityAentityB属于同一个域,并且将entityAentityB相关联也意味着相关{{ 1}}到entityB),然后定义一个额外的entityA constrant:

CHECK

并使用此查询将规范化关系转换为规范关系:

entityA  entityB

UNIQUE(entityA)
UNIQUE(entityB)
CHECK(entityA < entityB)

这是SELECT entityA, entityB FROM myrel UNION SELECT entityB, entityA FROM myrel 关系。

如果您希望它是(0-1):(0-1)关系,请将此表定义为1:1entityA的域名:

entityB

从两个表的定义中删除myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB)) A(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityA)) B(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityB)) ,您可以将关系的相应部分从FOREIGN KEY更改为1

答案 1 :(得分:1)

两种方式: 1)pk-pk 1:1的关系。表A和B都具有PK。从B PK到A的PK创建一个FK。这使'B'成为1:1关系的FK方

2)FK / UC-PK 1:1关系。表A有一个PK,表B有一个A的外键,但B中的FK不在B的PK上。现在在B的FK字段上创建一个UC。

答案 2 :(得分:0)

是的,只需将从属表中的主键或备用键作为父表中主键的外键即可。

答案 3 :(得分:0)

表A id PK

表B id PK FK TableA

答案 4 :(得分:0)

这很有趣但是我最喜欢的面试问题。

所以你有表A,B对应每个表都有主键A_ID,B_ID。将外键添加到任何。设B:A_REF,所以你只需要在A_REF上添加唯一约束。