|
Есть ли ограничения в RI
|
|||
---|---|---|---|
#18+
Господа! Корректно ли использовать RI в таких двух случаях: - Таблица с ЧЕТЫРЬМЯ индексами типа REGULAR, ее записи ссылаются на ЧЕТЫРЕ материнские таблицы - Таблица имеет ТРИ дочерние таблицы Отмечу, что когда в открытой базе данных запускаю RI, в его таблице присутствуют ВСЕ пары родительских и дочерних таблиц, везде, где нужно я выбираю КАСКАД на удаление, но при тестировании НЕ везде работает каскадное удаление. Иногда, те записи в дочерних таблицах, которые должны быть удалены, не помечены как удаленные. Помогите разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2012, 18:17 |
|
Есть ли ограничения в RI
|
|||
---|---|---|---|
#18+
UAP, Не удалось повторить. :( Все работает. Может, неправильно понял? "Кабы схемку аль чертеж - мы б затеяли вертеж..." (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 08:09 |
|
Есть ли ограничения в RI
|
|||
---|---|---|---|
#18+
Уважаемый Jonny540! Я тоже на "модели" получаю правильные результаты. Хотелось бы увидеть ФОРМАЛЬНОЕ описание условий работы RI, чтобы найти проблему в реальной задаче, которая очень закручена. Вероятно, я нарушаю некоторые требования к состоянию таблиц, участвующих в RI. Может быть RI может работать на определенную глубину родитель-ребенок, либо ограничение на количество связей с другими таблицами, либо ограничение на количество индексов в таблице и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 12:40 |
|
Есть ли ограничения в RI
|
|||
---|---|---|---|
#18+
Откройте хранимые процедуры и изучайте триггера. В чем проблема-то. У RI как таковой нет специальных ограничений. Это же просто построитель хранимых процедур для организации определенного типа ссылочной целостности. Причем механизм далеко НЕ универсальный. Ограничения есть у собственно FoxPro. Например, запрет на рекурсивный вызов триггера. Если у Вас получилась древовидная структура, то удалить всю иерархию через RI - не получится. Хотя собственный триггер вне рамок RI для этого написать можно А если задача "закручена", то изучайте как у Вас там обстоят дела с транзакцией и буферизацией. Может, триггера-то срабатывают как надо, да только у Вас либо буфер какой сбрасывается позже, либо откат транзакции происходит. Может Вы просто подавили сообщение об ошибке. Кстати, если Вы не в курсе, то RI в процессе своей работы создает глобальный массив gaErrors(). Если в результате работы триггера происходит ошибка, то в этот массив записывается причина ошибки. Посмотрите, не записалось ли ту чего в тех случаях, когда у Вас не все удалилось ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 21:26 |
|
Есть ли ограничения в RI
|
|||
---|---|---|---|
#18+
Уважаемый ВладимирМ! Пожалуйста, объясните о какой древовидной структуре, где RI может не работать, Вы говорите. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2012, 23:06 |
|
Есть ли ограничения в RI
|
|||
---|---|---|---|
#18+
"Классический" способ хранения древовидной иерархии. Одна и та же таблица с двумя полями: ID - код записи, ParentID - ссылка на "родителя" (запись этой же таблицы). Так вот, построить RI между этими полями можно, но каскадное удаление работать будет только для одного уровня. При количестве уровней больше одного произойдет рекурсивный вызов (вызов триггера изнутри самого себя), что запрещено в VFP ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2012, 20:39 |
|
Есть ли ограничения в RI
|
|||
---|---|---|---|
#18+
Уважаемый ВладимирМ! В моем случае, материнские и дочерние записи принадлежат РАЗНЫМ таблицам, САМОССЫЛОЧНОСТИ нет. Не знаю почему, но сайт sql.ru, в последнее время, часто невозможно открыть. Когда такое случается я расстаиваюсь, поскольку ощущаю очень большую пользу для себя от форума. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2012, 20:19 |
|
Есть ли ограничения в RI
|
|||
---|---|---|---|
#18+
Я упомянул классическую древовидную иерархию, только как иллюстрацию того факта, что использование триггеров вообще (и RI как частный случай триггеров) имеет свои ограничения. Что именно накручено в Вашем приложении - не известно. Вы ведь сами не понимаете, что у Вас там творится. Так что, тут Вам никто не поможет. Ищите ошибку сами. Как я уже говорил, скорее всего, Вы где-то просто подавляете сообщение об ошибке. Т.е. FoxPro Вам говорит, что вот этого он сделать не может, но Вы от его слов "отмахиваетесь". Кроме того, Вы упомянули только о триггерах на удаление, но ничего не сказали о триггерах на вставку/модификацию. Может, у Вас после удаление просто создаются новые или изменяются существующие записи. Вот Вам и кажется, что не все удалилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2012, 21:36 |
|
|
start [/forum/topic.php?fid=41&msg=37966718&tid=1583441]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 265ms |
total: | 389ms |
0 / 0 |