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