Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / скидки / 11 сообщений из 11, страница 1 из 1
10.11.2006, 14:12
    #34119556
sttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
Как реализовать такую вот задачку:
Схема действия скидок.

При совершении покупки на сумму более 1000 р. вручают карту со скидкой 3%.

1 Код скидки - 3% скидки в течении 2 месяцев набираем сумму 10 000 р.
2 Код скидки - переходим на 5% скидки и в течении 2 месяцев набираем сумму 20 000 р.
3 Код скидки - переходим на 7% скидки и в течении 2 месяцев набираем сумму 40 000 р.
4 Код скидки - переходим на 10% скидки и в течении 2 месяцев набираем сумму 60 000 р.
5 Код скидки - переходим на 15% скидки и в течении 2 месяцев набираем сумму 10 000 р.

(если сумма не набрана за период то счет обнуляется
и при 15% скидке набрав сумму десять тысяч покупатель остается без скидки оставшийся
двух месячный период и при условии что сумма набрана в установленный период переходим на 5%)
...
Рейтинг: 0 / 0
10.11.2006, 14:30
    #34119634
tpg
tpg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
Модератор: Тема перенесена из раздела Microsoft SQL Server
...
Рейтинг: 0 / 0
10.11.2006, 19:05
    #34120577
Taffy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
В базе таблица-справочник скидочных карточек с уникальными ID
И таблица покупок - ID карточки, дата, сумма, %скидки

После покупки, при вставке записи о покупке в таблицу вычислять %скидки и заполнять поле %скидки по результатам текущей и предыдущих покупок. А при следующей покупке просто выбирать %наценки из последней покупки. Покупки смотреть только за 2 последних месяца.
...
Рейтинг: 0 / 0
11.11.2006, 12:22
    #34121103
sttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
А как можно в запросе сравнить попадают ли все условия в двухмесячный срок.
Как составить коректный запрос ДатаТекущейПокупки-ДатаПереходаНаСкидку >= 2 месяцам.

Я для себя определил, что необходимо завести две таблицы Покупки и СостояниеСкидки. В СостояниеСкидки поля ДатаПереходаНаСкидку, ДатаТекущейПокупки, ТекущаяСкидка, ТекущаяСуммаНакопления и завести тригер на вставку в таблицу Покупки и потом запросом проанализировать Покупки (выбрать данные исходя из таблицы СостояниеСкидки, поля ДатаПереходаНаСкидку, с этой даты по текущую дату и если сумма и период соответсвуют условию, попадают в двух месячный период) и обновить если что изменилось в жизни этой карты в таблице СостояниеСкидки поля ДатаПереходаНаСкидку и ТекущаяСкидка. Но не знаю пока как это все реализовать в запросе плохо знаю T-SQL.
...
Рейтинг: 0 / 0
11.11.2006, 17:36
    #34121331
МТД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
Опиши задачу не сумбурно, а хотя бы в примитивном подобии ТЗ.
...
Рейтинг: 0 / 0
11.11.2006, 20:27
    #34121438
Taffy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
stttА как можно в запросе сравнить попадают ли все условия в двухмесячный срок.
Как составить коректный запрос ДатаТекущейПокупки-ДатаПереходаНаСкидку >= 2 месяцам.
.
Код: plaintext
datediff(mm,[ДатаТекущейПокупки],[Датапоследней покупки]) <=  2 
sttt
Я для себя определил, что необходимо завести две таблицы Покупки и СостояниеСкидки. В СостояниеСкидки поля ДатаПереходаНаСкидку, ДатаТекущейПокупки, ТекущаяСкидка, ТекущаяСуммаНакопления и завести тригер на вставку в таблицу Покупки
.
Зачем дата перехода на скидку? В каждой записи на текущую покупку проставлять процент скидки, который получается _после_ покупки. Все

sttt
Но не знаю пока как это все реализовать в запросе плохо знаю T-SQL.
Так с этого и надо начинать.
BOL,
http://www.firststeps.ru/sql/sql1.html
http://www.sql.ru/faq/faq.aspx?id=1

