我正在寻找一种方法来建立两个表之间的一对多关系.表格结构在下面解释,但我试图将一切都与问题无关.
表对象有一列名为uuid.
表内容有3列,分别是content,object_uuid和timestamp.
基本思想是在对象中插入一行并从数据库中获取新的uuid.然后使用该uuid存储内容中的每一行以将内容与对象相关联.
现在我正在尝试使用数据库来强制执行:
>内容中的每一行引用对象中的一行(外键应该这样做)
>对象中没有行,内容中至少没有一行
应在提交事务时强制执行这些约束.
普通的触发器可能无法帮助,因为当写入对象表中的一行时,内容中就不会有一行. Postgres确实有所谓的约束触发器,可以推迟到事务结束.可以使用它们,但它们似乎是某种不适合日常使用的内部构造.
想法或解决方案应该是标准SQL(首选)或与Postgres一起使用(版本无关紧要).感谢您的任何意见.
最佳答案 你的主要问题是外键限制以外的问题;没有约束可以引用另一个表.
你最好的选择是对这一点进行非规范化,并在对象上有一列包含引用它的内容计数.您可以创建触发器以使其保持最新.
contents_count INTEGER NOT NULL DEFAULT 0
除非您为可以更新此列的人员提供一些用户安全性,否则这不会是不可破解的.但是如果你用触发器保持最新状态,而你想要避免的只是偶然的腐败,那就足够了.
编辑:根据评论,CHECK约束不可延迟.如果所有内容都被删除,即使打算在同一事务中添加更多内容,此解决方案也会引发错误.