структура электронной коммерции для продуктов (MySQL) - PullRequest
0 голосов
/ 31 августа 2010

Я рассматриваю, как структурировать мою базу данных MySQL в решении для электронной коммерции. Чтобы быть более конкретным, я смотрю на структуру продукта.

Это таблицы, которые я до сих пор придумал. Что ты думаешь?

Объяснение структуры

Приложение многоязычное. Поэтому таблица продуктов разделена на 2 таблицы.

Если продукт имеет, например, Будет вставлено 2 варианта (маленький, средний), всего 3 строки. Это потому, что каждый вариант может иметь различную информацию для каждого варианта. Когда продукт отображается на веб-странице, продукт 1 будет отображаться с выпадающим списком «Малый и средний». Продукт без вариантов будет естественно вставлять только 1 строку. products id master product_number 1 0 123 2 1 456 3 1 678</p> <p>products_descriptions id product_id country_code image name description vat price 1 1 en-us image.jpg t-shirt Nice t-shirt 25 19.99 2 2 en-us image.jpg t-shirt Nice t-shirt 25 19.99 3 3 en-us image.jpg t-shirt Nice t-shirt 25 19.99</p> <p>products_to_options product_id option_id 2 1 3 2</p> <p>options id name 1 Small 2 Medium

1 Ответ

1 голос
/ 02 сентября 2010

Ваша таблица Продуктов является шизофреничной, ее сущность иногда является Продуктом, а иногда - Вариантом. Это приводит к очень громоздкому поведению. Например, вам нужен вопрос "сколько у нас разных продуктов?" ответьте select count(*) from products, но здесь это дает неправильный ответ, чтобы получить правильный ответ, вы должны знать магическое число 0 и запрос select count (*) from products where master=0. «Перечислите все продукты и сколько у нас вариантов для каждого» - это еще один запрос, который должен быть простым, но сейчас его нет. Существуют и другие аномалии, например, тот факт, что первая строка в products_description - это рубашка с ценой и изображением, но без размера (размер сохраняется в вариантах, но у них есть цены и собственные рисунки).

Ваша проблема звучит так, как будто у вас есть товары в двух контекстах: (1) что-то, что может быть отображено как товар в вашем магазине, и (2) что-то, что может быть заказано вашим клиентом. (1) возможно, у него есть имя типа «Футболка на Хэллоуин» или около того, и у него, вероятно, есть изображение, которое видит клиент. (2) - это то, что заказывает клиент, поэтому он имеет (1), но также и вариант спецификации, такой как «маленький» или, возможно, цвет «красный». Вероятно, у него также есть цена и идентификатор_порядка, чтобы ваш магазин мог знать, какой именно товар необходимо отправить.

Вы должны дать каждому контексту сущность. Вот как бы я это сделал

displayable_product
id   name
1    "Baseball Cap"
2    "T-Shirt"

orderable_product
id   d_product_id order_id  size    color   price
1    1            123               red      9.99
2    2            456       small           19.99
3    2            789       medium          21.99

displayable_content
id   d_product_id  locale  name                 image
1    1             en_US   "Baseball Cap"       baseballcap.jpg
2    1             es_US   "Gorra de Beisbol"   baseballcap.jpg
3    2             en_US   "Nice T-Shirt"       nicetshirt.jpg
4    2             es_US   "Camiseta"           nicetshirt.jpg

Возможно, вам следует использовать locale вместо country в таблицах отображения для учета стран с более чем одним языком (США, Швейцария и другие), и вы можете разделить size и color на собственный variants стол. И если вам нужны зависящие от страны данные о заказах (например, разные цены / валюты для доставки в разные страны), вам также придется извлечь зависимую от страны таблицу orderable_content.

...