Каскадное обновление

Модераторы: kdv, CyberMax

Ответить
Марианна
Сообщения: 6
Зарегистрирован: 23 ноя 2007, 18:43

Каскадное обновление

Сообщение Марианна » 23 ноя 2007, 19:38

пусть база данных включает такие таблицы:

Код: Выделить всё

CREATE TABLE ACTIONS_GROUPS(KEY_CODE_OF_GR_AND_ACT INTEGER CONSTRAINT ON_ACT_GR PRIMARY key,  -- ПЕРВИЧНЫЙ КЛЮЧ
                            CODE_OF_GROUP CODE, -- КОД ГРУППЫ
                            CODE_OF_ACTION CODE , -- КОД МЕРОПРИЯТИЯ
                            VALUE_ON_WEEK VALUE_ON_WEEK CONSTRAINT CHECK_VAL CHECK (VALUE_ON_WEEK >=1 AND VALUE_ON_WEEK <= 5) , -- ОБЪЁМ В НЕДЕЛЮ
                            CODE_OF_SPECIALIST CODE, -- КОД СПЕЦИАЛИСТА
                            TEMP_FK INTEGER);

CREATE TABLE SPECIALISTS (CODE CODE CONSTRAINT ON_C_SPEC PRIMARY KEY, -- КОД
                            SURNAME_SP SURNAME, -- ФАМИЛИЯ
                            NAME_SP NAME, -- ИМЯ
                            PATRONYMIC_SP PATRONYMIC, -- ОТЧЕСТВО
                            SPECIALIZATION SPECIALIZATION, -- СПЕЦИАЛИЗАЦИЯ
                            CODE_OF_STUDY CODE, -- КОД КАБИНЕТА
                            CODE_OF_ACTION CODE); -- КОД МЕРОПРИЯТИЯ

пусть поле CODE_OF_SPECIALIST CODE из таблицы ACTIONS_GROUPS
является полем внешнего ключа по отношению к полю CODE ДЛЯ SPECIALISTS.
собственно вопрос в том, как с помощью триггеров обеспечить каскадное обновление записей. Например, если мы изменили запись в таблице SPECIALISTS, то как обновить все нужные записи для подчинённой таблицы?

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Re: Каскадное обновление

Сообщение mdfv » 23 ноя 2007, 19:51

пусть поле CODE_OF_SPECIALIST CODE из таблицы ACTIONS_GROUPS
является полем внешнего ключа по отношению к полю CODE ДЛЯ SPECIALISTS.
Как вы уже справедливо заметили Пусть является. В этом и ответ.
У вас все не так. Когда его таки сделаете ВК и правило обновления Cascade поставите то все у вас получится.
Вообще работу с конкретным сервером надо начинать с документации, а не наоборот.

Марианна
Сообщения: 6
Зарегистрирован: 23 ноя 2007, 18:43

Re: Каскадное обновление

Сообщение Марианна » 23 ноя 2007, 20:44

Как вы уже справедливо заметили Пусть является. В этом и ответ.
У вас все не так. Когда его таки сделаете ВК и правило обновления Cascade поставите то все у вас получится.
Вообще работу с конкретным сервером надо начинать с документации, а не наоборот.
Да, я согласна. Но с созданием ВК я справлюсь, а вот как сделать обновление с помощью ТРИГГЕРОВ - не знаю...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 23 ноя 2007, 21:33

Марианна, вот скажите, для чего продублированы поля в двух таблицах?
Я бы наверное понял, если б эти значения могли отличаться (типа, одно дефолтовое, другое какое поставим).
Но судя по вопросу, они должны быть равны. Так зачем?

Марианна
Сообщения: 6
Зарегистрирован: 23 ноя 2007, 18:43

Сообщение Марианна » 23 ноя 2007, 22:10

Марианна, вот скажите, для чего продублированы поля в двух таблицах?
Я бы наверное понял, если б эти значения могли отличаться (типа, одно дефолтовое, другое какое поставим).
Но судя по вопросу, они должны быть равны. Так зачем?
Затем, что база включает не только две приведённые выше таблицы. И мне эти поля нужны для организации других связей.

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Re: Каскадное обновление

Сообщение mdfv » 23 ноя 2007, 23:12

Да, я согласна. Но с созданием ВК я справлюсь, а вот как сделать обновление с помощью ТРИГГЕРОВ - не знаю...
А зачем еще триггеры? :shock:
Чем не устраивает встроенный механизм у внешних ключей?

Марианна
Сообщения: 6
Зарегистрирован: 23 ноя 2007, 18:43

Re: Каскадное обновление

Сообщение Марианна » 23 ноя 2007, 23:41

А зачем еще триггеры? :shock:
Чем не устраивает встроенный механизм у внешних ключей?
Меня-то как раз устраивает, но в целях обучения требуется именно обеспечить каскадное обновление с помощью триггеров...и мне хотелось бы наглядно (на примере) его рассмотреть.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Re: Каскадное обновление

Сообщение Merlin » 24 ноя 2007, 00:55

Марианна писал(а): Да, я согласна. Но с созданием ВК я справлюсь
Сумление берёт. Или здесь циклические ссылки, которые сервак не пропустит (и правильно мделает), или я уже слишком пьян, или одно из двух. В общем, консеватория плачет. Опять же фразы насчёт изменеия записей и чтоб отазилось... Оно самой собой отразится. Ежели речь об атрибутах. А ежели об ключе, тот уже не консерватория, тут музыкальная гимназия...

Марианна
Сообщения: 6
Зарегистрирован: 23 ноя 2007, 18:43

Re: Каскадное обновление

Сообщение Марианна » 24 ноя 2007, 12:59


Сумление берёт. Или здесь циклические ссылки, которые сервак не пропустит (и правильно мделает), или я уже слишком пьян, или одно из двух. В общем, консеватория плачет. Опять же фразы насчёт изменеия записей и чтоб отазилось... Оно самой собой отразится. Ежели речь об атрибутах. А ежели об ключе, тот уже не консерватория, тут музыкальная гимназия...
мне всего лишь нужен наглядный пример, как реализуется обновление...с применением триггеров...

Tonal
Сообщения: 104
Зарегистрирован: 30 сен 2007, 13:42

Сообщение Tonal » 24 ноя 2007, 17:48

Что то типа того:

Код: Выделить всё

create trigger SPECIALIST_AU for SPECIALISTS active after update position 0
as begin
  update ACTIONS_GROUPS set
    CODE_OF_SPECIALIST = new.CODE
    where CODE_OF_SPECIALIST = old.CODE;
  -- повторить для всех остальных.
end
Прочитай документацию про триггера и псевдопеременные - жить сразу легче станет. :-)

Марианна
Сообщения: 6
Зарегистрирован: 23 ноя 2007, 18:43

Сообщение Марианна » 24 ноя 2007, 17:56

Что то типа того:
Спасибо!

Ответить