mySQL中对子表的约束
我有这样的情况:mySQL中对子表的约束,mysql,sql,database,database-design,sql-update,Mysql,Sql,Database,Database Design,Sql Update,我有这样的情况: MANAGER (ManagerID, Salary, .... , email) PROJECT (ProjectID, ..., Date) 由于经理和项目之间存在关系M:N,因此我将有第三个表: Manager_has_Project( ManagerID, ProjectID ) 其中(ManagerID,projectd)是管理者项目的复合主键 假设我们必须删除一位从数据库中创建了一些项目的经理:SQL不会让我们这样做。我们可以在子表“on DELETE C
MANAGER (ManagerID, Salary, .... , email)
PROJECT (ProjectID, ..., Date)
由于经理和项目之间存在关系M:N,因此我将有第三个表:
Manager_has_Project( ManagerID, ProjectID )
其中(ManagerID,projectd)是管理者项目的复合主键
假设我们必须删除一位从数据库中创建了一些项目的经理:SQL不会让我们这样做。我们可以在子表“on DELETE CASCADE”中添加对fk ManagerID的约束,但在这种情况下,我们将丢失有关(例如)一个项目有多少名经理工作的信息。另一种选择是“ON DELETE SET NULL”,但由于ManagerID是Manager\u has\u Project的复合主键的一部分,因此我们不能将主键设置为NULL
建议怎么做?如果要保留信息,请使用软删除,而不是实际删除行 也就是说,添加一列,例如
已删除
或删除
,表示已删除管理器
。然后,您可以保留所有信息,甚至是关于“已删除”经理的信息
您可以使用视图,以便“正常”查询只返回未删除的管理者。在
管理者
和管理者项目
中添加一个状态
列。该列将告诉您关系的有效性。您很少删除数据库上的数据,因为“非活动数据”对审核、报告等很有用。通常,您还将添加列,如中的VALID\u、中的VALID\u、直到的VALID\u、由创建的、由更新的等,以便获得有关更改内容和时间的所有详细信息。