我知道这是一个奇怪的问题,因为我总是被教导使用外键约束。但是,我遇到过一种情况,即在删除引用时必须保留外键引用值用于历史目的。外键总是需要约束吗?
这是一个任务管理系统,任务发生引用包含重复规则的父任务。这个父任务可以被删除,但事件本身必须保持与不存在的父母标识一致。如果找不到父任务,则系统仅返回一个错误 - 例如“父任务不再存在”。父级id不能在级联中设置为null的原因是因为它在事件的其他地方用作识别密钥。
另一个示例:关于从播放列表中删除的YouTube视频怎么样。类似的情况对吗?它在播放列表中被引用,但视频不存在,因此它会在播放列表中返回错误。
难道我根本就没有定义外键,只是简单地将parent_id引用列创建为普通列?我只想确定当遇到一个表引用另一个表的情况时通常如何处理,但前者不受后者存在的约束。
从技术上讲,ON DELETE SET NULL原因将为您处理。如果你的问题是理论上的话,那么:是的,你可以:) – Koshinae