maximka787
2.08.2013 - 10:41
Всем привет. Хочу посоветоваться с вами, тк сам немного запутался.
У меня есть 2 таблицы «товары» (id товара, артикул, описание) и «атрибуты» (id товара, цвет, цена)
Если бы цена на товар была одинакова в рамках одного артикула, вопросов вообще бы не было, но у каждого цвета разная цена, соответственно ячейку с ценой нужно добавить уже не в основную таблицу, а в таблицу с атрибутом. Вот это вено решение? Мне посоветовали делать цену в обеих таблицам, т.е. если есть атрибут то выводить цену из второй таблицы, если атрибутов у товара нет, то из первой. Но по–моему это не совсем верно. Я склоняюсь тогда уж к созданию обязательной записи во второй таблице о цене, даже если атрибут всего один.
_____________
..Работает - не трогай!
Тогда тебе цену нужно вынести в отдельную таблицу, так будет удобнее,
а связью станет связь с id цвета, либо все цены лежат рядом с цветом
Тогда у тебя указание цвета станет обязательным.
Но дублирование свойства это не очень хорошо в этом случае, и даже на денормализацию не тянет
Michael
2.08.2013 - 11:21
Это перед тобой так задачу поставили?
Определенный артикул - это же реальный товар со всеми своими характеристиками.
Т.е. по товару надо хранить набор атрибутов и соотвествующие им артикулы.
А по артикулу уже надо хранить цену и например кол-во на складе.
_____________
There never was a struggle in the soul of a good man that was not hard
Можно предположить что разный цвет - это разный артикул. И если мое предположение совпадает с вашим тогда можно подумать про такие таблицы:
«товары» (id товара (key), артикул (foreign key), цена) и «атрибуты» (артикул (id товара), цвет, вес, габариты, ...).
maximka787
2.08.2013 - 12:14
Мужики, спасибо за ответы, начал думать по другому, но еще не до конца решил.
Сразу прошу прощения, ввел в заблуждение из-за артикулов и цен. Под артикулом я имею ввиду один вид товара. Лучше не брать вообще цвет, а например литраж, это более четко разъяснит ситуацию. Есть «бутылка Пепси» 1л, 0,5 литра. Задача вывести её как один товар (url), но с разным вариантом цен. И есть «Пирожок с малиной», у него вообще нет параметров и одна цена.
Какую лучше схему БД сделать? Как я понял:
products (productID, name, description)
attribute (attributeID, productID, price, count)
params (paramsID, value)
attribute2params (id, attributeID, paramsID, value)
Примерно так? Кстати в этом случае мне обязательно нужно будет выбрать хотя бы один параметр даже для пирожка. Или можно добавить цену еще и в первую таблицу и проверять потом есть ли модицикафии
_____________
..Работает - не трогай!
Michael
2.08.2013 - 12:28
Вопрос непростой на самом деле.
Тот друпал магазин - ubercart - с которым я работаю, как раз с этими атрибутами и привел нас в кроличью нору.
Там для товара (id) хранится базовая цена, а каждый атрибут, навешанный на этот товар, может какую то сумму отнять или прибавить.
Соотв. работает и когда атрибутов нет, тогда базовая цена и есть цена.
А если есть атрибут, то можно базовую в ноль поставить, а атрибутом уже цену.
Но поищи, может лучше есть решения, у самого в планах такое.
_____________
There never was a struggle in the soul of a good man that was not hard
Если есть время то можно почитать про
UML и потом проектировать БД дальше.
Еще перед проектированием можно какое-то средство автоматизации проектирования БД с использованием UML установить на свою рабочую станцию и в этой среде продолжить проектирование дальше...
Проектируя с использованием UML таблицы и вся БД красивее будет.
По-моему в вашем случае оптимален вариант, который предложил Michael (если я его верно понял), т.е. значения атрибута добавляет/отнимает от стоимости товара:
Цитата |
product id|name 1 |бутылка Пепси attributes id|name 1 |Oбъем
attribute_values id|value|price_increment 1 |0.5 |25 2 |1 |48
product_attribute_values product_id|attribute_id|value_id 1 |1 |2 |
maximka787
2.08.2013 - 12:53
Всем спасибо за советы, буду реализовывать!
_____________
..Работает - не трогай!
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.