例如:
我们有一个表 'device'
和 id(primary key)
它通过 parent_dev_id(foreign key)
引用它自己。
如果您有一个带有 {id=1,parent_dev_id=NULL}
的设备并且您想向其中添加更多设备,那么下一个设备有 id=2 和 parent_id=1 或设备 id=2,parent_dev_id=NULL
有 2 个设备 id=3,id=4
但它们都有相同的 parent_dev_id=2
。
是否可以拒绝或限制某些id==parent_dev_id 的情况?因为我们不希望那成为可能
如您所见,带有 {id=3,parent_dev_id=NULL}
的设备中还有另外 2 个设备
例如。带有 {id=4,parent_dev_id=3}
和设备 {id=5,parent_dev_id=3}
的设备,它是设备内部的设备。
是否可以限制 {id!=parent_dev_id}
在 {id=3,parent_dev_id=NULL}
的第一行,这样你就不能添加 {parent_dev_id= 3}
。如果我们这样做,tt 将是一个无休止的设备循环,这些设备在没有任何好处的情况下引用自己
最佳答案
您可以在此处执行 2 个解决方案选项:
- 在您的代码中编写
id
和parent_id
不相等的逻辑 - 在插入之前将数据库中的逻辑编写为触发器,以在
parent_id
和id
不能相等的情况下执行相同的操作。
您将遇到的问题是 id
是否是一个生成的 id。那么你要问的情况就很棘手了。在插入时,这可能是异常情况。但是,对于可能是有效问题的更新,您需要为 #2 触发更新 id
和 parent_id
不相等的记录.
关于php - 防止自引用表中的主键和外键重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42371741/