Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQL Server 2008中创建1对1(或零)关系_Sql Server_Sql Server 2008_Entity Relationship_One To One - Fatal编程技术网

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错误,它以任何方式工作感谢大量的回答这是我问过的最垃圾问题,我的想法肯定不对这是我问过的最无聊的问题,我的想法肯定不对