о поводу изменения шаблонов триггеров ErWin при генерации дл

mv
Дата: 27.10.2005 21:14:47

Зраствуйте.

Вот вопросец появился, по поводу целесообразности изменения шаблонов
триггеров ErWin (4.*) при работе с FireBird.

К примеру, скрипт бизнес - правила "Запрет на удаление родительской записи"
в оригинале выглядит так:

  /* ERwin Builtin %Datetime */
  /* %Parent %VerbPhrase %Child ON CHILD UPDATE RESTRICT */
  /* %ErwinRelationInfo */
  select count(*)
    from %Parent
    where
      /* %%JoinFKPK(NEW,%Parent," = "," and") */
      %JoinFKPK(NEW,%Parent," = "," and") into numrows;
  IF (
    /* %%NotnullFK(NEW," is not null and") */
    %NotnullFK(NEW," is not null and")
    numrows = 0
  ) THEN
  BEGIN
    EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;
  END


Это разворачивается в такой текст:
  /* ERwin Builtin Thu Oct 27 21:05:51 2005 */
  /* Users_Category определяют права Users ON CHILD UPDATE RESTRICT */
  /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="Users_Category"
    CHILD_OWNER="", CHILD_TABLE="Users"
    P2C_VERB_PHRASE="определяют права", C2P_VERB_PHRASE="",
    FK_CONSTRAINT="grantes", FK_COLUMNS="users_category_id" */
  select count(*)
    from Users_Category
    where
      /* %JoinFKPK(NEW,Users_Category," = "," and") */
      NEW.users_category_id = Users_Category.users_category_id into numrows;
  IF (
    /* %NotnullFK(NEW," is not null and") */

    numrows = 0
  ) THEN
  BEGIN
    EXCEPTION ERWIN_CHILD_UPDATE_RESTRICT;
  END


Ну вот, совсем не нравится, что используется count(*), хотя и с where.

Есть соблазн заменить на примерно след. скрипт:
  /* %Parent %VerbPhrase %Child Запрет изменения дочерней записи */
  IF (
    %NotnullFK(NEW," is not null and")
    not exists(
      select *
        from %Parent
      where
      %JoinFKPK(NEW,%Parent," = "," and"))
  ) THEN
  BEGIN
    EXCEPTION CUSTOM_RESTRICT 'Изменять нельзя: отсутствует запись в
связанной таблице "%EntityName(%Parent)"';
  END

который "развернется" вот во что:

  /* Users_Category определяют права Users Запрет изменения дочерней записи
*/
  IF (

    not exists(
      select *
        from Users_Category
      where
      NEW.users_category_id = Users_Category.users_category_id)
  ) THEN
  BEGIN
    EXCEPTION CUSTOM_RESTRICT 'Изменять нельзя: отсутствует запись в
связанной таблице "Категории пользователей"';
  END


Нет ли в этом чего предосудительного (замена анализа Count(*) > 0 на not
Exists )? Не зря же там такое было...

Спасибо.

Posted via ActualForum NNTP Server 1.3

hvlad
Дата: 27.10.2005 23:23:04
Меняй конечно
Я смотрю - шаблоны триггеров в ErWin'e делали такие же чайники, как и в PowerDesigner.
За что они только деньги дерут...
mv
Дата: 27.10.2005 23:32:08


>Меняй конечно
>Я смотрю - шаблоны триггеров в ErWin'e делали такие же чайники, как и в
PowerDesigner.
>За что они только деньги дерут...

Спасибо!

Posted via ActualForum NNTP Server 1.3

kdv
Дата: 28.10.2005 10:46:07
referential ingegrity при помощи триггеров - утопия. в PD уже для IB давно автоматом ставится декларативная ссылочная целостность.
mv
Дата: 03.12.2005 00:31:56

kdv

referential ingegrity при помощи триггеров - утопия. в PD уже для IB давно
автоматом ставится декларативная ссылочная целостность.

Последний ErWin наконец-то тоже может такое.

Posted via ActualForum NNTP Server 1.3