在将 FK 添加到我的表格时,如何区分 1:M 关联和 1:M 合成?
例如,我使用下面的查询语句将现有列 Account
(在 Case
表中)更改为引用 AccountId
的外键>(在 Account
表中)。
它们共享 1:M 关联关系,其中一个帐户可以有多个案例。如果他们有一个 1:M 组合,这个 alter 语句会是什么样子?以下陈述对于 1:M 关联是否正确?
Alter table [dbo].[Case] with check add constraint [FK_Case_Account] foreign key ([Account])
references [dbo].[Account] ([AccountId])
GO
Alter table [dbo].[Case] check constraint [FK_Case_Account]
最佳答案
您的问题中有一些基础知识需要更正。
两个实体之间的关联要么是聚合,要么是组合。
因此,如果您谈论 1:M 组合与 1:M 关联之间的区别,您的问题就没有意义。
为了理解聚合和组合在关系数据库设计方面的区别,我通常遵循一个经验法则。
如果你的级联类型的FK关系被删除,那肯定是复合。
或
换句话说,如果你的外键列是NULL
,那肯定是聚合了
以涉及Table A( A_ID, ..)
和Table B(B_ID, ..)
为例
如果您需要创建聚合关系,您需要一个映射表,例如 Map_A_B(A_ID,B_ID)
,或者您将 A_ID FK 列添加到表 B 但使其可为 NULL
如果需要创建Composition关系,则在映射表中保留映射,但在表A中有删除行或添加NOT NULL的情况下,强制执行级联删除以实现表B和映射表中行的删除表 B 中的 A_ID FK 列(如您当前的情况)
关于sql-server - 区分 1 :M association Vs 1:M composition in SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45108463/