Страница 1 из 1

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

Добавлено: 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, то как обновить все нужные записи для подчинённой таблицы?

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 24 ноя 2007, 12:59
Марианна

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

Добавлено: 24 ноя 2007, 17:48
Tonal
Что то типа того:

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

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
Прочитай документацию про триггера и псевдопеременные - жить сразу легче станет. :-)

Добавлено: 24 ноя 2007, 17:56
Марианна
Что то типа того:
Спасибо!