我有一个大型数据库,正如预期的那样,有很多外键引用表。从数据库设计的角度来看,我应该如何处理删除由外键引用的记录?
我想到的一个选项是在表中添加一个布尔列,以确定记录是否处于活动状态。因此,如果我要删除一条记录,我只需将其布尔活动值设置为 false。
数据库最终可能会变得臃肿,但不仅所有引用的外键保持不变,数据库还将保存更多信息。
我想听听您对系统关键数据库的看法。
我有一个大型数据库,正如预期的那样,有很多外键引用表。从数据库设计的角度来看,我应该如何处理删除由外键引用的记录?
我想到的一个选项是在表中添加一个布尔列,以确定记录是否处于活动状态。因此,如果我要删除一条记录,我只需将其布尔活动值设置为 false。
数据库最终可能会变得臃肿,但不仅所有引用的外键保持不变,数据库还将保存更多信息。
我想听听您对系统关键数据库的看法。
据我了解您的问题,您有 2 个表:
| main | | child |
|-------| |---------------|
|id|data| (1) ----> (n) |id|main_id (FK)|
当子表中有记录时,您不想从主表中删除数据。
你没有说,你使用什么 RDBMS。但在 MySQL 中,您可以设置外键类型。如果将其设置为 RESTRICT,则系统将不允许您从主表中删除数据,如果子表中有数据。
或者也可以设置为 CASCADE,这样当你删除主表中的数据时,它会自动从子表中删除。
因此无需创建额外的“活动”字段。
您的问题的答案在很大程度上取决于您的申请。
如果您需要“历史”数据,那么使用“启用”标志似乎是正确的选择。但是,如果您的数据库中有敏感数据并且您希望确保删除的数据不太容易恢复,那么“启用”标志是不行的。
其他方面:
我知道,很多问题。但是,我希望这些问题能帮助您找到问题的答案。