Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при создании базы в Interbase Console, ошибка -607 
V
    Опции темы
sanek1990
Дата 19.10.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 19.10.2009

Репутация: нет
Всего: нет



Здравствуйте подскажите пожалуйста что это за ошибка! на что SQL ругается?
user posted image
Сам скрипт
Код

create table Employees(
Tab_No Integer Not Null,
SurName varChar(20) Not Null,
Name VarChar(15),
Patronymic VarChar(15),
BirthDay Date,
Post_Code Integer Not Null,
Section_No Integer Not Null,
Primary Key (Tab_No),
Foreign Key (Post_Code) references Employees on delete cascade on update cascade,
Foreign Key (Section_No) references employees on delete cascade on update cascade);



Это сообщение отредактировал(а) sanek1990 - 19.10.2009, 17:37
PM MAIL WWW Skype   Вверх
Gluttton
Дата 19.10.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Чуть ниже ведь всё написано smile ...
Не заморачивайся на коде ошибки, а читай сообщение об ошибке...

Команда не валидная...
Той таблицы на которую ссылается ... что то там ... нету ...

Не скажу точно, но возможно перед тем как создавать ограничения необходимо поставить commit; на создание таблицы. Т.е. разбить скрипт на два: первый - создает таблицу и сохраняет изменения, а второй - создает ограничения.

И ещё не знаком с синтаксисом InterBase, но мне кажется, что некоректно описаны внешние ключи. На что они ссылаются? На какое поле какой таблицы?


--------------------
Слава Україні!
PM MAIL   Вверх
sanek1990
Дата 19.10.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 19.10.2009

Репутация: нет
Всего: нет



Цитата(Gluttton @  19.10.2009,  17:50 Найти цитируемый пост)
Чуть ниже ведь всё написано  ...Не заморачивайся на коде ошибки, а читай сообщение об ошибке...Команда не валидная...Той таблицы на которую ссылается ... что то там ... нету ...Не скажу точно, но возможно перед тем как создавать ограничения необходимо поставить commit; на создание таблицы. Т.е. разбить скрипт на два: первый - создает таблицу и сохраняет изменения, а второй - создает ограничения.И ещё не знаком с синтаксисом InterBase, но мне кажется, что некорректно описаны внешние ключи. На что они ссылаются? На какое поле какой таблицы?

тут все в пределе одной таблицы должно быть. Есть первичный ключ Primary Key (Tab_No) и нужно создать два вторичных для связи с двумя таблицами это ключи по полям Post_Code и Section_No. На самом деле до этого создавал уже эту таблицу все работало именно с этим скриптом то есть создавался и первичный и вторичные ключи. затем таблицы все удалил и создал новую бд, и вот такое стало выскакивать.
Если создать таблицу задав только первичный ключ  Primary Key (Tab_No) то все содается на раз. а вот вторичный ключи не хочет создавать. 
Цитата

но мне кажется, что некорректно описаны внешние ключи. На что они ссылаются? На какое поле какой таблицы?

они ссылаются на поля этой же таблицы.
Цитата

но возможно перед тем как создавать ограничения необходимо поставить commit; на создание таблицы

вот тут не совсем понял только начинаю изучать SQL)) то есть  надо применить commit только к блоку 
Код

Foreign Key (Post_Code) references Employees on delete cascade on update cascade,
Foreign Key (Section_No) references employees on delete cascade on update cascade);

или ко всему скрипту??
PM MAIL WWW Skype   Вверх
Gluttton
Дата 19.10.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(sanek1990 @  19.10.2009,  18:13 Найти цитируемый пост)
вот тут не совсем понял только начинаю изучать SQL)) то есть  надо применить commit только к блоку 

Не обращай внимание...

Цитата(sanek1990 @  19.10.2009,  18:13 Найти цитируемый пост)
они ссылаются на поля этой же таблицы.

Хм  smile ... Это как...

