Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация таблиц, у которых заполняется одно поле из нескольких. / 8 сообщений из 8, страница 1 из 1
08.12.2003, 12:49
    #32346298
Ingvarwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация таблиц, у которых заполняется одно поле из нескольких.
Таблица скидок для клиентов. Задача: продажа товаров, скидки могут быть на определенный товар (например на монитор Samsung SyncMaster 755DFX), на бренд (например на все товары LG), на группу товаров (например на телевизоры любого производителя). Для этого я создал такую таблицу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Table tb_discounts
[dis_id],
[dis_itemid] — товар, на который предоставляется скидка,
[dis_brandid] — бренд, на товары которого предоставляется скидка,
[dis_typeid] — тип товаров, на которые предоставляется скидка,
[dis_begdate] — дата начала действия скидки,
[dis_enddate] — дата окончания действия скидки,
[dis_value] — сама скидка в %

При такой организации таблицы для каждой строки всегда будет заполняться одно поле из трех — либо [dis_itemid], либо [dis_brandid], либо [dis_typeid]. То есть получится примерно вот такой вот вид:
Код: plaintext
1.
2.
3.
4.
[dis_id], [dis_itemid], [dis_brandid], [dis_typeid]
 1000      500      <NULL>  <NULL>
 1001     <NULL>   10       <NULL>
 1002     <NULL>  <NULL>   200 
 1003     <NULL>   12       <NULL>

То есть получается ИМХО много пустых полей и такая организация мне не нравится. Есть ли какие-то идеи как организовать подобную вещь с меньшими затратами на пустые поля? В дальнейшем может появиться скидка еще и определенному клиенту при покупке на определенную сумму, то есть "пустотосодержащих" полей прибавится....
...
Рейтинг: 0 / 0
08.12.2003, 12:59
    #32346312
Jinn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация таблиц, у которых заполняется одно поле из нескольких.
Попробуй иерархическое строение. Это поможет решить некорторые проблемы.

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

Теперь можешь выбирать нужную скидку и никаких пустых значений. Да и наименования упорядочишь :)
...
Рейтинг: 0 / 0
08.12.2003, 13:18
    #32346354
babaEGA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация таблиц, у которых заполняется одно поле из нескольких.
а что если сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Table tb_discounts
[dis_id],
[dis_elem] — абстрактное поле, в котором хранить №товара, №бренда или №типа товара.[dis_begdate] — дата начала действия скидки,
[dis_enddate] — дата окончания действия скидки,
[dis_value] — сама скидка в %
+
[dis_value] -  поле-классификатор ( 1 - значит в dis_elem хранится №товара,  2  - номер бренда.  3  - тип товара).
...
Рейтинг: 0 / 0
08.12.2003, 15:11
    #32346564
Ingvarwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация таблиц, у которых заполняется одно поле из нескольких.
2 Jinn:
Спасибо, что-то в этом есть. Я попробую.

2 babaEGA:
Думал я про такой вариант, но отказался, потому что вдруг потом понадобится добавить поле, которое не подходит по типу или еще что-то в этом роде...
...
Рейтинг: 0 / 0
08.12.2003, 15:58
    #32346677
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация таблиц, у которых заполняется одно поле из нескольких.
Еще вариант.(наверное, самый плохой из предложенных)
В таблице tb_discounts хранятся только первичный ключ скидки,дата 1, дата 2 и скидка. Причем делается составной индекс по всем полям (т.е скидка становится "другой" если у нее другой процент и диапазон действия. Создается таблица "товары-скидки", которая содержит внешний ключ товара и скидки. При проставлении скидки на брэнд либо на тип запускается некая процедура, которая добавляет товары данного брэнда/типа в таблицу "товары-скидки".
...
Рейтинг: 0 / 0
08.12.2003, 22:55
    #32347086
Ingvarwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация таблиц, у которых заполняется одно поле из нескольких.
2 Varan:
Не пойдет... Если например у меня в базе около 1000 наименований товаров одного производителя, то при скидке на брэнд в таблицу [Товары-скидки] будет добавляться 1000 строк... Многовато.
В идеале надо хранить одну строку на одну скидку.
...
Рейтинг: 0 / 0
08.12.2003, 23:30
    #32347093
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация таблиц, у которых заполняется одно поле из нескольких.
Я когда то написал системку, кде скидки задавались с пормощью двух таблиц

Таблица групп товаров
[GroupName]
[GroupID]
[Condition]
где [Condition] - сторка представляющая собой условие, которое можно воткнуть в WHERE часть SQL выражения, где во FROM части упоминается таблица товаров. В самых общих словах, группа товаров формируется выражением типа SELECT * FROM TableOfGoods WHERE [Condition].

Эти группы (а они могли быть поизвольные - например группировка по брэнду, типу товара, базовая цене... были другие характеристики...и по комбинации этих признаков) использовались в куче мест.... в общем служили основой весьма гибкой ценовой политики, и не только ценовой... например рекламные материалы распределялись так же по группам. Что же касается скидок то существует еще одна таблица

[CustomerID]
[GroupID]
[Order]
[Discount]

То есть для каждого клиента можно было определить разные скидки на произвольное количесво групп. Отмечу, что вычисление скидок происходит в определнном порядке и одна группа в процессе вычисления может "перекрыть" другую.

Там еще триггеры и ХП использовалсь, но игра стоила свеч, поскольку там прайсы по ~10000 наименованиям по 4-5 признакам при~20 группах формировался для каждого из клиентов динамически за очень даже приемлемое время (приемлемым я называю нераздражающее время открытия окна редактирования заказа). Но все же ИМХО это была децл долбанутая контора, свернутая на индивидуальном подходе к клиенту.
...
Рейтинг: 0 / 0
09.12.2003, 06:08
    #32347213
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация таблиц, у которых заполняется одно поле из нескольких.
Один из самых простых способов - создать на каждый тип скидки свою таблицу, в данном случае - на (1) товары, (2) на брэнды и т.д. Названия всех полей в таблицах сделать одинаковыми. Для удобства работы можно создать View, в котором сделать UNION по всем таблицам. Все это сэкономит место в БД.

Другой вариант - одна таблица, но с полем "Тип скидки".
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация таблиц, у которых заполняется одно поле из нескольких. / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]