|
Организация таблиц, у которых заполняется одно поле из нескольких.
|
|||
---|---|---|---|
#18+
Таблица скидок для клиентов. Задача: продажа товаров, скидки могут быть на определенный товар (например на монитор Samsung SyncMaster 755DFX), на бренд (например на все товары LG), на группу товаров (например на телевизоры любого производителя). Для этого я создал такую таблицу: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
При такой организации таблицы для каждой строки всегда будет заполняться одно поле из трех — либо [dis_itemid], либо [dis_brandid], либо [dis_typeid]. То есть получится примерно вот такой вот вид: Код: plaintext 1. 2. 3. 4.
То есть получается ИМХО много пустых полей и такая организация мне не нравится. Есть ли какие-то идеи как организовать подобную вещь с меньшими затратами на пустые поля? В дальнейшем может появиться скидка еще и определенному клиенту при покупке на определенную сумму, то есть "пустотосодержащих" полей прибавится.... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2003, 12:49 |
|
Организация таблиц, у которых заполняется одно поле из нескольких.
|
|||
---|---|---|---|
#18+
Попробуй иерархическое строение. Это поможет решить некорторые проблемы. Table Names Name_ID Owner_ID Name# Table Discount Name_ID Discount$ Выглядеть будет примерно так: Names 1, Null, Монитор 2, 1, Samsung 3, 2, 753 4, 3, DFX Discount 3, 10 2, 5 Теперь можешь выбирать нужную скидку и никаких пустых значений. Да и наименования упорядочишь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2003, 12:59 |
|
Организация таблиц, у которых заполняется одно поле из нескольких.
|
|||
---|---|---|---|
#18+
а что если сделать так: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2003, 13:18 |
|
Организация таблиц, у которых заполняется одно поле из нескольких.
|
|||
---|---|---|---|
#18+
2 Jinn: Спасибо, что-то в этом есть. Я попробую. 2 babaEGA: Думал я про такой вариант, но отказался, потому что вдруг потом понадобится добавить поле, которое не подходит по типу или еще что-то в этом роде... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2003, 15:11 |
|
Организация таблиц, у которых заполняется одно поле из нескольких.
|
|||
---|---|---|---|
#18+
Еще вариант.(наверное, самый плохой из предложенных) В таблице tb_discounts хранятся только первичный ключ скидки,дата 1, дата 2 и скидка. Причем делается составной индекс по всем полям (т.е скидка становится "другой" если у нее другой процент и диапазон действия. Создается таблица "товары-скидки", которая содержит внешний ключ товара и скидки. При проставлении скидки на брэнд либо на тип запускается некая процедура, которая добавляет товары данного брэнда/типа в таблицу "товары-скидки". ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2003, 15:58 |
|
Организация таблиц, у которых заполняется одно поле из нескольких.
|
|||
---|---|---|---|
#18+
2 Varan: Не пойдет... Если например у меня в базе около 1000 наименований товаров одного производителя, то при скидке на брэнд в таблицу [Товары-скидки] будет добавляться 1000 строк... Многовато. В идеале надо хранить одну строку на одну скидку. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2003, 22:55 |
|
Организация таблиц, у которых заполняется одно поле из нескольких.
|
|||
---|---|---|---|
#18+
Я когда то написал системку, кде скидки задавались с пормощью двух таблиц Таблица групп товаров [GroupName] [GroupID] [Condition] где [Condition] - сторка представляющая собой условие, которое можно воткнуть в WHERE часть SQL выражения, где во FROM части упоминается таблица товаров. В самых общих словах, группа товаров формируется выражением типа SELECT * FROM TableOfGoods WHERE [Condition]. Эти группы (а они могли быть поизвольные - например группировка по брэнду, типу товара, базовая цене... были другие характеристики...и по комбинации этих признаков) использовались в куче мест.... в общем служили основой весьма гибкой ценовой политики, и не только ценовой... например рекламные материалы распределялись так же по группам. Что же касается скидок то существует еще одна таблица [CustomerID] [GroupID] [Order] [Discount] То есть для каждого клиента можно было определить разные скидки на произвольное количесво групп. Отмечу, что вычисление скидок происходит в определнном порядке и одна группа в процессе вычисления может "перекрыть" другую. Там еще триггеры и ХП использовалсь, но игра стоила свеч, поскольку там прайсы по ~10000 наименованиям по 4-5 признакам при~20 группах формировался для каждого из клиентов динамически за очень даже приемлемое время (приемлемым я называю нераздражающее время открытия окна редактирования заказа). Но все же ИМХО это была децл долбанутая контора, свернутая на индивидуальном подходе к клиенту. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2003, 23:30 |
|
Организация таблиц, у которых заполняется одно поле из нескольких.
|
|||
---|---|---|---|
#18+
Один из самых простых способов - создать на каждый тип скидки свою таблицу, в данном случае - на (1) товары, (2) на брэнды и т.д. Названия всех полей в таблицах сделать одинаковыми. Для удобства работы можно создать View, в котором сделать UNION по всем таблицам. Все это сэкономит место в БД. Другой вариант - одна таблица, но с полем "Тип скидки". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2003, 06:08 |
|
|
start [/forum/topic.php?fid=32&msg=32347093&tid=1546724]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
169ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 282ms |
0 / 0 |