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 字段