powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ошибка при попытке создания foreign key в IBExpert
25 сообщений из 55, страница 1 из 3
Ошибка при попытке создания foreign key в IBExpert
    #33549171
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При попытке выполнения следующего кода
Код: plaintext
1.
2.
3.
4.
5.
alter table WAREH
add constraint FK_WAREH
foreign key (PARENTID)
references WAREH(ID)
on delete CASCADE
on update CASCADE
в IBExpert выкидывает такую ошибку
Невозможно подтвердить транзакцию:
violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "***unknown***" on table "WAREH".
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549201
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так не может его создать потому как прям в процессе создания находятся записи, ему не соответствующие. А имени ключа назвать не может потому как ещё не создал :)
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549210
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Amris MirddinНу так не может его создать потому как прям в процессе создания находятся записи, ему не соответствующие. А имени ключа назвать не может потому как ещё не создал :)
Это как-то лечиться?
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549220
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WWWovan Amris MirddinНу так не может его создать потому как прям в процессе создания находятся записи, ему не соответствующие . А имени ключа назвать не может потому как ещё не создал :)
Это как-то лечиться?

какое слово тебе непонятно?
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549238
Amris Mirddin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WWWovan
Это как-то лечиться?

Ручаться не могу, но вообще-то психиатрия, особенно на Западе, в последнее время достигает неплохих результатов.
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549248
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
srf2000

какое слово тебе непонятно?
Слова, то понятны все. Не понятно как исправить положение...
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549254
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Amris Mirddin
Ручаться не могу, но вообще-то психиатрия, особенно на Западе, в последнее время достигает неплохих результатов.
Смешно. :-) Но мне бы все-таки хотелось исправить ошибку...
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549264
Фотография Kull Damned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Но мне бы все-таки хотелось исправить ошибку...
привести данные в соответсвие с желаемой схемой.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549296
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kull Damned>
привести данные в соответсвие с желаемой схемой.

Тогда может посоветуете как? Несоответствие(если я правильно понял) состоит в наличие в поле PARENTID значения "0", которое отсутствует в ID...
"0" - это корень дерева...
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549307
Dimano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[/quot]
Тогда может посоветуете как? Несоответствие(если я правильно понял) состоит в наличие в поле PARENTID значения "0", которое отсутствует в ID...
"0" - это корень дерева...[/quot]
Так и заведи значение "0" - "Корень дерева" или "Не указано" или ...
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549318
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimano
Так и заведи значение "0" - "Корень дерева" или "Не указано" или ...[/quot]
Спасибо. Помогло... Я в пинципе и сам так подумал... но боялся что при такй вставке возникнут проблемы в других местах... Сейчас посмотрим..
Всем спасибо за помощь.
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549365
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И боязнь была не напрасной... Проблемы возникли...
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549483
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все разобрался. Извините за безпокойство.
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549492
protector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно для корня дерева PARENTID устанавливают в NULL

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549563
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а еще обычней не делают on update/delete cascade :-) в общем, я не знаю тонкостей, и уже давно древовидными структурами не занимался, но мнится мне, что не надо бы каскадное обновление-удаление на деревянную структуру.
Тем более, что update cascade само по себе порочно и наказуемо.
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549628
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно для корня дерева PARENTID устанавливают в NULL

кстати, нафига, позволю себе спросить? Конечно, это дело вкуса и все такое, использовать null или 0 как parent у корневых элементов. Но как бы, нет null - нет гемора. Не так ли?
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549651
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жалко что редактировать свои сообщения нельзя.
я уже озвучивал ситуацию с этими null.

1. если делать fk, то parentid не может указывать на 0, если нет записи
id = 0 parentid = 0.
2. запись id = 0 parentid=0 фактически "зацикл". если не учитывать id > 0 то могут быть проблемы при переборе дерева.
3. parentid = null позволяет построить fk с id на parentid. НО. parentid не должен быть объявлен как not null.
4. при выборке корневых элементов надо писать where parent_id is null, в то время как для всех остальных - where parentid = :param.

лично мне не нравятся пункты 3 и 4. в системах делал parentid = 0, проблем не имел.
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549688
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изначально все началось с необходимости изменять свойства группы(ID) вместе со всеми подгруппами. Для этого необходимо извлечь из списка все узлы некоторого поддерева.
Информация которая меня натолкнула на такие подвиги находиться в статье
_http://gsbelarus.com/gs/modules.php?name=News&file=article&sid=314

Первый метод из тех которые там описаны наиболее подходящий для моей базы.
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549733
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторнеобходимости изменять свойства группы(ID) вместе со всеми подгруппами

я не понял, при чем тут update cascade.
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549744
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv

я не понял, при чем тут update cascade.
update cascade используеться в решение которое приведенов в статье(ссылка выше). Вот я и делал согласно предложеному в статье варианту...
Если есть решение лучше - буду очень благодарен...
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549789
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть думать самостоятельно не хочется. Copy/Paste?

