Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос про FK / 7 сообщений из 7, страница 1 из 1
05.08.2003, 11:45
    #32227253
Freestyler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про FK
Всем привет!
Возникла следущая проблема, нужно сделать таблицу которая бы содержала вторичный ключ, при этом допускались значения NULL, то есть поле было не обязательным. До этого работал на MS SQL, сейчас нужно сделать на IB, по аналогии не получается. Код ошибки:
[INTERSOLV][ODBC InterBase driver][InterBase]unsuccessful metadata update, object DHUMANNAMES is in use
Execution Failed!
Версия IB 5.6
...
Рейтинг: 0 / 0
05.08.2003, 11:56
    #32227275
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про FK
Сделай обязательным. Поставь туда не NULL, а 0! Вот и всё. В справочной таблице тоже должна быть запись с ID=0. Не нравится 0 - сделай -1.
В клиентском приложении обработай события OnGetText и OnSetText.
Через OnGetText подсунь пользователю NULL, а в OnSetText если пользователь ничего не написал или всё стёр присвой значение поля 0.

И вообще насколько я понял IB он просто ненавидит NULL и сажает из-за них скорость!
...
Рейтинг: 0 / 0
05.08.2003, 12:01
    #32227289
Freestyler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про FK
Я тоже про этот вариат думал. Мне просто интересно это нельзя сделать или я не докопался.
...
Рейтинг: 0 / 0
05.08.2003, 13:20
    #32227411
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про FK
Если подходить чисто логически, то возможно. Т.к. в правилах обновления FK ON DELETE, ON UPDATE есть директива SET NULL. Насколько я помню это означает, что следует в поле внешнего ключа у записей дочерней таблицы каскадом занести значение NULL при удалении или изменении поля связи в записи родительской таблицы.
...
Рейтинг: 0 / 0
05.08.2003, 13:20
    #32227412
koff4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про FK
Полностью согласен со Zmeishe. Правда FB 1.5 позволяет делать FK c не-NULL значениями, но если такое встречается - FK не отрабатывает.
Вроде бы обещали такое в FB 2.
Если уж очень нужно - напиши триггер (можно один на Insert/Update/Delete). Кстати внешние ключи сами неявно преобразуются в системные триггеры.
...
Рейтинг: 0 / 0
06.08.2003, 11:16
    #32228386
Temperature
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про FK
вот простой пример в одной таблице. parent_id может быть как null так и не null.
проверено, работает.

CREATE TABLE wwww
(
id integer NOT NULL,
parent_id integer,
name varchar(12123)
);

ALTER TABLE wwww
ADD CONSTRAINT PK_wwww PRIMARY KEY (ID);

ALTER TABLE wwww
ADD CONSTRAINT FK_wwww_id FOREIGN KEY (PARENT_ID)
REFERENCES wwww (ID);
...
Рейтинг: 0 / 0
07.08.2003, 06:22
    #32229512
Freestyler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про FK
У меня этот пример не работает. Ошибка:
[INTERSOLV][ODBC InterBase driver][InterBase]Dynamic SQL Error, SQL error code = -104, Token unknown - line 8, char -1, ALTER
Execution Failed!
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос про FK / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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