我是 PostgreSql 的新手,正在研究一个用于学习目的的示例数据库。我有一个面包店数据库和一个食谱表和一个配料表。我试图了解连接两个表的模式,以便配方表有一个引用成分表的成分列表,但我不确定我是否需要第三个表,或者我是否可以只使用这两个表.
CREATE TABLE ingredients
(
ing_id SERIAL PRIMARY KEY,
name varchar(255) NOT NULL,
quantity integer NOT NULL
);
CREATE TABLE recipes
(
rec_id SERIAL PRIMARY KEY,
name varchar(120) NOT NULL,
list_of_ingredients text NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)
编辑:所以假设我在成分表中有这个:
(1, flour, 40)
(2, eggs, 12)
(3, sugar, 23)
Run Code Online (Sandbox Code Playgroud)
这在食谱表中:
(1, cake, "3 flour, 4 eggs, 2 sugar")
Run Code Online (Sandbox Code Playgroud)
我对如何链接这两个表有点困惑。
list_of_ingredients 需要引用成分表作为外键。我知道 NoSQL DB 的全部意义在于允许列表,所以我不确定我是否完全错误地处理了这个问题。
我还将编写一个 Make_Recipe 函数,该函数将接收一个配方并确保有足够的成分,如果通过上述条件,则继续并减少成分数量。
我已经通读了这些帖子,但它们不太符合要求: 用于存储食物食谱的 数据库设计食谱/成分/测量/数量的数据库架构
谢谢你的时间!任何帮助深表感谢。
食谱和成分之间的关系是所谓的多对多关系——一个食谱可能包含任意数量的成分,而一个成分可能被任意数量的食谱使用。
在关系型数据库(而PostgreSql是关系型数据库)中,创建多对多关系的方式是引入桥表。
在食谱和配料的情况下,您将拥有三张桌子。
一张成分表,指定成分的名称(可能还有其他与成分相关的数据,如果您能想到此类数据)。另一个菜谱表,指定菜谱名称、描述、文本解释等,以及菜的大小。然后你有桥表,成分到食谱,它将包含一个到配方表的一对多外键,一个到成分表的一对多外键,以及该特定配方中该特定成分所需的数量.
还记得食谱表中菜的大小吗?当按比例放大或缩小菜肴的大小时,需要计算成分数量的放大或缩小。
因此,这些表的 DDL 可能如下所示:
CREATE TABLE ingredients
(
ing_id SERIAL PRIMARY KEY,
name varchar(255) NOT NULL
);
CREATE TABLE recipes
(
rec_id SERIAL PRIMARY KEY,
name varchar(120) NOT NULL,
description text NOT NULL,
DishSize integer NOT NULL
);
CREATE TABLE ingredientsToRecipes
(
rec_Id integer REFERENCES recipes (rec_id),
ing_id integer REFERENCES ingredients (ing_id),
quantity integer NOT NULL,
quantity_unit varchar(100) NOT NULL,
PRIMARY KEY(rec_Id, ing_id)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |