数据库关系1:1 vs 1:0..1

bre*_*dog 2 c# sql database sql-server database-design

我正在尝试学习这些关系。正如我在下面显示的那样,它是否正确:

1)通过简单地使父母的身份密钥也成为孩子的身份密钥,我将具有1:0..1关系?

2)要使其为1:1,我要在父表中添加FK,以连接两个Identity列?

这就是全部吗?如果我的措辞不正确/不正确,请纠正我。

1:0..1
Run Code Online (Sandbox Code Playgroud)

客户(编号{PK,身份},名称)

客户地址(客户编号{PK,FK,身份},街道名称)

FK_CustomerAddress_Customer(CustomerId,Id)

1:1
Run Code Online (Sandbox Code Playgroud)

客户(编号{PK,FK,身份},名称)

FK_Customer_CustomerAddress(编号,客户编号)

客户地址(客户编号{PK,FK,身份},街道名称)

FK_CustomerAddress_Costumer(CustomerId,Id)


编辑1:

我相信以上两个都是错误的,解决方案是这样的:(?)

1:0..1
Run Code Online (Sandbox Code Playgroud)

客户(编号{PK,身份},名称)

CustomerAddress(CustomerId {PK,FK,UNIQUE},StreetName)

FK_CustomerAddress_Customer(CustomerId,Id)

nvo*_*gel 5

两个表之间的1:1关系意味着每个表中的每个元组都映射到另一个表中的一个元组。这在形式上更称为Bijection。对于SQL的限制是,在大多数实际情况下,实际上不可能在SQL数据库中实现双射。那是因为SQL要求每个表都要单独更新,因此除非临时禁用其中一个约束,否则无法更新两个这样的表。

1:0/1关系也称为“超越”(您的第一个示例)。假设是不允许使用null的SQL样式“ FOREIGN KEY”约束的标准行为。在关系的一侧,约束始终是可选的。

注意:IDENTITY属性与您的示例无关。定义关系的是键约束和外键约束。