Как хранить галочки / выпадающие в базе данных? - PullRequest
1 голос
/ 05 сентября 2011

См. Дизайн интерфейса ниже:

enter image description here

Элемент может иметь более 1 группы галочек и / или раскрывающихся списков. Как мне сохранить эти данные в базе данных?

Я придумал этот дизайн базы данных:

items таблица:

+----+--------------+
| id | name         |
+----+--------------+
|  1 | Plain Burger |
+----+--------------+

extra_group таблица:

+----+---------+--------+--------------------+--------------+
| id | item_id | name   | description        | control_type |
+----+---------+--------+--------------------+--------------+
|  1 |       1 | Sauces |                    | checkboxes   |
|  2 |       1 | extras | Choose your extras | dropdown     |
+----+---------+--------+--------------------+--------------+

и, наконец, extras таблица:

+----+----------------+------------------+------+
| id | extra_group_id | value            | cost |
+----+----------------+------------------+------+
|  1 |              1 | with Kitchup     | 0.00 |
|  2 |              1 | with Mayo        | 0.00 |
|  3 |              2 | with Boiled Rice | 0.00 |
|  4 |              2 | with Chips       | 0.00 |
+----+----------------+------------------+------+

Это правильный способ проектирования баз данных или что можно улучшить?

Спасибо

Ответы [ 3 ]

2 голосов
/ 05 сентября 2011

Выглядит хорошо, я был бы склонен добавить таблицу между item и extra_group (и удалить item_id из extra_group)

item_extra_group table:

+---------+----------------+
| item_id | extra_group_id | 
+---------+----------------+
|  1      | 1              | 
|  1      | 2              | 
+---------+----------------+

Это позволит вам моделироватьотношение многие ко многим, так как я предполагаю, что у вас будет много повторяющихся extra_groups, например, (бургер с сыром, бекон бекон), вероятно, будут иметь одинаковые дополнения?

1 голос
/ 05 сентября 2011

Вот что вы должны сделать, чтобы настроить свой дизайн, который сейчас довольно хорош, но может быть немного улучшен:

items таблица:

+----+--------------+ 
| id | name         | 
+----+--------------+ 
|  1 | Plain Burger | 
+----+--------------+ 

extra_group таблица:

+----+---------+--------+--------------------+--------------+ 
| id | item_id | name   | description        | control_type | 
+----+---------+--------+--------------------+--------------+ 
|  1 |       1 | Sauces |                    | checkboxes   | 
|  2 |       1 | extras | Choose your extras | dropdown     | 
+----+---------+--------+--------------------+--------------+ 

A new table options примерно так:

+-----------+------------------+------+ 
| option_id | description      | cost | 
+-----------+------------------+------+ 
|  10       | with Kitchup     | 0.00 | 
|  11       | with Mayo        | 0.00 | 
|  12       | with Boiled Rice | 0.00 | 
|  13       | with Chips       | 0.00 | 
+----+------+------------------+------+ 

A изменено extras таблица:

+----+----------------+-----------+
| id | extra_group_id | option_id |
+----+----------------+-----------+ 
|  1 |              1 |        10 |
|  2 |              1 |        11 |
|  3 |              2 |        12 | 
|  4 |              2 |        13 | 
+----+----------------+-----------+

Этот дизайн выполнен в 3NF и значительно упростит обслуживание ваших данных и позволит избежать проблем, связанных с непоследовательной ценой на дополнительные товары.

1 голос
/ 05 сентября 2011

Этот дизайн просто отлично.Вы использовали третью нормальную форму , которая является общепринятым способом выполнения подобных действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...