在SQL中区分1:M关联和1:M组合的方法

3
我如何区分在我的表中添加外键时1:M关联和1:M组合?例如,我使用以下查询语句将现有列“Account”(在“Case”表中)更改为引用“Account”表中的“AccountId”的外键。它们共享1:M关联关系,其中一个帐户可以有多个案例。如果它们具有1:M组合,这个更改语句会是什么样子?下面的语句对于1:M关联是否正确?请注意保留HTML标记。
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关联”有何区别? - Tab Alleman
1个回答

3
你的问题中有一些基础概念需要更正。
两个实体之间的关联可以是聚合或组合。
因此,如果你谈论1:M组合与1:M关联的区别,那么你的问题是没有意义的。
要理解关系数据库设计中聚合和组合的区别,我通常遵循一个原则。
如果你的外键关系是级联删除类型,那么它肯定是组合关系。
或者换一种说法,如果你的外键列为空,则它肯定是聚合关系。
在涉及“表A(A_ID,..)”和“表B(B_ID,..)”的示例中:
如果你需要创建聚合关系,你需要一个映射表,比如“Map_A_B(A_ID,B_ID)”,或者你在Table B中添加一个A_ID FK列,但使其可空。
如果你需要创建组合关系,你将映射保留在映射表中,但强制执行级联删除以实现在Table A中删除行时删除Table B和映射表中的行,或者在Table B中添加一个NOT NULL A_ID FK列(就像在当前情况下一样)。

2
非常感谢。您的解释使概念非常清晰。我将实现它并看看它如何工作! - oxsha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接