Для меня были выполнены следующие шаги:
eclipse.ini
-Xms40m
-Xmx512m
на -Xms512m
-Xmx1024m
Родительское удаление инициировало дочернее удаление, как Вы заявили, и я не знаю, почему оно переходит к дочерней таблице перед таблицей дяди. Я предполагаю, что необходимо было бы посмотреть на код DBMS для знания наверняка, но я уверен, что существует алгоритм, который выбирает который таблицы расположиться каскадом к сначала.
Система действительно 'не выясняет', наполняют способ, которым Вы подразумеваете здесь, и это просто следует своим ограничительным правилам. Проблемой является схема, которую Вы создали, в котором она встречается с ограничением, которое не позволит ей передать далее.
Я вижу то, что Вы говорите.. если бы это поразило таблицу дяди сначала, то это удалило бы запись и затем удалило бы дочерний элемент (и не поражать каскад дяди от дочернего удаления). Но несмотря на это, я не думаю, что схема была бы настроена для доверия такому поведению в действительности. Я думаю единственный способ знать наверняка, что продолжается, должен просмотреть код или привести одного из mysql/postgresql программистов здесь, чтобы сказать, как он обрабатывает fk ограничения.
В более простом случае, что происходит, если запись удалена от Ребенка и она имеет Дядю ссылки? Это является неуказанным, таким образом, ограничительный сбой для этого так или иначе.
Если удаление Ребенка не удаляет своих Дядей, затем что происходит вместо этого? Uncle.childid не может быть пустым.
То, что Вы хотите, является одной из этих трех вещей:
дизайн неправилен. У Вас должна быть единственная таблица с отношениями отцов и детей (буквально). Затем можно выяснить дядей (и тети) с запросом
select id from persons where -find all children of the grandparents
parent id in (
select parentid from persons --find the grandparents
where id in (
select parentid from persons --find the parents
where id=THECHILD) )
minus --and take out the child's parents
select parentid from persons
where id=THECHILD