sql-server - 区分 1 :M association Vs 1:M composition in SQL

标签 sql-server

在将 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/

相关文章:

sql - 插入/更新/删除记录会自动更新索引吗?

使用临时表的 SQL Server 连接上下文不能在使用 SqlDataAdapter.Fill 调用的存储过程中使用

c# - 如何在不使用 EF 的情况下连接到 ASP.NET Core Web API 中的数据库?

c# - SQL Server数据库响应时间慢的问题

SQL Select 语句查询一个月的考勤情况

sql - 如何获得日期 + 时间的确定性计算值

sql - 根据变量类型在 SQL 中进行条件分支

sql - 库存库存先进先出

sql - 查找没有 "duplicates"的记录

sql-server - SQL Server 查询结果末尾有空格