我们可以在MariaDB中提供类似的内容吗?
ALTER TABLE `files` ADD
CONSTRAINT `fk_persons_cover`
FOREIGN KEY (`foreign_key`, `model`)
REFERENCES `persons` (`uuid`, "persons_cover")
ON DELETE NO ACTION
ON UPDATE NO ACTION;
当files.uuid=persons.uuid
和files.model="persons_cover"
时,我需要从文件到人员表引用
现在用这个代码MariaDB说:
# 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"persons_cover")
ON DELETE NO ACTION
ON UPDATE NO ACTION' at line 4
有没有解决的办法?
编辑:
我知道可以使用filelable
超/接口表像this solution
或者在文件表中使用一些自动生成的字段,如this solution
但我认为它们不是好解决办法。
在第一个解决方案中,我们找不到文件1(行1)与什么关联?或者找不到人员1(pk = 1的人员行)文件的列表
在第二个解决方案中,我们应该为每个新关联添加可为空的外键字段!
2条答案
按热度按时间fkvaft9z1#
如果PERSONS表有一个包含uuid和persons_cover(例如)的复合主键(或唯一键),则该方法应该有效
如果在PERSONS表格中,只有UUID数据栏是主索引键数据栏,复合外部索引键可能无法运作。不过,在此情况下,您可以新增复合UNIQUE索引键至PERSONS表格(uuid和person_cover)。如果储存在表格中的值允许,您可以新增复合外部索引键至FILES。
小提琴。
tjrkku2a2#
不行,不能在此行中输入字符串文字。只能指定persons表中存在的列名。通常,这些列名是该表的主键列。
外键约束适用于表的 * 所有 * 行。没有只适用于某些行的条件外键。
我知道你认为你链接到的变通方案不是好的解决方案,但这应该是一个线索,多态关联不是一个好的设计。
我在numerous of my answers on Stack Overflow和我的书SQL Antipatterns, Volume 1: Avoiding the Pitfalls of Database Programming的一章中写了更多关于多态关联的缺点。