提问者:小点点

mySQL中子表的约束


我有这样的情况:

MANAGER (ManagerID, Salary, .... , email)

PROJECT (ProjectID, ..., Date) 

由于项目经理之间存在关系m:n,我将有第三个表:

Manager_has_Project( ManagerID, ProjectID ) 

其中(ManagerID,ProjectID)是Manager_has_Project的复合主键

让我们假设我们必须删除一个从我们的数据库中创建了一些项目的经理:SQL不会让我们这么做。我们可以在子表“on DELETE cascade”中添加对fk ManagerID的约束,但在这种情况下,我们将丢失有关(例如)有多少经理为一个项目工作的信息。另一种选择是“on DELETE SET null”,但是,由于ManagerID是Manager_has_Project的复合主键的一部分,我们不能将一个主键设置为null。

建议怎么做?


共1个答案

匿名用户

如果要保留信息,请使用软删除,而不是实际删除行。

也就是说,添加一列,例如is_deleteddelettion_datetime,该列指示管理器已被删除。然后你就可以保留所有的信息,甚至是关于“被删除”的经理的信息。

您可以使用视图,这样“普通”查询将只返回未删除的经理。