Я хочу создать веб-сайт, который позволяет клиенту заказать еду с веб-сайта.
Есть два типа продуктов питания:
Если они выбирают пиццу из списка - им, возможно, понадобится выбрать базу (тонкая корочка, корочка дефота), дополнения и опция пиццы / вариант.
Как разработать таблицы в этой ситуации?
Примечание : Каждый элемент имеет 1 или более параметров. Вариант может иметь дополнительные (1 или более) или без дополнительных. Если товар является типом пиццы - тогда он может иметь базу (корочку)
см. Два скриншота, которые я пытаюсь реализовать, я на правильном пути к дизайну базы данных или что могло бы сделать лучше?
на дополнениях, когда-нибудь мне нужно добавить несколько дополнений для раскрывающегося списка вместо поблечний. Это означает, что клиент может выбрать только 1 из 1 , 2 или 3 выпадающих.
Как бы вы настроили свою базу данных Modell для реализации чего-то вроде вышеуказанных параметров настройки? Вот что я придумал:
Категории Таблица:
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| cat_id | int(11) | NO | PRI | NULL | auto_increment |
| cat_name | varchar(100) | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
Таблица предметов:
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| item_id | int(11) | NO | PRI | NULL | auto_increment |
| cat_id | int(11) | NO | | NULL | |
| item_name | varchar(100) | NO | | NULL | |
| item_type | int(11) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
- item_type (0 = нормальный, 1 = pizza, 2 = установить еду)
Item_options Table:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| option_id | int(11) | NO | PRI | NULL | auto_increment |
| item_id | int(11) | NO | | NULL | |
| option_name | varchar(100) | NO | | NULL | |
| price | decimal(6,2) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
Item_extras Таблица: (Как вы думаете, должны иметь отдельные столы для Pizza Toppin и дополнений?)
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| extra_id | int(11) | NO | PRI | NULL | auto_increment |
| option_id | int(11) | NO | | NULL | |
| name | varchar(50) | NO | | NULL | |
| cost | decimal(6,2) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
Item_Pizza_Base Table:
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| base_id | int(11) | NO | PRI | NULL | auto_increment |
| option_id | int(11) | NO | | NULL | |
| base_name | varchar(50) | NO | | NULL | |
| cost | decimal(6,2) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
Результат SQL:
mysql> select * from categories;
+--------+----------+
| cat_id | cat_name |
+--------+----------+
| 1 | Pizzas |
| 2 | Burgers |
mysql> select * from items;
+---------+--------+------------------+-----------+
| item_id | cat_id | item_name | item_type |
+---------+--------+------------------+-----------+
| 1 | 1 | Vegetarian Pizza | 1 |
| 2 | 2 | Beef Burger | 0 |
mysql> select * from item_options;
+-----------+---------+-------------+-------+
| option_id | item_id | option_name | price |
+-----------+---------+-------------+-------+
| 1 | 1 | 12 Inches | 5.60 |
| 2 | 1 | 14 Inches | 7.20 |
| 3 | 2 | 1/4lb | 1.80 |
| 4 | 2 | 1/2lb | 2.50 |
mysql> select * from item_extras;
+----------+-----------+-----------+------+
| extra_id | option_id | name | cost |
+----------+-----------+-----------+------+
| 1 | 1 | Mushroom | 1.00 |
| 2 | 1 | Pepperoni | 1.00 |
| 3 | 2 | Mushroom | 1.00 |
| 4 | 2 | Pepperoni | 1.00 |
| 5 | 3 | Chips | 0.50 |
| 6 | 4 | Chips | 0.50 |
Как вы можете видеть дополнения от гамбургера и пиццы в 1 таблице .. Должен ли он быть отделен?
mysql> select * from item_pizza_base;
+---------+-----------+------------+------+
| base_id | option_id | base_name | cost |
+---------+-----------+------------+------+
| 1 | 1 | Thin Crust | 0.00 |
| 2 | 1 | Deep Crust | 0.00 |
| 3 | 2 | Thin Crust | 0.00 |
| 4 | 2 | Deep Crust | 0.00 |
+---------+-----------+------------+------+
Имейте в виду, что цены на каждый предмет не всегда одинаковы. Например: Pizza Size 10 «будет стоить 1,00 для каждого дополнительного, но 0,50 на 12 дюймов пиццы. Также будет случай для каждой пиццы будет иметь разные затраты на дополнения.
Является ли дизайн базы данных или что может быть улучшено?