CREATE TABLE diagram0_objects
(
id_obj integer NOT NULL AUTO_INCREMENT,
X_ Integer DEFAULT '0' NOT NULL,
Y_ Integer DEFAULT '0' NOT NULL,
H_ Integer DEFAULT '0' NOT NULL,
W_ Integer DEFAULT '0' NOT NULL,
Who_ Integer DEFAULT '0' NOT NULL,
tag_ Integer DEFAULT '0' NOT NULL,
type_ smallint DEFAULT '0' NOT NULL,
str_ CHAR(25) NOT NULL,
PRIMARY KEY (id_obj));
Создание внешнего ключа!!!
Объясните мне пожалуйста что это за ошибку выдает мне IB Expert при создание внешнего ключа:
violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "PK_RASH_INS" on table "RASH_INS".
Foreign key reference target does not exist.
Скрипт -alter table RASH_PO_FACT add constraint FK_RASH_PO_FACT_1
foreign key (NOM_RASH) references RASH_INS(NOM_RASH)
Использую FB2.0
Структура таблиц такая:
Таблица Rash_ins (ord_num,nomenk_numb,kol_ins_rash,nom_rash),
Таблица Rash_po_Fact (rash_fact,data_fact,nom_rash);
Цитата: yalovenko_alexandr
Добрый, Добрый День!!!
Объясните мне пожалуйста что это за ошибку выдает мне IB Expert при создание внешнего ключа:
violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "PK_RASH_INS" on table "RASH_INS".
Foreign key reference target does not exist.
Скрипт -alter table RASH_PO_FACT add constraint FK_RASH_PO_FACT_1
foreign key (NOM_RASH) references RASH_INS(NOM_RASH)
Использую FB2.0
Структура таблиц такая:
Таблица Rash_ins (ord_num,nomenk_numb,kol_ins_rash,nom_rash),
Таблица Rash_po_Fact (rash_fact,data_fact,nom_rash);
Объясните мне пожалуйста что это за ошибку выдает мне IB Expert при создание внешнего ключа:
violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "PK_RASH_INS" on table "RASH_INS".
Foreign key reference target does not exist.
Скрипт -alter table RASH_PO_FACT add constraint FK_RASH_PO_FACT_1
foreign key (NOM_RASH) references RASH_INS(NOM_RASH)
Использую FB2.0
Структура таблиц такая:
Таблица Rash_ins (ord_num,nomenk_numb,kol_ins_rash,nom_rash),
Таблица Rash_po_Fact (rash_fact,data_fact,nom_rash);
Цитата:
Имейте в виду, что при использовании ALTER TABLE вместо CREATE TABLE, для применения ограничения FOREIGN KEY, значения которые Вы указываете во внешнем ключе и родительском ключе, должны быть в состоянии справочной целостности. Иначе команда будет отклонена. Хотя ALTER TABLE очень полезна из-за ее удобства, вы должны будете в вашей системе, по возможности каждый раз, сначала формировать структурные принципы, типа справочной целостности.
м.б. из за отсутсвия справочной целостности
Цитата: oxotnik333
м.б. из за отсутсвия справочной целостности
Спасибо тебе oxotnik333!А не подскажешь как этого всего можно избежать?Что нужно выполнить чтоб создать справочную целостность и где можно взять литературу по этому поводу?В <Хелен Борри > такого не раскрыто!!!
Цитата: yalovenko_alexandr
Спасибо тебе oxotnik333!А не подскажешь как этого всего можно избежать?Что нужно выполнить чтоб создать справочную целостность и где можно взять литературу по этому поводу?В <Хелен Борри > такого не раскрыто!!!
вот статейка по поводу целостности и внешних ключей... м.б есть там что интересное по теме
Цитата: oxotnik333
вот статейка по поводу целостности и внешних ключей... м.б есть там что интересное по теме
Спасибо!!!
первая таблица создаётся без проблем:
Код:
на вторую, после того как добавил фк, начинает ругаеться, говорит can't create table diagram0_objects_attributes.frm (errno: 150)
Код:
CREATE TABLE diagram0_objects_attributes
(
id_obj_attr integer UNSIGNED NOT NULL AUTO_INCREMENT,
Index_obj Integer DEFAULT '0' NOT NULL,
str_ CHAR(25) NOT NULL,
PRIMARY KEY (id_obj_attr),
FOREIGN KEY (Index_obj) REFERENCES diagram0_objects
);
(
id_obj_attr integer UNSIGNED NOT NULL AUTO_INCREMENT,
Index_obj Integer DEFAULT '0' NOT NULL,
str_ CHAR(25) NOT NULL,
PRIMARY KEY (id_obj_attr),
FOREIGN KEY (Index_obj) REFERENCES diagram0_objects
);
чево ему не хватает?
Цитата: Гудвин
чево ему не хватает?
Как минимум вы не указали на какой столбец таблицы ссылается внешний ключ.
спасибо сработало) а я почему-то думал что если не указывать то он будет ссылаться по умолчанию на праймари кей
есть две таблицы
Код:
CREATE TABLE `bd_auto` (
`ID_AUTO` int(11) NOT NULL auto_increment,
`LINE` tinytext NOT NULL,
PRIMARY KEY (`ID_AUTO`)
);
CREATE TABLE `bd_auto_set` (
`ID_SET` int(11) NOT NULL auto_increment,
`INDEX_TABLE` int(11) NOT NULL default '0',
`LINE` tinytext NOT NULL,
`QUOTE` tinytext NOT NULL,
FOREIGN KEY (INDEX_TABLE) REFERENCES `bd_auto` (ID_AUTO) ON DELETE CASCADE,
PRIMARY KEY (`ID_SET`)
);
`ID_AUTO` int(11) NOT NULL auto_increment,
`LINE` tinytext NOT NULL,
PRIMARY KEY (`ID_AUTO`)
);
CREATE TABLE `bd_auto_set` (
`ID_SET` int(11) NOT NULL auto_increment,
`INDEX_TABLE` int(11) NOT NULL default '0',
`LINE` tinytext NOT NULL,
`QUOTE` tinytext NOT NULL,
FOREIGN KEY (INDEX_TABLE) REFERENCES `bd_auto` (ID_AUTO) ON DELETE CASCADE,
PRIMARY KEY (`ID_SET`)
);
я так понимаю при удалении из bd_auto автоматически должны удаляться дочерние записи из bd_auto_set, но вылезает ошибка:
Cannot delete or update a parent row: a foreign key constraint fails
Приходится вручную транзакцией очищать дочернюю таблицу а потом удалять эту запись. В чем ошибка?:confused:
А может есть другие таблицы, ссылающиеся на bd_auto?
нет, ни одной. просто это не одна такая связь, и везде такая же ситуация.:(
Цитата: Гудвин
Приходится вручную транзакцией очищать дочернюю таблицу а потом удалять эту запись. В чем ошибка?:confused:
Каскадное удаление возможно только для таблиц InnoDB
спасибо, разобрался.:)