我有一张桌子tree
:
+------+-------+
| id | name |
+------+-------+
| 0 | tree1 |
| 1 | tree2 |
| 2 | tree3 |
| 3 | tree4 |
+------+-------+
一张桌子pen
:
+------+------+
| id | name |
+------+------+
| 0 | pen1 |
| 1 | pen2 |
| 2 | pen3 |
| 3 | pen4 |
+------+------+
第三个表task
将任务“附加”到树或笔:
+------+------+-------+
| type | id | name |
+------+------+-------+
| 0 | 1 | foo |
| 0 | 2 | bar |
| 1 | 1 | fee |
| 1 | 2 | beer |
+------+------+-------+
当type
为 0 时,表示id
引用 a tree
。当type
为 1 时,它引用 a pen
(以此类推许多不同的表)。
我怎样才能做到这一点并确保参照完整性?
创建一个表任务,为每个被引用的表添加一个引用 id 字段,以这种方式:
部分测试数据:
我会为任务树建议一个桥接表,为任务笔建议另一个桥接表。
dbfiddle在这里
更新
如果根据评论,您更喜欢使用具有两个字段 tree_id 和 pen_id 的单个任务表,则可以通过这种方式设置参照完整性:
我添加了一个检查约束,确保 tree_id、pen_id 之一为空:
dbfiddle在这里