在做数据库设计的时候,我经常遇到,删除约束的问题,却一直没有好的解决办法,如下例:三个表:表1(文章类型表):TypeTypeId(PK) |  Name
-------------------
  1       军事新闻
  2       科技新闻
  3       体育新闻
  ..............表2(文章表): Articles
ArticleId(PK) | TypeId(FK) | Title |  Editor |......
----------------------------------------------------
 1               1          aaaa       1
 2               2          bbbb       2
 3               2          cccc       3
 4               3          dddd       2 表三(用户表):Users
UserId(PK) |  UserName |.....
--------------------------------
 1              zhaou
 2              yanglin
 3              masi问题:
1,当删除文章类别时,删除该类别下的文章,我觉得这个可以理解和接受
2,但删除用户时候,删除该用户关联的文章,我就觉得不可以理解,总感觉这样不妥当,当又找不到好的处理方案期待:
有没有高手提出好的解决方案

解决方案 »

  1.   

    为什么要用级联删除,这样失去了灵活性,设计库时除了用定义字段,主键,还有提高性能的索引以外,建议全部用代码控制,我之前所在公司做的erp公司不少库超过100个字段,要是搞几个这样的级联删除,那不是要疯掉
      

  2.   

    可以用两种办法 触发器方式:
    create trigger trg_A
    on A
    for update,delete
    as
    begin
        if exists(select 1 from inserted)
            update B set Name=(select Name from inserted) where Name=(select Name from deleted)
        else
            delete B where Name=(select Name from deleted)
    end
    go级联更新和级联删除方式:
    ALTER TABLE [dbo].[T_USERGROUP] ADD
            CONSTRAINT [FK_T_USERGROUP_T_ACCTTEMPLATE] FOREIGN KEY 
            (
                    [ATNAME]
            ) REFERENCES [dbo].[T_ACCTTEMPLATE] (
                    [ATNAME]
            ) ON UPDATE CASCADE ON DELETE CASCADE