对于这样的桌子:
书
| id | type
+----+--------
| 1 | audio
| 2 | paper
PK id SEQUENCEAudioBook
| book_id | type
+---------+-----------
| 1 | audio
FK book_id references Book
FK constraint book_id + type references BookPaperBook
| book_id | type
+---------+--------
| 2 | paper
FK book_id references Book
FK constraint book_id + type references Book是否有其他方法可以确保PaperBook和AudioBook在没有type列的情况下不会有相同的book_id (删除FK constraint book_id + type references Book并在childs上键入?)
在没有fk约束的情况下,AudioBook和PaperBook可以同时拥有book_id=1:
书
| id | type
+----+--------
| 1 | audio
| 2 | paper
PK id SEQUENCEAudioBook
| book_id
+---------
| 1
FK book_id references BookPaperBook
| book_id
+---------
| 2
FK book_id references Book发布于 2021-12-01 16:20:07
方法一:外键约束确保父表和子表之间的数据完整性。外键约束阻止子表输入父表中找不到的键的值。
如果没有类型,您将希望使用guid来保持键在外部约束上的唯一性。我不喜欢鬼,因为你失去了可再生能力。
方法二:一般来说,外键id是父表中引用的唯一数字。如果要在多个表和一个父id之间共享,请考虑创建一个多到多个表,以便使用键id和type连接这些表,这是一个用于查找的交叉引用表。
可以使用触发器从交叉引用表中填充和删除项。
https://stackoverflow.com/questions/70187485
复制相似问题