区分1:M关联Vs 1:SQL中的M组合

时间:2017-07-14 17:14:33

标签: sql-server

在向桌子添加FK时,如何区分1:M关联与1:M组合?

例如,我使用下面的查询语句将现有列Account(在Case表中)更改为引用AccountId的外键(在Account表中)。

他们共享1:M关联关系,其中一个帐户可以有很多案例。如果他们有一个1:M的组合怎么样,这个改变语句怎么样?以下陈述对于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 个答案:

答案 0 :(得分:0)

您的问题需要纠正一些基础知识。

两个实体之间的关联是聚合或组合。

因此,如果你谈论1:M组合与1:M组合之间的区别,你的问题就没有意义。

为了理解关系数据库设计方面的聚合和组合之间的差异,我通常遵循一个拇指规则。

如果你的类型级联删除的FK关系肯定是组合。

OR

另一方面,如果您的外键列为NULL

肯定会聚合

就涉及Table A( A_ID, ..)Table B(B_ID, ..)

的示例而言

如果您需要创建聚合关系,您需要一个映射表说Map_A_B(A_ID,B_ID)或者您将A_ID FK列添加到表B但是使其为NULL

如果需要创建组合关系,则在映射表中保留映射,但如果表A中删除了行或者添加了NOT NULL,则强制执行级联删除以实现表B和映射表中的行的删除表B中的A_ID FK列(与当前情况类似)