powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / ErWin&Interbase.Генераторы и домены автоматом - как ?
10 сообщений из 10, страница 1 из 1
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32617879
submarine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый, уважаемые БД-гуру.
Прошу подсказать пути решения (или посылки на FM..) следующей задачи:

Дана ErWin-овская схема (ErWin 4.0) без ХП, драйвер EasySoft ODBC.
Задача: сгенерить работоспособную структуру базы в Interbase 6.0.

Ранее работал с Oracle 8.1.7. Насколько я понял роль ораклового сиквенса в
IB выполняет генератор. При экспорте из ErWin в Oracle оные сиквенсы
создавались автоматом. При экспорте в Interbase подобного не происходит.

Вопрос 1: Как автоматизировать создание генераторов для первичных ключей таблицы ?
Слыхал, что существуют некие пост-скрипты в ErWin. Что RTFM по этому поводу?

Вопрос 2: Как я понял из следующей статьи на (http://www.stikriz.narod.ru/art/ibdatabase.htm)
неэкономично создавать типы столбцов как стандартные (integer, и т.д.), а лучше создать домены
и создавать столбцы с типами "мой домен integer". Как объяснить ErWin про домены ?

Вопрос 3: Линковочные таблицы (где в качестве primary key - набор primary keys из других
таблиц) не создаются корректно. Выдается ошибка о невозможности создать primary key.

Примечание: Решения вида "переход на IBExpert" просьба не предлагать - поскольку необходима
работа с 4 серверами БД , чего IBExpert, насколько я знаю, обеспечить не может.

Заранее приношу извинения за потраченное вами время, если данные вопросы тривиальны.
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618033
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри за офтоп, но всё же...
Линковочные таблицы (где в качестве primary key - набор primary keys из других таблиц)
вот это мне может кто-нибудь объяснить?
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618170
submarine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Линковочные таблицы - это один из способов реализации связи "многие-ко-многим". Возможно я неточно выразился, и следовало бы написать "где первичным ключом является набор foreign keys из других таблиц". Вы, вожможно будете удивлены, но такие конструкции действительно работают и весьма неплохо (во всяком случае, на Oracle).
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618201
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да я не удивлён, просто недопонял, вот и спросил, если чем обидел, то сорри, не хотел...
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618206
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хочешь, брошу проект с генераторами, "линковочными" таблицами и доменами...
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618281
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, насчет генераторов. Вариант.
Соглашения:
1. Каждая таблица имеет ключевое поле с именем ИмяТаблицы_Id
2. На логическом уровне для таблиц определо UDP (User Defined Properties)

имя generate_id
тип List
значение по умолчанию ~yes,no
(т.е. для каждой таблицы по умолчанию свойство generate_id будет иметь значение yes)
3. Генераторы для ключа создаются для каждой таблицы с именем ИмяТаблицы_Id_gen

Реализация генераторов:
На физическом уровне в Script Templates/Model Level Script создаем Pre-Script "Создание_генераторов", вот его текст:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 --------------------------------------------------------------------
 
 -- Создание генераторов - начало блока
 

%ForEachEntity() {
%if(%==(%EntityProp(generate_id),yes))
{ create generator %TableName_id_gen;  -- %EntityName }
 
}
 -- Создание генераторов - конец блока
 
 --------------------------------------------------------------------
 


При этом в одном из проектов у меня, например, генерируется след. скрипт:

Код: 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.
 --------------------------------------------------------------------
 
 -- Создание генераторов - начало блока
 

create generator Bank_id_gen;  -- Банки 
 
create generator Bill_id_gen;  -- Счет 
 
create generator Billing_id_gen;  -- Оплата 
 
create generator certification_id_gen;  -- Сертификаты 
 
...
...
...
create generator type_bill_id_gen;  -- Виды счетов 
 
create generator Unit_id_gen;  -- Ед.измерения 
 

 -- Создание генераторов - конец блока
 
 --------------------------------------------------------------------
 


Реализация триггеров:
Реализация генераторов:
На физическом уровне в Script Templates/Table Level Script создаем Post-Script "Триггер_для_ключа", вот его текст:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
%if(%==(%EntityProp(generate_id),yes))
  {create trigger %TableName_gen_id for %TableName before insert position  0 
 /* Триггер для  заполнения ключевого поля */ 
as
begin 
    IF (new.%TableName_id IS NULL) THEN
       new.%TableName_id = GEN_ID(%TableName_id_gen,  1 );
end ;
}


Этот макрос генерирует примерно след. скроипт:

Код: plaintext
1.
2.
3.
4.
5.
6.
create trigger Colleague_Category_gen_id for Colleague_Category before insert position  0 
 /* Триггер для  заполнения ключевого поля */ 
as
begin 
    IF (new.Colleague_Category_id IS NULL) THEN
       new.Colleague_Category_id = GEN_ID(Colleague_Category_id_gen,  1 );
end ;
для каждой таблицы, у которой значение свойства generate_id имеет значение yes.
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618305
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет доменов.

Используешь домены ErWin - а, а чтобы они генерировались не физическом уровне, в опциях генерации для схемы Schema "зачекиваешь" чек-бокс CREATE DOMAIN, а для схемы Column - "зачекиваешь" чек-бокс Use Domain.

По поводу третьего вопроса - думаю, проблема в методе генерации базы. Я просто выгружаю скрипт - текст в файл, который потом запускаю на выполнение в IBExpert. В нем же (IbExpert) выполняю сравнение старой и новой структур базы и запускаю сгенерированных скрит для выполнения изменений над структурой старой базы.
Очень удобный вариант, по-моему. Вся разработка/обновление идет в ErWin, а в IBExpert - администрирование, отладка процедур, и обновление структуры.
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618423
submarine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То MV: Не ожидал обстоятельного ответа, ещё раз спасибо. На данный момент
база недоступна - опробую рецепт вечером, но судя по всему - самое-то.
Позвольте (если несложно) ещё вопрос:
По поводу линковочных таблиц, возможно плохо соображаю после бессонной ночи, но всё-таки недопонимаю одну вещь. Выгруженный из ErWin скрипт мы прогнали в IBExpert, а вот дальше "...выполняю сравнение старой и новой структур базы...". Откуда появилась новая структура ? Прошу прощения за назойливость (или тупость), но недопонимаю. Если несложно чуть-чуть подробнее в этом месте.
Ещё раз спасибо!

To VF: Извините если был чуть резок. На других форумах я (в качестве читателя) обнаруживал тотально агрессивную атмосферу общения и соответственно отреагировал. Opennet.ru и SQL.ru, видимо, приятные исключения.
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618455
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут просто одни и те же тусуются, вроде меня, кто мало что соображают, а всяким "крутым" тут скучно.

По поводу старой и новой структуры. Я имею в виду примерно следующий цикл работы:

1. Создание модели в ErWin.
2. Выгрузка скрипта в файл.
3. Загрузка скрипта из файла в IBExpert, генерация "пустой" базы. Если ошибки, то к п.1
4. Эксплуатация базы.
5. Если требуются изменения, то п.6, нет - п.4
6. Коррекция модели в Erwin.
7. Выгрузка скрипта в файл.
8. Загрузка скрипта из файла в IBExpert, генерация новой "пустой" базы. Если ошибки, то к п.6
9. В IBExpert сравнение "старой" (рабочей) базы и "новой" (пустой), преобразование структуры "старой" к "новой" базе. Переход к п.4

--------------------
Естественно, все коррекции выполняются сначала на копии рабочей базы, а затем всем заинтересованным лицам рассылается скрипт, корректирующий структуру.
...
Рейтинг: 0 / 0
ErWin&Interbase.Генераторы и домены автоматом - как ?
    #32618509
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тебе проект - для ErWin 4.1.4.3907

Под FireBird 1.5 (Под InterBase, думаю, не пойдет - я всяческие "Case"/"Coalesce" etc использовал)
Мыло смотри.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / ErWin&Interbase.Генераторы и домены автоматом - как ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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