И ТЗ. В голове и на бумажке. Хотя бы в виде схемы.
...
Рейтинг: 0 / 0
13.11.2006, 12:12
    #34123402
sttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
МТДОпиши задачу не сумбурно, а хотя бы в примитивном подобии ТЗ.
Ну вроде описал достаточно подробно здесь 3382840. А за срвнение, Taffy спасибо.
Правда как я определю по скидкам когда через два месяца по условию схемы переходит карта на следующую скидку.

А подскажите, в тригере как то получить контекст записи возможно. Допустим я ставлю тригер на INSERT в таблице ТЕСТ и хотелось бы получить в тригере значения добавляемой строки.
...
Рейтинг: 0 / 0
13.11.2006, 15:50
    #34124343
Taffy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
sttt
Правда как я определю по скидкам когда через два месяца по условию схемы переходит карта на следующую скидку.

А зачем? При определении скидки - Вы будете выбирать последнюю покупку по этой карте, но не ранее чем за 2 месяца. Если не было покупки - скидки же теряются? Ну так и вот.
sttt
А подскажите, в тригере как то получить контекст записи возможно. Допустим я ставлю тригер на INSERT в таблице ТЕСТ и хотелось бы получить в тригере значения добавляемой строки.

есть таблица inserted - в ней все вставляемые строки
...
Рейтинг: 0 / 0
14.11.2006, 06:59
    #34125644
sttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
Taffy
При определении скидки - Вы будете выбирать последнюю покупку по этой карте, но не ранее чем за 2 месяца.
Правильно понимаю, необходимо выбрать данные по скидке за двух месячный период, начиная с текущего дня. Как это практически выглядит, не совсем точно вижу реализацию.

Taffyесть таблица inserted - в ней все вставляемые строки
мне эту таблицу самому нужно создать? или она уже есть? Примера с такой реализацией, в книгах не нашел и справке тоже. Эти весь процесс и тормозиться

к сожалению, пока плохо знаю предмет, что бы оценить возможности среды. Моими крупицами знаний был сделан вывод, что необходимо создать две таблицы. В одной будут все совершаемые покупки, а в другой состояние скидок для дисконтной карты и при вводе данных о покупке при определенных условиях обновляется таблица состояния дисконтных карт. Из этого следует, что необходимо на таблицу с покупками создать триггер со всеми условиями, который будет и обновлять таблицу о состоянии карты. Хотелось бы совет, каким еще способом можно это сделать. Думаю, мысль ясна.
...
Рейтинг: 0 / 0
14.11.2006, 23:15
    #34128723
Taffy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
stttПравильно понимаю, необходимо выбрать данные по скидке за двух месячный период, начиная с текущего дня. Как это практически выглядит, не совсем точно вижу реализацию.


Таблица покупок -
Код: plaintext
1.
2.
3.
4.
5.
6.
pokupki(id int, --ПК записи
           id_kart int, --код карточки
           datep datetime, --дата покупки 
           summa money, --сумма покупки
           skidka_t int,   --%скидки для текущей покупки
           skidka int    --%скидки для следующей покупки
            )
В момент покупки определяем скидку
Код: plaintext
1.
2.
3.
4.
5.
select @skidka = ISNULL(skidka, 0 )
from  pokupki
where id_kart = @id_kart  --код карточки
         and datediff(month,datep,getdate) <=  2   --все покупки за последние 2 месяца
--выбрали по времени последнюю покупку
         and datep = (select MAX(datep) from pokupki t where t.id_kart = @id_kart)-

Потом, когда вставляем новую запись в таблицу pokupki на триггере вычисляем процент скидки для следующей покупки.


sttt
Taffyесть таблица inserted - в ней все вставляемые строки
мне эту таблицу самому нужно создать? или она уже есть? Примера с такой реализацией, в книгах не нашел и справке тоже. Эти весь процесс и тормозиться
У Вас MS SQL? Если да - поиск в BOL по слову inserted.
...
Рейтинг: 0 / 0
15.11.2006, 06:38
    #34128911
sttt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скидки
Taffy, огромное спасибо. Совсем забыл что есть справка :)
Да у меня MS SQL.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / скидки / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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