在向桌子添加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]
答案 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列(与当前情况类似)