【发布时间】: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