在 SQL Server 2008 中,如何设计 1:1 和 1:m 关系?
在 SQL Server 2008 中,如何设计 1:1 和 1:m 关系?
Create Table ParentTable
(
PrimaryKeyCol ... not null Primary Key
, ...
)
Create Table ChildTable
(
, ForeignKeyCol ... [not] null [Primary Key, Unique]
, ...
, Constraint FK_ChildTable_ParentTable
Foreign Key ( ForeignKeyCol )
References ParentTable( PrimaryKeyCol )
)
在这种情况下,对于给定的ParentTable主键值,我永远不可能拥有超过一个ChildTable中的行。请注意,即使在一对一关系中,其中一个表也是“父”表。在实现上,将一对一关系与一对多关系区分开来的是ChildTable的外键值是否具有唯一或主键约束。Create Table ParentTable
(
PrimaryKeyCol ... not null Primary Key
, ...
)
Create Table ChildTable
(
, ForeignKeyCol ... [not] null
, ...
, Constraint FK_ChildTable_ParentTable
Foreign Key ( PrimaryKeyCol )
References ParentTable( PrimaryKeyCol )
)
在这种情况下,对于给定的ParentTable主键值,我可以在ChildTable中拥有多行。ParentTable
中的每一行都有对应的ChildTable
行。SQL语言缺乏多重赋值运算符,SQL Server不支持表间CHECK
约束或CREATE ASSERTION
。今天是否可以在SQL Server中实现真正的1:1关系,而不必诉诸过程性代码(触发器、存储过程等)? - onedaywhen1:0/1
关系很难实现。它需要一个名为延迟关系的 ANSI SQL 功能,在这个功能中,检查给定的插入/更新是否违反了 FK 关系的操作是在提交时而不是立即进行的。 - Thomas