【问题标题】:one to many relationships and delete cascades一对多关系和删除级联
【发布时间】:2015-09-10 21:40:30
【问题描述】:

我使用的是 Microsoft SQL Server 2012。

我有三张桌子,A、M、Z。

表 A 与表 M 是一对多的关系。它在外键上也有一个删除级联

表 Z 是一个新表,它也应该与表 M 有一对多的关系,同样应该在外键上有一个删除级联。

我认为我的设计有缺陷?因为如果我从表 A 中删除一条记录,表 M 中的相应记录将被删除,但我猜这会破坏表 M 和 Z 之间的关系?对吗?

【问题讨论】:

    标签: sql sql-server sql-server-2012 foreign-keys


    【解决方案1】:

    如果两个约束都定义为on delete cascade,则关系不会中断 - 删除将级联。当你从A删除时,M对应的所有记录都将被删除,M中的每一条记录,Z中的所有记录都会被删除。

    编辑:
    根据cmets中的对话,我误解了这个问题。 正确的情况是A 是父表,而MZ 都是独立的子表。 在这种情况下,从A 中删除将同时从MZ 中删除,从而级联相关约束。删除 tom MZ 不会影响其他表。

    【讨论】:

    • 哦,这很方便!我认为您直接从表 M 中删除数据,表 A 或 Z 都没有发生任何事情?
    • @mHelpMe 如果您从M 删除,它将级联到Z,但不会影响A
    • 我不明白为什么要从 M 级联删除到 Z?在我看来,A 与 M 有 1 对多,Z 与 M 有 1 对多。所以我希望如果您从表 M 中删除数据,那么 Z 或 A 都没有发生任何事情,或者不仅仅是其中一个表都发生了?
    • @mHelpMe 你的关系是a->[1:n]->m->[1:n]->z。在此设计中,AM 的父级,而后者又是 Z 的父级。因此,从M 删除将级联到Z,但不会级联到A
    • @mHelpMe 在那种情况下,我误解了这种情况。正如您所建议的,只有从 A 删除才会级联约束 - 请参阅我的澄清编辑。
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 2011-03-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2017-06-02
    • 2013-08-21
    相关资源
    最近更新 更多