PostgreSQL中复合类型列子列的外键约束
Posted
技术标签:
【中文标题】PostgreSQL中复合类型列子列的外键约束【英文标题】:Foreign key constraint on sub-column of composite-type column in PostgreSQL 【发布时间】:2014-02-05 09:18:49 【问题描述】:有没有办法将复合类型列的子列设置为外键?
我试过的是:
Create Type info_typ_ AS (
category integer ,
title text ,
actor text ,
price double precision );
Create Table Products_typobj (
prod_id integer,
info info_typ_,
primary key(prod_id),
Category references Categories(Category)
);
但它不起作用。
【问题讨论】:
【参考方案1】:这对我有用
Create Type info_typ_ AS (
category integer ,
title text ,
actor text ,
price double precision );
Create Table Products_typobj (
prod_id integer,
info info_typ_,
primary key(prod_id)
);
我删除了带有references
的行,因此使用type
有效。
SQL Fiddle DEMO
如果你需要外键,试试下面的代码:
Create Type info_typ_ AS (
category integer ,
title text ,
actor text ,
price double precision );
Create Table Categories (
Category int,
primary key(Category)
);
Create Table Products_typobj (
prod_id integer,
info info_typ_,
Category int references Categories(Category),
primary key(prod_id),
FOREIGN KEY (Category) REFERENCES Categories (Category)
);
SQL Fiddle DEMO
【讨论】:
category
将同时出现在 info_typ
和 categories
中?
您不需要 info_typ_ 中的类别。
这实际上是一种替代表设计的解决方法。在外键中引用复合类型的元素是不可能的 AFAIC。以上是关于PostgreSQL中复合类型列子列的外键约束的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jOOQ 更新 PostgreSQL 上复合列的单个子字段?
如何在 Sequelize 中使用外键和常规键创建复合唯一约束?