Мне нужно создать базу данных где-нибудь. У меня есть следующие организации: 'food' -> foodId, foodName 'consumer' -> c_Id, cBreakfast, cLunch, cDinner Потребители едят три раза. завтрак, обед и ужин, в которых эти поля принимают продукты из «пищевого» объекта с его идентификатором. Но в конце концов я попаду в ловушку. Я не могу разделить его на трехразонный завтрак, обед и ужин. Какой дизайн более подходит для этой проблемы?Ловушка в дизайне базы данных
2
A
ответ
2
Следующая схема позволит вам отслеживать, кто ел что и на какой вкус. В моем примере вы можете увидеть, что у Боба был омлет на завтрак, салат на обед и стейк на ужин. Мэри пропустила завтрак, отведала стейк на обед и салат на ужин.
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_with_time, и полей id, consumer_id, food_id, eat_time_id – test1604