Таблицы корзины покупок - Обратная связь Дизайн базы данных - PullRequest
2 голосов
/ 26 апреля 2011

Я занимаюсь разработкой системы онлайн-покупок.

Вот как работает структура продукта:

Существует несколько категорий.

Каждая категория имеет количество элементов.

Каждый элемент имеет одну или несколько опций

Опция может иметь дополнительные (ие) или дополнительные (не)

следующие таблицы, которые у меня есть:

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, аналогичный приведенному выше.

Редактировать: Забыл добавить таблицу параметров

Редактировать: Обновлен пример некоторых данных.

1 Ответ

5 голосов
/ 26 апреля 2011

Учтите, что элемент может принадлежать нескольким категориям.

enter image description here

Вот что нужно учитывать:

  • Если цена товара изменяется вместе с категорией, столбец ItemPrice переходит в таблицу CategoryItems. Если нет, он попадает в таблицу предметов.
  • Если цена опциона изменяется вместе с товаром, столбец OptionPrice переходит в таблицу ItemOptions. Если нет, он попадает в таблицу параметров.
...