【问题标题】:Constrains on a child table in mySQLmySQL 中子表的约束
【发布时间】: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。

标签: mysql sql database database-design sql-update


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    相关资源
    最近更新 更多