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

И вообще насколько я понял IB он просто ненавидит NULL и сажает из-за них скорость!
...
Рейтинг: 0 / 0
Вопрос про FK
    #32227289
Freestyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тоже про этот вариат думал. Мне просто интересно это нельзя сделать или я не докопался.
...
Рейтинг: 0 / 0
Вопрос про FK
    #32227411
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если подходить чисто логически, то возможно. Т.к. в правилах обновления FK ON DELETE, ON UPDATE есть директива SET NULL. Насколько я помню это означает, что следует в поле внешнего ключа у записей дочерней таблицы каскадом занести значение NULL при удалении или изменении поля связи в записи родительской таблицы.
...
Рейтинг: 0 / 0
Вопрос про FK
    #32227412
koff4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полностью согласен со Zmeishe. Правда FB 1.5 позволяет делать FK c не-NULL значениями, но если такое встречается - FK не отрабатывает.
Вроде бы обещали такое в FB 2.
Если уж очень нужно - напиши триггер (можно один на Insert/Update/Delete). Кстати внешние ключи сами неявно преобразуются в системные триггеры.
...
Рейтинг: 0 / 0
Вопрос про FK
    #32228386
Temperature
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот простой пример в одной таблице. 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
Вопрос про FK
    #32229512
Freestyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня этот пример не работает. Ошибка:
[INTERSOLV][ODBC InterBase driver][InterBase]Dynamic SQL Error, SQL error code = -104, Token unknown - line 8, char -1, ALTER
Execution Failed!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос про FK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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