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_typcategories 中? 您不需要 info_typ_ 中的类别。 这实际上是一种替代表设计的解决方法。在外键中引用复合类型的元素是不可能的 AFAIC。

以上是关于PostgreSQL中复合类型列子列的外键约束的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jOOQ 更新 PostgreSQL 上复合列的单个子字段?

使用复合主键在联结表上设置外键约束

如何在 Sequelize 中使用外键和常规键创建复合唯一约束?

如何修复“MySQL 错误:1822。缺少约束索引”关于创建复合外键

Postgresql多个表具有相同的外键唯一约束

外键可以引用具有复合(即两列的组合)键的表吗?