mysql - 带有两个表的简单数据库应该是什么样子?

标签 mysql database database-design

我正在创建食谱应用程序以及从数据库获取的所有食谱。我正在使用 phpMyAdmin。

我之前学过一些关于数据库的类(class),所以我知道如何使用它来完成简单的任务。

现在我有两个表 RecipesIngredients 。我有两个简单的问题:

  1. 我应该创建单独的 recipe id或者使用自动分配的那个? 我将在应用程序中搜索食谱并从列表中选择我想要的结果。

  2. 我应该如何连接Ingredients每个表Recipe table 。 我想我应该在 Ingredient 中使用某种相同的 ID(“reciep_id”)和Recipe表格,以便稍后在显示结果时将它们连接起来。

最佳答案

  1. 我认为标准菜谱 ID 是可以接受的变体,因为我无法想象菜谱的自然主键。

  2. 您的每个食谱都包含一些成分。任何成分都可以在多个食谱中使用。因此,您应该使用标准的 n-n 关系与链接表。

您的表格可以是这样的( link to sqlfiddle with this code ):

CREATE TABLE Recipes (
 id int,
 name text,
 PRIMARY KEY (`id`)
);

CREATE TABLE Ingredients(
 id int,
 name text,
 PRIMARY KEY (`id`)
);

CREATE TABLE Recipes2Ingredients (
 rec_id int,
 ing_id int,
 amount int,
 -- and maybe some other needed fields
 FOREIGN KEY (rec_id)
   REFERENCES Recipes(id),
 FOREIGN KEY (ing_id)
   REFERENCES Ingredients(id)
);

关于mysql - 带有两个表的简单数据库应该是什么样子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805658/

相关文章:

C# MySQL 错误 “Column count doesn' t 第 1 行匹配值计数”

sql - MYSQL - 一起使用 AVG() 和 DISTINCT

mysql - 销售/出租电子商务的数据库设计

java - executeUpdate() 只给出返回值 1

php - 哪种方法是提高服务器效率/减少工作负载的最佳方法

Hibernate 映射一对多,奇怪的例子

MySQL分组错误

php - 如何将登录成员(member)下的成员(member)表与玩家表合并?

mysql - PostgreSQL 中 varchar 类型的等价物是什么?

产品的MySQL数据库设计