Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Powerdesigner. Обновление базы из модели (MySQL) / 1 сообщений из 1, страница 1 из 1
12.04.2017, 17:44
    #39437469
khmike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Powerdesigner. Обновление базы из модели (MySQL)
Есть всего 2 связанные таблицы Person (parent) и PersonStat (child) (MySQL 5.5.45).
Скрипт создания:
Код: 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.
/*==============================================================*/
/* DBMS name:      MySQL 5.0                                    */
/* Created on:     12.04.2017 18:39:04                          */
/*==============================================================*/

drop table if exists Person;
drop table if exists PersonStat;

/*==============================================================*/
/* Table: Person                                                */
/*==============================================================*/
create table Person
(
   ID_PERSON            int(11) not null auto_increment,
   NAME_PERSON          national varchar(200),
   primary key (ID_PERSON)
);

/*==============================================================*/
/* Table: PersonStat                                            */
/*==============================================================*/
create table PersonStat
(
   ID_PERSONSTAT        int(11) not null auto_increment,
   ID_PERSON            int(11),
   STATUS               int,
   primary key (ID_PERSONSTAT)
);

alter table PersonStat add constraint FK_Reference_1 foreign key (ID_PERSON)
      references Person (ID_PERSON);


Скрипт создания работает чудесно.
Добавляю в таблицу PERSON одно поле.
Скрипт на обновление базы из модели:
Код: 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.
/*==============================================================*/
/* DBMS name:      MySQL 5.0                                    */
/* Created on:     12.04.2017 18:43:17                          */
/*==============================================================*/

drop table if exists khmike.tmp_Person;
rename table khmike.Person to tmp_Person;

/*==============================================================*/
/* Table: Person                                                */
/*==============================================================*/
create table Person
(
   ID_PERSON            int(11) not null auto_increment,
   NAME_PERSON          national varchar(200),
    NEW                  int(11), 
   primary key (ID_PERSON)
);

insert into Person (ID_PERSON, NAME_PERSON)
select ID_PERSON, NAME_PERSON
from khmike.tmp_Person;

drop table if exists khmike.tmp_Person;

alter table PersonStat add constraint FK_Reference_1 foreign key (ID_PERSON)
      references Person (ID_PERSON);

И сразу выходит ошибка (команда выделена красным цветом):
Код: plaintext
[MySQL][ODBC 5.1 Driver][mysqld-5.5.45-log]Cannot delete or update a parent row: a foreign key constraint fails SQLSTATE = S1000

Ошибка понятна. После переименования таблицы Person на tmp_Person дочерняя таблица PersonStat ссылается уже на нее и удалить tmp_Person нельзя.
Скрипт перед удалением таблицы должен удалять все foreign key для зависимых таблиц, потом удалять временную таблицу и перестраивать ключи заново. Т.е. перед drop должно стоять:
Код: plaintext
alter table PersonStat DROP FOREIGN KEY FK_Reference_1;
При чем, если таких связей много, то они все должны быть удалены.

Странно, что эта достаточно стандартная задача в Powerdesigner выдает ошибку.
Вероятно, что-то я делаю неправильно? Но как и где подправить понять не могу.
Подскажите.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Powerdesigner. Обновление базы из модели (MySQL) / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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