что такое ON UPDATE CASCADE в FK? Это автоматическое обновление столбца связи у деталей (в данном случае parentid) при изменении первичного ключа мастера.

Кто в здравом уме меняет значение первичного ключа у записей? Почти никто.

что такое ON DELETE CASCADE в FK? это автоматическое удаление деталей (в данном случае записей с parentid) при удалении записи в мастере.

Кто разрешает автоматически удалять детали при удалении мастера? Да почти никто. Уж слишком опасная эта штука. Причем зачастую бессмысленная.
Допустим, мы поставим авто-удаление между таблицами заказы-клиенты. Значит, при удалении клиента удалятся все заказы? Зашибись. То есть, отчет по продажам мы уже правильно не сформируем.
В ряде систем и удаления-то нет как такового. Только "пометка на удаление", или "виртуальное удаление".

В случае дерева, каскадное удаление означает вообще супер-удаление, то есть гроханье всей ветки от корня до листьев. Как представил, меня аж тряхнуло... :-)
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549921
WWWovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvто есть думать самостоятельно не хочется. Copy/Paste?

что такое ON UPDATE CASCADE в FK? Это автоматическое обновление столбца связи у деталей (в данном случае parentid) при изменении первичного ключа мастера.

Кто в здравом уме меняет значение первичного ключа у записей? Почти никто.

что такое ON DELETE CASCADE в FK? это автоматическое удаление деталей (в данном случае записей с parentid) при удалении записи в мастере.

Кто разрешает автоматически удалять детали при удалении мастера? Да почти никто. Уж слишком опасная эта штука. Причем зачастую бессмысленная.
Допустим, мы поставим авто-удаление между таблицами заказы-клиенты. Значит, при удалении клиента удалятся все заказы? Зашибись. То есть, отчет по продажам мы уже правильно не сформируем.
В ряде систем и удаления-то нет как такового. Только "пометка на удаление", или "виртуальное удаление".

В случае дерева, каскадное удаление означает вообще супер-удаление, то есть гроханье всей ветки от корня до листьев. Как представил, меня аж тряхнуло... :-)
Послушавшись Вашего совета, вообще удалил FK и запись с значениями 0 - 0(точнее 0 - 364 как я ее потом изменил)... То что нужно все равно работает!
Спасибо за дельные советы!
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33549996
Sexton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvчто такое ON UPDATE CASCADE в FK? Это автоматическое обновление столбца связи у деталей (в данном случае parentid) при изменении первичного ключа мастера.

Кто в здравом уме меняет значение первичного ключа у записей? Почти никто.

Использовал этот фокус для проверки и обновления значения копии поля мастера, дублирующегося у детали.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE TABLE1 (
  ID1 INTEGER,
  FIELD1 INTEGER
);

CREATE TABLE TABLE2 (
  ID2 INTEGER,
  ID1_REF INTEGER,
  FIELD1_COPY INTEGER
);

ALTER TABLE TABLE2 ADD CONSTRAINT FK_TABLE1 FOREIGN KEY (ID1_REF, FIELD1_COPY)
REFERENCES TABLE1 (ID1, FIELD1) ON UPDATE CASCADE;
Так как ID1 никогда не меняется, то FK гарантирует равенство копии поля оригиналу. Обновление можно, конечно, и на триггерах, но если есть удобная фишка, то трудно заставить себя ее не использовать, тем более, когда не понимаешь, почему нельзя. Вот же он, локоть, надо только дотянуться и укусить...
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33550053
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sextonто трудно заставить себя ее не использовать, тем более, когда не понимаешь, почему нельзя.

первичный ключ могут менять только если он "естественный". Если он "искуственный" (или суррогатный), то его меняют разве что в экстренных случаях, и обычно вручную, а не из клиентских приложений. Так что и про "обновление, конечно, можно и на триггерах" я того же мнения.
Я пытаюсь донести мысль, что искуственный ПК не меняют, независимо от того, ссылается на него кто-нибудь, или нет.
...
Рейтинг: 0 / 0
Ошибка при попытке создания foreign key в IBExpert
    #33550150
Sexton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
первичный ключ могут менять только если он "естественный". Если он "искуственный" (или суррогатный), то его меняют разве что в экстренных случаях, и обычно вручную, а не из клиентских приложений. Так что и про "обновление, конечно, можно и на триггерах" я того же мнения.
Я пытаюсь донести мысль, что искуственный ПК не меняют, независимо от того, ссылается на него кто-нибудь, или нет.
Безусловно. В моем примере ID1 является искуственным неизменяемым ключем, а FIELD1 обычным (не ключевым) не пустым (not NULL забыл) изменяемым полем.
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ошибка при попытке создания foreign key в IBExpert
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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