2013-03-10 4 views
2

Мне нужно создать базу данных где-нибудь. У меня есть следующие организации: 'food' -> foodId, foodName 'consumer' -> c_Id, cBreakfast, cLunch, cDinner Потребители едят три раза. завтрак, обед и ужин, в которых эти поля принимают продукты из «пищевого» объекта с его идентификатором. Но в конце концов я попаду в ловушку. Я не могу разделить его на трехразонный завтрак, обед и ужин. Какой дизайн более подходит для этой проблемы?Ловушка в дизайне базы данных

+1

На мой взгляд, это будет лучше создать еще одну таблицу с однодневных время как eat_time с полями ID, имя, и заполнить «завтрак», «обед» и «ужин», а также создать таблицу, которая будет объединение всех таблиц, таких как consumer_food_with_time, и полей id, consumer_id, food_id, eat_time_id – test1604

ответ

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 | 
| .. | ......... | 
+----+-----------+