Не создается foreign key.

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
fmcoder
Сообщения: 46
Зарегистрирован: 24 сен 2007, 20:57

Не создается foreign key.

Сообщение fmcoder » 01 окт 2007, 22:25

Делаю 2 таблицы:

Код: Выделить всё

 'create table "Genres" ("id" int PRIMARY KEY, "name" мarchar(100) NOT NULL)'
'create table "Tracks" ("fname" varchar(350) PRIMARY KEY, "artist" varchar(70), "title" varchar(70), "year" varchar(4), "comment" varchar(70), "genre_id" int REFERENCES "Genres")'
Вроде тут все просто, но таблица не создается - пишет ошибку:

`This operation is not defined for system tables.Unsuccessful metadata update.
Key size exceeds implementation restriction for index "RDB$PRIMARY31".`

Что это такое и как лечить?

AnryGTR
Сообщения: 116
Зарегистрирован: 15 янв 2007, 15:58

Сообщение AnryGTR » 01 окт 2007, 22:51

Ага...на какую таблицу ссылается поле ты указал, а кто будет указывать поле таблицы, на которое нужно ссылаться? Вася Пупкин что-ли? :?

fmcoder
Сообщения: 46
Зарегистрирован: 24 сен 2007, 20:57

Сообщение fmcoder » 01 окт 2007, 23:57

Да я просто нашел пример, там написано:
"Foreign key constraints are created by using REFERENCES to refer to the primary key of another table. Foreign keys link the tables together and prevent the insertion or updating of invalid data."

И код там почти как мой, отличие только в названиях и типах...
Попробую указать поле.
Спасибо!

fmcoder
Сообщения: 46
Зарегистрирован: 24 сен 2007, 20:57

Сообщение fmcoder » 02 окт 2007, 00:13

Нет, так и не вышло.
Изменил на

Код: Выделить всё

..."genre_id" int REFERENCES "Genres"("id")...
Блин, что делать?

Upd.
Все, разобрался, ошибка была из-за `"fname" varchar(350) PRIMARY KEY`.

AnryGTR
Сообщения: 116
Зарегистрирован: 15 янв 2007, 15:58

Сообщение AnryGTR » 02 окт 2007, 07:28

`"fname" varchar(350) PRIMARY KEY`
мда...чо-то я сразу не заметил это...насчёт 350 символов эт ты загнул реально! даже однобайтовые кодировки, если не ошибаюсь могут занимать максимум 253 символа, я уже не говорю о юникоде и т.п.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Не создается foreign key.

Сообщение WildSery » 02 окт 2007, 10:35

Ну вы даёте.
fmcoder писал(а):Key size exceeds

fmcoder
Сообщения: 46
Зарегистрирован: 24 сен 2007, 20:57

Сообщение fmcoder » 03 окт 2007, 15:45

AnryGTR писал(а):
`"fname" varchar(350) PRIMARY KEY`
мда...чо-то я сразу не заметил это...насчёт 350 символов эт ты загнул реально! даже однобайтовые кодировки, если не ошибаюсь могут занимать максимум 253 символа, я уже не говорю о юникоде и т.п.
Когда я убрал оттуда PRIMARY KEY все заработало, даже с размером в 350 символов. Я где-то тут читал, что для varchar максимум в районе 32К.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 03 окт 2007, 18:47

Для варчар, не для индекса.

Ответить