| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Firebird, Interbase > вычисляемые поля в триггерах |
| Автор: kat809 27.4.2008, 14:51 |
| Помогите пожалуйста срочно нужна помощь лузеру((( Есть 2 таблицы DOGOVOR (...,base_price, total_price) и OTELI_TURA(...., doplata) и промежуточная между ними таблица VARIANT_TURA. Мне нужно, чтобы в поле total_price (DOGOVOR) ссумировалось значение поля base_price (DOGOVOR) и поля doplata (OTELI_TURA). Наверное нужно использовать триггеры??Подскажите я в этом новичок((( ОЧЕНЬ НУЖНО, ЗАРАНЕЕ БЛАГОДАРНА! |
| Автор: Fortop 27.4.2008, 18:24 | ||
| Когда суммировались? Зачем суммировались? Может и триггеры, а может и не они. Можно задачу озвучить яснее? Получить итоговую сумму можно как минимум полудесятком способов... Какие у тебя связи между таблицами? И что храниться в каждой из них? Добавлено @ 18:28 Вот пример получения итоговой суммы
|
| Автор: kat809 28.4.2008, 10:54 |
| Может быть нужно создать поле как вычисляемое??прямо при создании таблице, там нужно использовать скрипт. Суммировтаь нужно, чтобы при добавлении новой записи, например нового тура с определенной базовой ценой и доплатой сразу выводилась общая сумма. таблица ДОГОВОР и ОТЕЛИ ТУРА между собой напрямую не связаны, есть промежуточная таблица ВАРИАНТ ТУРА. В т.ОТЕЛИ ТУРА есть FK id_variant_tura и в ДОГОВОРЕ имеется точно такой же вторичный ключ, оба они ссылаются на РК (id) т.ВАРИАНТ ТУРА. |
| Автор: Fortop 28.4.2008, 16:43 |
| Может быть стоит, при добавлении договора сразу записывать общую сумму в таблицу и не мучаться с вычисляемыми полями? |
| Автор: kat809 28.4.2008, 19:39 |
| Да, я понимаю..но хотелось бы автоматизировать....очень хотелось....а то нужно смотреть данные из одной таблицы..суммируя их с данными в другой....а препод жесткий....вот и хочется минимум вычислений самим((( |
| Автор: kat809 28.4.2008, 20:04 |
| Да из меня и проектировщик достаточно странныйс какой стороны не посмотреть(((Это все учебное...но... Добавлено через 7 минут и 25 секунд Просто это все начало...потом я буду пытаться создать сайт...с удаленным доступом к этой базе...и чувствую, что вычисляемые поля...это цветочки...по сравнению...чтоб будет дальше.... |
| Автор: Fortop 28.4.2008, 20:18 | ||
| Все в общем-то нормально два замечания. 1. БАЗОВУЮ_ЦЕНУ надо перенести в ВАРИАНТЫ_ТУРА (ведь договор у каждого клиента свой) 2. ДОПЛАТА - я бы перенес в таблицу отелей И тогда ОТЕЛИ_ТУРА не нужны и ВАРИАНТЫ_ТУРА напрямую будут связаны с ОТЕЛИ. А при создании договора ты в любом случае будешь читать из базы данные по отелю и по туру. И сложить 2ве цены - несложно. Можно конечно усложнять до безобразия. например, доплату(т.е. цену отеля) вынести в отдельную таблицу.
Т.е. ЦЕНА проживания сможет меняться от времени года (месяца, и т.д.) и срока (например 2 дня в сезон, это далеко не то же, что и 2 дня в несезон). |
| Автор: kat809 28.4.2008, 20:25 |
| Ок, спасибо большое за замечания))учту)))А во с еще одной таблицей заморачиваться наверное не буду...а что касается вычисления общей суммы...ее так и оставить в договоре?...и как все-таки она будет вычисляться??каим т.е. мезанизмом?... я канеша извиняюсь..наверное вопросы тупее некуда...но просто из меня программист, как из слона балерина((( |
| Автор: Fortop 28.4.2008, 20:35 |
| Лучше ее конечно вычислять и добавлять вместе с договором. Поскольку при составлении договора ты все равно будешь получать информацию об отеле и туре Можно сделать поле COMPUTED но в случае если у тебя цена тура измениться, в старых договорах цены тоже пересчитаются, что не очень хорошо А можно и сделать лишние телодвижения, в виде триггера, который будет делать лишний запрос и затем записывать цену при добавлении договора. |
| Автор: kat809 28.4.2008, 20:38 |
| Вот третий вариант для меня навреное самое лучшее))))Я изначально так и хотела)))Ес ди нетрудно примерчик можно? |
| Автор: Fortop 28.4.2008, 20:46 | ||||
| kat809, это далеко не лучший вариант Вместо 1го запроса, тебе придется писать запрос и триггер Вот пример простого триггера
вот пример сложного триггера
|
| Автор: Deniz 29.4.2008, 06:22 | ||||
| Fortop, это не сложный а длинный триггер. Без обид. Конструкцию типа:
|
| Автор: kat809 29.4.2008, 12:30 |
| Я немного изменила структуру БД, не могли бы вы опятным взглядом посмотреть?))) |
| Автор: Fortop 29.4.2008, 12:47 |
Тебе +1 просто за то, что ты решил в нем разобраться Потому что даже я в этот код не лезу Но так как он содержит в себе INSERT, SELECT, UPDATE kat809, эк ты скрестила опыт со словом опять Но что ты хочешь чтобы мы рассмотрели? Структура, в общем и целом, для учебной задачи - подойдет |
| Автор: kat809 29.4.2008, 13:00 |
| Хотелось бы, чтоб посоветовали, что в конце концов проще применить и написать....триггер на вставку и изменнеие, или все таки вычисляемое поле? т.Договор [*]id [*]id_variant_tura [*]total_price т.Вариант_Тура [*]id [*]id_otel [*]base_price и т.Отель [*]id [*]doplata И вот уже 2 дня бьюсь над проблемой, чтобы при добавлении или изменении данных в таблице договор, т.е. создать поле TOTAL_PRICE, как вычисляемое (dogovor.total_price=variant_tura.base_price+otel.doplata) или это можно сотворить при помощи триггера?...но опять же у меня возникает вопрос о написании в любом из 2 вариантов SQL-запроса, в чем и прошу помощи у вас опятных))))Заранее еще раз спасибо) |
| Автор: Fortop 29.4.2008, 13:16 | ||||
| kat809, Я с тобой уже 2 дня бьюсь Не используй триггеры Ведь ГОРАЗДО проще сделать один такой запрос
Чем городить вот такое.
|
| Автор: kat809 29.4.2008, 13:43 |
| Спасибо, буду пробывать) Добавлено через 12 минут и 53 секунды Просто хотелось, не самим всчитывать сумму, а чтобы это происходило автоматически, потому что конечный пользователь не будет видеть данные по базовым ценам и доплате во время добавления догвоора...ну да ладон, еще раз спасибо за то, что бились со мной 2 дня) |
| Автор: Fortop 29.4.2008, 14:26 | ||
Да не важно, будет ли он видеть эти данные. Чтобы предоставить список отелей тебе нужно будет извлечь данные Чтобы предоставить список туров - тебе также нужно будет извлечь данные. Будешь ли ты все из них показывать пользователю или частично - это дело десятое. И сумму ты будешь не сама высчитывать, а автоматически Что триггером, что в клиентском приложении. Но написать для этого код - придется в любом случае Образец кода для триггера для подсчета я привел. Бери и вставляй его. |
| Автор: kat809 30.4.2008, 14:03 |
| Ниче не получается((я уже не знаю, что делать, пробывала и в триггеры код и в вычисляемые поля писать(((Результата 0(((Подскажите, что делать |
| Автор: Fortop 30.4.2008, 21:10 |
| kat809, приведи примеры того что у тебя получилось, но что не работает. P.S. буду после полуночи |
| Автор: kat809 1.5.2008, 08:51 |
| Спасибо, уже все заработало)) |
| Автор: Fortop 1.5.2008, 09:23 |
| kat809, тогда тему пометь как решенную |