使用SQL定义一对多关系

我正在寻找一种方法来建立两个表之间的一对多关系.表格结构在下面解释,但我试图将一切都与问题无关.

表对象有一列名为uuid.

表内容有3列,分别是content,object_uuid和timestamp.

基本思想是在对象中插入一行并从数据库中获取新的uuid.然后使用该uuid存储内容中的每一行以将内容与对象相关联.

现在我正在尝试使用数据库来强制执行:

>内容中的每一行引用对象中的一行(外键应该这样做)
>对象中没有行,内容中至少没有一行

应在提交事务时强制执行这些约束.

普通的触发器可能无法帮助,因为当写入对象表中的一行时,内容中就不会有一行. Postgres确实有所谓的约束触发器,可以推迟到事务结束.可以使用它们,但它们似乎是某种不适合日常使用的内部构造.

想法或解决方案应该是标准SQL(首选)或与Postgres一起使用(版本无关紧要).感谢您的任何意见.

最佳答案 你的主要问题是外键限制以外的问题;没有约束可以引用另一个表.

你最好的选择是对这一点进行非规范化,并在对象上有一列包含引用它的内容计数.您可以创建触发器以使其保持最新.

contents_count INTEGER NOT NULL DEFAULT 0

除非您为可以更新此列的人员提供一些用户安全性,否则这不会是不可破解的.但是如果你用触发器保持最新状态,而你想要避免的只是偶然的腐败,那就足够了.

编辑:根据评论,CHECK约束不可延迟.如果所有内容都被删除,即使打算在同一事务中添加更多内容,此解决方案也会引发错误.

点赞