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 列添加到MANAGERMANAGER_HAS_PROJECT。该列将告诉您关系的有效性。您很少删除数据库中的数据,因为“非活动数据”对于审计、报告等很有用。通常您还会在为了得到的所有细节改变了whatwhen 【参考方案1】:

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

也就是说,添加一个列,例如is_deleteddeletion_datetime,表示Manager 已被删除。然后,您可以保留所有信息,甚至是关于“已删除”经理的信息。

您可以使用视图,因此“正常”查询只会返回未被删除的经理。

【讨论】:

以上是关于mySQL 中子表的约束的主要内容,如果未能解决你的问题,请参考以下文章

4.mysql表的约束

4.mysql表的约束

4.mysql表的约束

MySQL表的约束

MySQL表的约束

MySQL表的约束