Я занимаюсь разработкой системы онлайн-покупок.
Вот как работает структура продукта:
Существует несколько категорий.
Каждая категория имеет количество элементов.
Каждый элемент имеет одну или несколько опций
Опция может иметь дополнительные (ие) или дополнительные (не)
следующие таблицы, которые у меня есть:
mysql> desc categories;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| cat_id | int(11) | NO | PRI | NULL | auto_increment |
| company_id | int(11) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
Например: 12, 2, "Google"
Таблица элементов:
mysql> desc items;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| item_id | int(11) | NO | PRI | NULL | auto_increment |
| cat_id | int(11) | NO | | NULL | |
| name | varchar(150) | NO | | NULL | |
| description | varchar(150) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
Например: 2, 12, "Item 1", "Desc ... 1"
Например: 3, 12, «Элемент 2», «Описание ... 2»
Таблица параметров
mysql> desc items_options;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| option_id | int(11) | NO | PRI | NULL | auto_increment |
| item_id | int(11) | NO | | NULL | |
| name | varchar(150) | NO | | NULL | |
| price | decimal(6,2) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
Например: 45, 2, «Обычный»,"2,20"
Например: 46, 3, "Маленький", "1,20"
Например: 47, 3, "Большой", "2,20"
Дополнительно Таблица:
mysql> desc items_options_extras;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| extra_id | int(11) | NO | PRI | NULL | auto_increment |
| option_id | int(11) | NO | | NULL | |
| name | varchar(150) | NO | | NULL | |
| price | decimal(6,2) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
Например: 64, 47, "С сумкой", 0,10 "
Это хороший дизайн базы данных? Что можно улучшить?
Я не создалтаблица отношений, это необходимо? Если это так, я не уверен, как мне создать таблицу отношений.
В настоящее время я использую несколько запросов SELECT, чтобы получить отношениямежду этими таблицами, как показано ниже:
<?php
$q = mysql_query("SELECT item_id, name FROM items where cat_id = '3'");
while($row = mysql_fetch_assoc($q)) {
echo $row['name'];
$q2 = mysql_query("SELECT price FROM items_options_extras where item_id =" . $row['item_id']);
while($row2 = mysql_fetch_assoc($q2))
echo $row2['price'];
}
}
?>
Когда я хочу удалить элемент и включая параметры, я использую код php, аналогичный приведенному выше.
Редактировать: Забыл добавить таблицу параметров
Редактировать: Обновлен пример некоторых данных.