|
автор: Beliy (17.10.2005 в 04:10) |
|
| Добрый день!
Встал такой вопрос:
Надо сделать каталог продукции фирмы, при этом товары в разных категориях отличаются по типам характеристик.
Например:
1. Телефоны
- Производитель
- Модель
- Cтандарт
- Тип экрана
- Записная книжка в аппарате, номеров
- Виброзвонок
...
2. Телевизоры
- Частота
- Формат изображения
- Телетекст
- Количество каналов
...
3., 4.....
Каким образом следует оптимально организовать структуру таблиц чтобы можно было легко добавлять новые типы товаров (напр. фото). При добавлении необходимо также создавать страндартные варианты выбора для каждой характеристики.
Моя идея была такая:
Все без исключения товары заносятся в 1 таблицу :
id | name | cat(int) | par1 | par2 | .... | par20
1 | nokia | 2 | 6 | 3 | ... | 2
Вторая таблица устанавливает соответствие названия категории и названия характеристики в первой таблицы
id | cat(int) | name | par1 | par2 | .... | par20
1 | 2 | Телефоны | Cтандарт | Тип экрана | ... | Виброзвонок
Третья таблица сопоставляет название характеристики и возможные варианты выбора этой характеристики
id | name | var1 | var2 | ... | var20 |
1 | Тип экрана | Цветной, 16 цветов | Цветной, 256 цветов | ... | Монохром
Но всё это кажется мне как то коряво.... (напимер ограничение по 20ти вариантам)
Долго ломаю голову как сделать правильно, так чтобы и код был понятен и не громоздким и система была универсальна.
Надеюсь написанное вызвало интерес у ПРОФЕССИОНАЛОВ и Вы сможете навести меня на путь истинный... Заранее благодарен! | |
|
|
|
|
|
|
|
для: Beliy
(17.10.2005 в 04:10)
| | Можно под кажды тип товара завести свою таблицу, а можно все запихать в одну, не несколько иначе:
id|код товара|номер признака (характеристики)|наименование (наличие признака)|номер группы
при этому у вас в каждой группе товаров может быть неограниченное количество товаров с неограниченным количеством характеристик. | |
|
|
|
|
автор: Beliy (17.10.2005 в 12:05) |
|
|
для: Loki
(17.10.2005 в 10:29)
| | Спасибо за ответ!
Заводить новую таблиц, мне кажется не самый лучший вариант.
второй вариант не очень понял...
Ещё раз, есть 4 массива ИЗМЕНЯЕМЫХ данных:
Товары
Категории
Названия характеристик (параметров)
Стандартные варианты для каждой хар-ки (параметра)
Нужно их грамотно распределить по таблицам и связать.
Может кто ещё что подскажет? | |
|
|
|
|
|
|
|
для: Beliy
(17.10.2005 в 04:10)
| | 1) Правильно ли я понял, что основная проблема заключается в том, что число и тип характеристик у разных товаров различаются?
2) Третья таблица кажется лишней... какова максимальное число характеристик? Может проще воспользоваться типом SET? | |
|
|
|
|
автор: Beliy (17.10.2005 в 14:50) |
|
|
для: cheops
(17.10.2005 в 13:42)
| | 1. Правильно
2. Использование типа SET или ENUM мне кажется не достаточно удобым, т.к. средствами php добавлять, редактировать, удалять варианты выбора очень муторно - нужно делать "левый" запрос, потом разбивать массив значений, затем разбивать его... бррр...
макс. число характеристик не более 20ти | |
|
|
|
|
|
|
|
для: Beliy
(17.10.2005 в 14:50)
| | 2) Т.е. число характеристик может меняться во время эксплуатации? Тогда да, третья таблица оправдана. | |
|
|
|
|
|
|
|
для: Beliy
(17.10.2005 в 14:50)
| | 1) т.е первая таблица, содержит характеристики которые характерны для всех товарных позиций без исключения, а вторая индивидуальные характеристики, характерные для разных видов товарных позиций? Если это так, то подход хороший, но смущают названия полей par1 | par2 | .... | par20 - такое именнование, особенно в больших системах ничем хорошим не заканчивается - в лучшем случае вы затратие в два раза больше времени на разралботку. Почему не используются осмысленные имена? Может тогда исчезнет чувство "корявости" системы? | |
|
|
|
|
автор: Beliy (18.10.2005 в 00:31) |
|
|
для: cheops
(17.10.2005 в 20:00)
| | не совсем так... т.е. совсем не так :)
par1 | par2 | .... | par20 - в том то всё и дело что для разных видов товаров ВСЕ характеристики разные (напр: мобильники, телевизоры и стиральные машины).....
и во второй таблице содержится название ТИПА характеристики....
попробую на конкретном примере:
нужно вывести карточку товара №200 примерно такого вида: [ http://market.yandex.ru/model.xml?hid=91491&modelid=454870 ]
используем структуру этих трех таблиц...
1. Из первой таблицы по id вытаскиваем название товара и № cat (категорию-группу) + все значения параметров
2. Зная категорию вытаскиваем название характеристик (в данном случае par1 = 'Диапазоны частот', par2 = 'Тип корпуса' , par3 = 'Антенна'....)
3. На основе этих двух таблиц создаём массив с индексами (пример: Диапазон частот => 3, Тип корпуса => 2, Антенна =>2), здесь индекс берётся из второй таблицы, а значение из первой...
4. Теперь в массиве надо подставить значения из третей таблицы вместо цифр (а эти цифры как раз и определяют значение для i-того столбца)...
и мы получаем массив данных для данного товара:
(пример: Диапазон частот => GSM 900, GSM 1800, Тип корпуса => раскладушка, Антенна =>встроенная)
Такая была идея... сейчас понимаю что она не фонтан :( ибо сам в конец запутался...
Может от другого оттолкнуться.... как организовать базу данных на подобии yandex.market? может так я быстрее разберусь 0:-) | |
|
|
|
|
|
|
|
для: Beliy
(18.10.2005 в 00:31)
| | Если не вводить под каждую товарную позицию отдельную таблицу (а здесь это не рационально), то лучше пожалуй ничего не придумаешь... | |
|
|
|