Sql server 如何在SQL Server 2008中创建1对1(或零)关系
我知道如何创建一对一关系唯一的问题是它需要两个表中的行,例如,我有一个表Sql server 如何在SQL Server 2008中创建1对1(或零)关系,sql-server,sql-server-2008,entity-relationship,one-to-one,Sql Server,Sql Server 2008,Entity Relationship,One To One,我知道如何创建一对一关系唯一的问题是它需要两个表中的行,例如,我有一个表 emp_table => key1, key2, name, description emp_address_table => key1, key2, address 系统不会对地址设置强制约束,因此emp可能存在而没有其地址,或者emp可能最多有一个地址,但不超过看起来的地址 1:1(0)关系 请告诉我如何在sql server 2008中实现这一点,因为不能同时插入两行,所以不能有强制子行存在的约束。也就
emp_table => key1, key2, name, description
emp_address_table => key1, key2, address
系统不会对地址设置强制约束,因此emp可能存在而没有其地址,或者emp可能最多有一个地址,但不超过看起来的地址
1:1(0)关系
请告诉我如何在sql server 2008中实现这一点,因为不能同时插入两行,所以不能有强制子行存在的约束。也就是说,无论您是先插入员工,还是先插入员工地址行,此时都会有一个无效的约束 因此,SQL中的所有约束都是“0或更多”,而不是“1或更多”或“正好是1”
通过向
emp\u address
表中的外键列添加UNIQUE
约束,可以强制执行“0或1”约束。这将确保最多可以有一个emp\u地址
行引用给定的员工。不能有强制子行存在的约束,因为不能同时插入这两行。也就是说,无论您是先插入员工,还是先插入员工地址行,此时都会有一个无效的约束
因此,SQL中的所有约束都是“0或更多”,而不是“1或更多”或“正好是1”
通过向emp\u address
表中的外键列添加UNIQUE
约束,可以强制执行“0或1”约束。这将确保最多可以有一行emp\u地址
指向给定员工。试试看
SELECT *
FROM emp_table et
LEFT OUTER JOIN emp_address_table edt ON et.key1 = edt.key1 AND et.key2 = edt.key2
试一试
不能通过使用约束强制在子表中包含行。(因为您首先在父表中插入行,然后才在子表中插入行—这不是一个操作,而是2个操作,即使它很可能是一个事务)
但您可以使用存储过程插入数据,也可以在过程内部进行验证。您不能通过使用约束强制在子表中包含行。(因为您首先在父表中插入行,然后才在子表中插入行—这不是一个操作,而是2个操作,即使它很可能是一个事务)
但您可以使用存储过程插入数据,也可以在过程内部进行验证。使用关联表。无论如何,这是更好的实践,您也可以使用它轻松实现0到N关系,其中:
- 关联表中缺少行表示0:0
- 每个实体的关联表中有一行表示1对1
- 关联表中的多行(每个实体)表示1到多行
key1
key2
name
description
addr_key
address
key1
key2
addr_key
*地址表*
key1
key2
name
description
addr_key
address
key1
key2
addr_key
*emp\u地址表*
key1
key2
name
description
addr_key
address
key1
key2
addr_key
在关联表中,将
key1
和key2
作为外键引用返回到员工表,并将addr\u key
作为外键引用返回到地址表。如果要强制1对1关系,请在关联表上设置key1、key2
唯一约束。否则,保留唯一约束以表示0对多关系。使用关联表。无论如何,这是更好的实践,您也可以使用它轻松实现0到N关系,其中:
- 关联表中缺少行表示0:0
- 每个实体的关联表中有一行表示1对1
- 关联表中的多行(每个实体)表示1到多行
key1
key2
name
description
addr_key
address
key1
key2
addr_key
*地址表*
key1
key2
name
description
addr_key
address
key1
key2
addr_key
*emp\u地址表*
key1
key2
name
description
addr_key
address
key1
key2
addr_key
在关联表中,将
key1
和key2
作为外键引用返回到员工表,并将addr\u key
作为外键引用返回到地址表。如果要强制1对1关系,请在关联表上设置key1、key2
唯一约束。否则,请保留表示0对多关系的唯一约束。我的错我创建了1对1错误,它以任何方式工作感谢大量的回答我的错我创建了1对1错误,它以任何方式工作感谢大量的回答这是我问过的最垃圾问题,我的想法肯定不对这是我问过的最无聊的问题,我的想法肯定不对