mySQL 中子表的约束
Posted
技术标签:
【中文标题】mySQL 中子表的约束【英文标题】:Constrains on a child table in mySQL 【发布时间】:2021-07-06 02:53:51 【问题描述】:我有这种情况:
MANAGER (ManagerID, Salary, .... , email)
PROJECT (ProjectID, ..., Date)
由于经理和项目之间存在关系 M:N,我将有第三张表:
Manager_has_Project( ManagerID, ProjectID )
其中 ( ManagerID, ProjectID ) 是 Manager_has_Project
的复合 PK假设我们必须删除一个从我们的数据库中创建了一些项目的经理:SQL 不会让我们这样做。我们可以在子表“ON DELETE CASCADE”中添加对 fk ManagerID 的约束,但在这种情况下,我们将丢失有关例如有多少经理为一个项目工作的信息。另一种选择是“ON DELETE SET NULL”,但由于 ManagerID 是 Manager_has_Project 的复合 pK 的一部分,我们不能将 PK 设置为 null。
建议做什么?
【问题讨论】:
将STATUS
列添加到MANAGER
和MANAGER_HAS_PROJECT
。该列将告诉您关系的有效性。您很少删除数据库中的数据,因为“非活动数据”对于审计、报告等很有用。通常您还会在为了得到谁的所有细节改变了what和when。
【参考方案1】:
如果您想保留信息,请使用软删除而不是实际删除行。
也就是说,添加一个列,例如is_deleted
或deletion_datetime
,表示Manager
已被删除。然后,您可以保留所有信息,甚至是关于“已删除”经理的信息。
您可以使用视图,因此“正常”查询只会返回未被删除的经理。
【讨论】:
以上是关于mySQL 中子表的约束的主要内容,如果未能解决你的问题,请参考以下文章