【问题标题】:SQL Composite PK Made up of "foreign keys". Cascade delete or trigger?SQL Composite PK 由“外键”组成。级联删除还是触发?
【发布时间】:2015-10-01 07:54:48
【问题描述】:

我有下表,我希望在删除相应的配方或成分时删除该行。

我应该使用级联删除创建两个外键还是通过触发器删除?如果这有什么不同,我正在使用 Database First EF...

CREATE TABLE [dbo].[RECIPE_STEP] (
    [Amount] FLOAT NOT NULL,
    [RecipeId] INT NOT NULL,
    [Description] NVARCHAR(MAX) NULL,
    [IngredientId] INT NOT NULL,

    CONSTRAINT [PK_RECIPE_INGREDIENT_STEP_ID] PRIMARY KEY CLUSTERED ([RecipeId] ASC, [IngredientId] ASC)
)

非常感谢

【问题讨论】:

  • 在代码中为“子”记录写一个删除,然后这个。不要使用触发器,也不要为此使用删除级联。两者都会带来未来的维护问题。
  • @Amir "在代码中为 "child" 记录写一个删除,然后是 this"。 “然后这个”是什么意思?

标签: sql sql-server entity-framework


【解决方案1】:

您可以使用ON DELETE CASCADE。因为您可以避免使用触发器。您可以尝试在一些复杂的情况下使用触发器。由于您想在删除特定配方时删除该行,我建议ON DELETE CASCADE 就足够了。

MSDN 说:

ON DELETE CASCADE 表示当主表中的一行被 删除后,您希望辅助表中的所有相关行,其中 有一个 FOREIGN KEY 指向主表,自动 删除。在 Orders 和 OrderDetails 示例中,如果您删除 Orders 表中订单 ID 为 10002 的订单,两个订单详细信息 在属于该订单的 OrderDetails 表中将是 自动删除。

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多