我需要为某个地方设计一个数据库。我有以下实体: '食物' -> foodId, foodName '消费者'-> c_Id,c早餐,c午餐,c晚餐 消费者吃三遍。早餐、午餐和晚餐,这些字段从带有 ID 的“食物”实体中获取食物。 但最终我还是掉进了陷阱。我无法把三餐分开做早餐、午餐和晚餐。 什么设计更适合这个问题?
最佳答案
以下架构可让您跟踪谁吃了什么以及在哪顿饭上吃了什么。在我的示例中,您可以看到鲍勃早餐吃煎蛋卷,午餐吃沙拉,晚餐吃牛排。玛丽错过了早餐,午餐吃了牛排,晚餐吃了沙拉。
consumers
id unsigned int(P)
name varchar(30)
+----+------+
| id | name |
+----+------+
| 1 | Bob |
| 2 | Mary |
| .. | .... |
+----+------+
consumptions
id unsigned int(P)
consumer_id unsigned int(F consumers.id)
mealtime_id unsigned int(F mealtimes.id)
food_id unsigned int(F foods.id)
+----+-------------+-------------+---------+
| id | consumer_id | mealtime_id | food_id |
+----+-------------+-------------+---------+
| 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 2 |
| 3 | 1 | 3 | 3 |
| 4 | 2 | 2 | 3 |
| 5 | 2 | 3 | 2 |
| .. | ........... | ........... | ....... |
+----+-------------+-------------+---------+
foods
id unsigned int(P)
name varchar(20)
+----+--------+
| id | name |
+----+--------+
| 1 | Omelet |
| 2 | Salad |
| 3 | Steak |
| .. | ...... |
+----+--------+
mealtimes
id unsigned int(P)
name varchar(10)
+----+-----------+
| id | name |
+----+-----------+
| 1 | Breakfast |
| 2 | Lunch |
| 3 | Dinner |
| .. | ......... |
+----+-----------+
关于database - 数据库设计中的陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323024/