powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация таблиц, у которых заполняется одно поле из нескольких.
8 сообщений из 8, страница 1 из 1
Организация таблиц, у которых заполняется одно поле из нескольких.
    #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
Организация таблиц, у которых заполняется одно поле из нескольких.
    #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
Организация таблиц, у которых заполняется одно поле из нескольких.
    #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
Организация таблиц, у которых заполняется одно поле из нескольких.
    #32346564
Ingvarwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Jinn:
Спасибо, что-то в этом есть. Я попробую.

2 babaEGA:
Думал я про такой вариант, но отказался, потому что вдруг потом понадобится добавить поле, которое не подходит по типу или еще что-то в этом роде...
...
Рейтинг: 0 / 0
Организация таблиц, у которых заполняется одно поле из нескольких.
    #32346677
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант.(наверное, самый плохой из предложенных)
В таблице tb_discounts хранятся только первичный ключ скидки,дата 1, дата 2 и скидка. Причем делается составной индекс по всем полям (т.е скидка становится "другой" если у нее другой процент и диапазон действия. Создается таблица "товары-скидки", которая содержит внешний ключ товара и скидки. При проставлении скидки на брэнд либо на тип запускается некая процедура, которая добавляет товары данного брэнда/типа в таблицу "товары-скидки".
...
Рейтинг: 0 / 0
Организация таблиц, у которых заполняется одно поле из нескольких.
    #32347086
Ingvarwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Varan:
Не пойдет... Если например у меня в базе около 1000 наименований товаров одного производителя, то при скидке на брэнд в таблицу [Товары-скидки] будет добавляться 1000 строк... Многовато.
В идеале надо хранить одну строку на одну скидку.
...
Рейтинг: 0 / 0
Организация таблиц, у которых заполняется одно поле из нескольких.
    #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
Организация таблиц, у которых заполняется одно поле из нескольких.
    #32347213
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один из самых простых способов - создать на каждый тип скидки свою таблицу, в данном случае - на (1) товары, (2) на брэнды и т.д. Названия всех полей в таблицах сделать одинаковыми. Для удобства работы можно создать View, в котором сделать UNION по всем таблицам. Все это сэкономит место в БД.

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


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