PostgreSQL 外键数组

Posted

技术标签:

【中文标题】PostgreSQL 外键数组【英文标题】:PostgreSQL array of foreign keys 【发布时间】:2021-12-22 04:00:56 【问题描述】:

我正在创建一个食谱应用程序,您可以在其中将配料添加到食谱中。我希望成分表有名称、数量和测量列。然后将其连接到配方表。我的配方表中是否可以有一个带有外键的数组?

如果没有,您还如何解决此类问题?

【问题讨论】:

【参考方案1】:

这是可能的,但这是一个非常糟糕的主意,会让你不开心。

创建一个联结表recipe_ingredient,存储两者之间的关系。

【讨论】:

【参考方案2】:

在数组类型的列上创建外键不是一个好主意。 您应该为成分创建一张表,为食谱创建一张表,为成分和食谱之间的多对多关系创建一张中间表,其中包含食谱中成分的数量:

CREATE TABLE IF NOT EXISTS ingredient (name varchar primary key) ;
CREATE TABLE IF NOT EXISTS recipe(name varchar primary key) ;
CREATE TABLE IF NOT EXISTS recipe_composition 
       ( recipe_name varchar
       , ingredient_name varchar
       , ingredient_quantity double precision
       , ingredient_unit_of_measure varchar
       , PRIMARY KEY (recipe_name, ingredient_name)
       , FOREIGN KEY recipe_name REFERENCES recipe(name) ON UPDATE CASCADE ON DELETE RESTRICT
       , FOREIGN KEY ingredient_name REFERENCES ingredient(name) ON UPDATE CASCADE ON DELETE RESTRICT
       ) ;

【讨论】:

以上是关于PostgreSQL 外键数组的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Django 中使用外键列表创建 PostgreSQL 字段

sql [查找表的外键关联]找到一个表的外键postgresql #PostgreSQL

在 Postgresql 中索引外键

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

PostgreSQL - 如何使用外键聚合数据?

POSTGRESQL外键引用两个不同表的主键