2012-05-14 214 views
0

我知道如何创建一对一的关系问题是它需要两个表中的行例如我有一个表如何在SQL Server 2008中创建1对1(或0)关系

emp_table => key1, key2, name, description 
emp_address_table => key1, key2, address 

系统不把强制性的约束上地址,以便在EMP可能存在,而无需他/她的地址,或者看起来是

1 EMP可以有最大的一个地址没有更多的是:1(0)的关系

请让我知道我该怎么做,在SQL Server 2008中

+0

我的错误,我错误地创建1对1,它以任何方式感谢很多答案 –

回答

2

你不能有强制子行的存在,因为你不能插入两个约束行在同一时间。即无论您是先插入员工还是员工地址行,此时您都会遇到无效限制。

因此,SQL中的所有约束条件都是'0或更多',从不'1或更多'或'完全1'。

您可以通过将UNIQUE约束添加到emp_address表中的外键列来强制执行“0或1”约束。这将确保最多可以有一个emp_address表示给定员工的行。

+0

这是我问过的最倾销问题,我当然没有想好 –

0

尝试

SELECT * 
FROM emp_table et 
LEFT OUTER JOIN emp_address_table edt ON et.key1 = edt.key1 AND et.key2 = edt.key2 
0

您不能强制使用限制其在子表行。 (因为你首先在父表中插入行,然后在子表中插入行 - 它不是一个操作,而是2,尽管它最可能是一个事务)

但是你可以使用存储过程来插入数据,你可以在里面进行验证程序。

1

使用关联表。这是更好的做法,无论如何,你可以使用它也实现0到N的关系很容易,其中:在关联表

  • 缺席行表示0:0
  • 在每个实体的关联表中的一行的存在表示在关联表的倍数行的1至1
  • 存在(每实体)表示1〜许多

* EMP_TABLE *

key1 
key2 
name 
description 

* address_table *

addr_key 
address 

* emp_address_table *

key1 
key2 
addr_key 

在您的关联表,使key1key2的外键引用回到你的员工表,addr_key将外键引用返回到地址表。如果您想执行1对1关系,请在关联表上为key1, key2设置唯一的约束。否则,保留唯一约束来表示0到多个关系。