sql - PostgreSQL 中的连接表
问题描述
我有两张桌子
recipe table
-----------------------
|recipe_id |name |
-----------------------
|1 |Pasta |
|2 |Pizza |
|3 |Fish |
ingredient table
-------------------------------
|ingredient_id |name |
-------------------------------
|1 |Spaghetti |
|2 |Salmon |
|3 |Tomato sauce|
我创建了一个名为“recipes_ingredients”的连接表
-------------------------------
|id |fk_recipe|fk_ingredient|
-------------------------------
|1 |1 |1 |
|2 |2 |3 |
|3 |3 |2 |
我的第一个问题是:我创建“recipes_ingredients”表的方式是否正确?我需要“id”还是只需要两个外键“fk_recipe”和“fk_ingredient”?
第二个是当我在其他两个表中插入记录时是否可以自动填充联结表。还是我必须手动添加联结表中的每个关联?
解决方案
我的第一个问题是:我创建“recipes_ingredients”表的方式是否正确?我需要“id”还是只需要两个外键“fk_recipe”和“fk_ingredient”?
你的接线表看起来很棒!您在 recipes_ingredients 中的 ID 将自动编号。我会将 fk_recipe 重命名为recipe_id
并将 fk_ingredient 重命名为ingredient_id
,但是保持它的方式也是完全可以的。它是基于偏好的。
第二个是当我在其他两个表中插入记录时是否可以自动填充联结表。还是我必须手动添加联结表中的每个关联?
通常,您会手动输入成分表中没有的成分,输入新的配方名称,最后在联结表中添加条目。
但是,如果您有这样的规则:所有包含单词 Pizza 的食谱都将包含成分 1、2 和 3,那么您可以创建一个具有逻辑的存储过程,以根据您的规则在联结表中添加信息。您无法使用存储过程涵盖所有用例,因此您仍然必须转到联结表并手动添加一些条目。
通常,Web 开发人员创建一个网页,该网页允许使用网页创建食谱然后允许选择(或拖放)成分的这种交互。在后台,网页会更新联结表。
推荐阅读
- c++ - 我可以把虚函数中的这个指针当作派生类的这个指针吗
- angular - 在 Angular 7 中为不同的客户加载不同的索引文件
- android - 航点任务没有暂停
- c# - 当我想为单元格设置值时未处理的异常
- svg - 如何使用 svg 创建多边形?
- delphi - 是否必须在 DeleteFile() 之前检查 FileExists()?
- android - 如何读取 MutableList
到 Parcelable? - android - 检查位图是否被回收无助于解决“RuntimeException:Canvas:尝试使用回收的位图”
- python - 如何在隐藏的输入 Selenium (Python) 上插入值
- robotframework - 引用另一个机器人文件中的关键字