powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Простой вопрос про тригеры и ссылочную целостность
4 сообщений из 4, страница 1 из 1
Простой вопрос про тригеры и ссылочную целостность
    #34226526
DiMamont
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В учебных целях проектирую базу в ErWin'e и что-то туплю. Объясните, при простановке свойств связей, если поставить RESTRICT на UPDATE дочерней таблицы (идентифицирующая связь), то запрет будет на изменение любых полей в дочерней таблице или только при изменение будет проверятся целостность связи с главной таблицей? Вроде препод говорил, что верен второй вариант, а сейчас посмотрел код генерации тригера и такое ощущение, что первый вариант вернее.
Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
create trigger tU_Work_Pressure on Work_Pressure for UPDATE as
/* ERwin Builtin Wed Dec 27 00:27:08 2006 */
/* UPDATE trigger on Work_Pressure */
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insНачало_работы datetime, 
           @insPerson_No varchar( 5 ),
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
  /* ERwin Builtin Wed Dec 27 00:27:08 2006 */
  /* Person Имеет работы Work_Pressure ON CHILD UPDATE RESTRICT */
  /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="Person"
    CHILD_OWNER="", CHILD_TABLE="Work_Pressure"
    P2C_VERB_PHRASE="Имеет работы", C2P_VERB_PHRASE="Относится к", 
    FK_CONSTRAINT="Имеет_работы", FK_COLUMNS="Person_No" */
  if
    /* %ChildFK(" or",update) */
    update(Person_No)
  begin
    select @nullcnt =  0 
    select @validcnt = count(*)
      from inserted,Person
        where
          /* %JoinFKPK(inserted,Person) */
          inserted.Person_No = Person.Person_No
    /* %NotnullFK(inserted," is null","select @nullcnt = count(*) from inserted where"," and") */
    
    if @validcnt + @nullcnt != @numrows
    begin
      select @errno  =  30007 ,
             @errmsg = 'Cannot UPDATE Work_Pressure because Person does not exist.'
      goto error
    end
  end
  /* ERwin Builtin Wed Dec 27 00:27:08 2006 */
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go
...
Рейтинг: 0 / 0
Простой вопрос про тригеры и ссылочную целостность
    #34227224
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык по TSQL-ки же написано
Код: plaintext
1.
2.
3.
  if
    /* %ChildFK(" or",update) */
    update(Person_No)
  begin
...
Рейтинг: 0 / 0
Простой вопрос про тригеры и ссылочную целостность
    #34229314
DiMamont
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть мой вариант правильный?
...
Рейтинг: 0 / 0
Простой вопрос про тригеры и ссылочную целостность
    #34229595
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>только при изменение будет проверятся целостность связи с главной таблицей.
Да
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Простой вопрос про тригеры и ссылочную целостность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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