【发布时间】:2011-06-21 21:32:16
【问题描述】:
我正在考虑为从不实际删除任何内容(设置已删除标志或其他内容)的数据库设计一个关系数据库架构。
1) 通常使用哪些元数据列来适应这种架构?显然可以设置 IsDeleted 的布尔标志。或者也许只是在 Deleted 列中的时间戳效果更好,或者可能两者兼而有之。从长远来看,我不确定哪种方法会给我带来更多问题。
2) 在此类架构中通常如何处理更新?如果您将旧值标记为已删除并插入一个新值,您将遇到 PK 唯一约束问题(例如,如果您有 PK 列 id,那么新行必须与您刚刚标记为无效的行具有相同的 id,或者否则,该 id 的其他表中的所有外键都将变得无用)。
【问题讨论】:
-
如果你有一个表 A 对表 B 有一个外部约束,并且表 B 中的一行被删除了,你想发生什么?我们是否假设 A 中的引用行已被删除? A 应该指向 B 中的新行吗? A行是否应该仍然存在并继续指向已删除的B行?
标签: mysql sql-server oracle postgresql relational-database