级联删除,个人认为不太可取,因为有很多的东西,是不允许这样的!而实际开发中也很少的用“级联删除”,没有更好的方式吗?

解决方案 »

  1.   

    这种情况往往是用户不想看到了,但数据库中还必须或有必要保存的数据做假删除就可以的
      

  2.   

    建一个逻辑删除标记,
    可以逻辑删除,也可以物理删除,让用户选
      

  3.   

    CREATE TABLE [学生信息] (
    [学生信息ID] [int] IDENTITY (1, 1) NOT NULL ,
    [学号] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [姓名] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    CONSTRAINT [PK_学生信息] PRIMARY KEY  CLUSTERED 
    (
    [学生信息ID]
    )  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
    CREATE TABLE [学生日常管理] (
    [学生日常管理ID] [int] NOT NULL ,
    [日常记录] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [日常类型ID] [int] NOT NULL ,
    [学生信息ID] [int] NOT NULL ,
    CONSTRAINT [PK_学生日常管理] PRIMARY KEY  CLUSTERED 
    (
    [学生日常管理ID]
    )  ON [PRIMARY] ,
    CONSTRAINT [FK_学生日常管理_学生日常类型] FOREIGN KEY 
    (
    [日常类型ID]
    ) REFERENCES [学生日常类型] (
    [日常类型ID]
    ),
    CONSTRAINT [FK_学生日常管理_学生信息] FOREIGN KEY 
    (
    [学生信息ID]
    ) REFERENCES [学生信息] (
    [学生信息ID]
    )
    ) ON [PRIMARY]
    GO
    CREATE TABLE [学生日常类型] (
    [日常类型ID] [int] NOT NULL ,
    [类型名称] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [违规扣分] [float] NOT NULL ,
    CONSTRAINT [PK_学生日常类型] PRIMARY KEY  CLUSTERED 
    (
    [日常类型ID]
    )  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO对于上面三个表如果要删除“学生日常类型”,而此类型在“学生日常管理”中已经有了外键约束,在这里可以做假删除,但这样如果将来“学生日常管理”和对应的“学生信息”都删除时,在写一个方法,把他们从数据库中去掉吗?
    感觉这样下去,数据库会增加很多本来无用的数据!