Ограничение на внешний ключ это примерно так: говоришь СУБД, что такое то поле является внешним ключем и поэтому, ты в дальнейшем его заполнять не собираешся, а данные пусть СУБД заполняет сама, при этом берет их от туда то... Это очень-очень упрощенно и даже немножко не правильно smile ...

А тут:
Код

Foreign Key (Post_Code) references Employees on delete cascade on update cascade

получается, что Post_Code - внешний ключ, но от куда данные брать (на что ссылаться)? После имени таблицы нужно указать и имя столбца в скобках...

P.S. Гипотетически я понимаю, что внешний ключ может ссылаться на ту же таблицу в которой он находится, но на практике я такого ещё не встречал... Ничего не перепутали?


--------------------
Слава Україні!
PM MAIL   Вверх
sanek1990
Дата 19.10.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 19.10.2009

Репутация: нет
Всего: нет



Цитата

Ограничение на внешний ключ это примерно так: говоришь СУБД, что такое то поле является внешним ключем и поэтому, ты в дальнейшем его заполнять не собираешся, а данные пусть СУБД заполняет сама, при этом берет их от туда то... Это очень-очень упрощенно и даже немножко не правильно smile ...

А тут:
Код

Foreign Key (Post_Code) references Employees on delete cascade on update cascade

получается, что Post_Code - внешний ключ, но от куда данные брать (на что ссылаться)? После имени таблицы нужно указать и имя столбца в скобках...

P.S. Гипотетически я понимаю, что внешний ключ может ссылаться на ту же таблицу в которой он находится, но на практике я такого ещё не встречал... Ничего не перепутали?

да действительно перепутал. не понял до конца что такое foreign key сейчас прочитал внимательнее документацию все встало на свои места smile  действительно дело было в том что ссылался на таблицу employees тогда как надо было ссылатся на таблицу posts поле Code в случае такого запроса
Код

Foreign Key (Post_Code) references Employees on delete cascade on update cascade

и ссылатся на таблицу sections поле Code в в случае такой команды
Код

Foreign Key (Section_No) references employees on delete cascade on update cascade);

так что вняв Вашим словам
Цитата

получается, что Post_Code - внешний ключ, но от куда данные брать (на что ссылаться)? После имени таблицы нужно указать и имя столбца в скобках...

получил следующий исправленный скрипт
Код

create table Employees(
Tab_No Integer Not Null Primary Key,
SurName varChar(20) Not Null,
Name VarChar(15),
Patronymic VarChar(15),
BirthDay Date,
Post_Code Integer Not Null,
Section_No Integer Not Null,
Foreign Key (Post_Code) references posts(code)on delete cascade on update cascade,
Foreign Key (Section_No) references sections(code) on delete cascade on update cascade);


который благополучно исполнился беза всяких ошибок! Спасибо Вам большое за подсказки! smile 
зы. Posts Sections это у меня в лабораторной такие названия))) smile 
PM MAIL WWW Skype   Вверх
Gluttton
Дата 19.10.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(sanek1990 @  19.10.2009,  19:41 Найти цитируемый пост)
 Спасибо Вам большое за подсказки!  

Незачто smile , желаю успехов smile !

Если вопрос решен, то тему можно пометить решённой  smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
Deniz
Дата 20.10.2009, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Тема закрыта, но все же ...
Цитата(Gluttton @  19.10.2009,  21:56 Найти цитируемый пост)
P.S. Гипотетически я понимаю, что внешний ключ может ссылаться на ту же таблицу в которой он находится, но на практике я такого ещё не встречал... Ничего не перепутали? 
На практике это применяется в "древовидных" структурах.
Например:
Код
create table test(
  id integer,
  parent integer,
  name varchar(...),
  ...
);
alter table test add constraint PK_Test primary key (id);
alter table test add constraint FK_Test_parent foreign key (parent) references test (id) on delete cascade on update cascade;



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0455 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.