Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库设计中的陷阱_Database_Database Design - Fatal编程技术网

Database 数据库设计中的陷阱

Database 数据库设计中的陷阱,database,database-design,Database,Database Design,我需要为某个地方设计一个数据库。我拥有以下实体: “食物”->foodId,foodName “消费者”->c_Id、cBreakfast、cLunch、cDinner 消费者吃了三次。早餐、午餐和晚餐,这些字段使用ID从“食物”实体获取食物。 但最终我会落入陷阱。我不能把它分为早餐、午餐和晚餐三餐做。 什么样的设计更适合这个问题?下面的模式可以让您跟踪谁吃了什么,吃了什么。在我的例子中,你可以看到鲍勃早餐吃煎蛋饼,午餐吃沙拉,晚餐吃牛排。玛丽错过了早餐,午餐吃牛排,晚餐吃沙拉 consumer

我需要为某个地方设计一个数据库。我拥有以下实体: “食物”->foodId,foodName “消费者”->c_Id、cBreakfast、cLunch、cDinner 消费者吃了三次。早餐、午餐和晚餐,这些字段使用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    |
| .. | ......... |
+----+-----------+

在我看来,最好创建另一个包含白天时间的表,如eat_time,带有字段id、名称,并填充“早餐”、“午餐”和“晚餐”,还可以创建一个表,将所有表(如consumer_food_,带有时间和字段id、consumer_id、food_id、eat_time_id)合并在一起