【发布时间】:2019-03-18 12:13:53
【问题描述】:
在 Postgres 中,我试图将一个独特的属性从父级继承到其子级。父表是一个抽象表,其中没有条目。所有孩子的名字都应该是唯一的。参考下面这个小(愚蠢)的例子:不应该有与香蕉同名的苹果(当然也可以是其他苹果)。
此场景的简约 Postgres 示例:
CREATE TABLE fruit(CONSTRAINT fruit_uniq_name UNIQUE (name))
CREATE TABLE banana(name text, length integer) INHERITS (fruit)
CREATE TABLE apple(name, diameter integer NOT NULL,) INHERITS (fruit)
在阅读了很多关于这个问题的帖子之后。他们都得出的结论是,仅使用 Postgres 的继承是不可能掌握这种情况的,我想知道是否有最佳实践解决方法,例如使用触发器和函数来解决这个问题?
我会为每一个小sn-p代码感到非常高兴,这可以帮助我摆脱这个烦人的陷阱。
【问题讨论】:
-
没有简单的解决方案。使用扳机,卢克。但它可能是一个枚举子表的触发器......
-
我目前看到的一种方式是孩子们是否向他们的爸爸扣动扳机。这听起来比它更残酷。如果父级上的插入在重复名称上失败,则停止拍摄。但我很好奇是否有人提出了更安全的解决方案。
标签: sql postgresql inheritance constraints unique