:: Архив конференции по VFP до 2005 года
Re: Ссылочная целостность в Фоксе
Петров Андрей

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
2 Combat

Да знаю я что это не верный подход. Но по трудозатратам он в моем случае более правильный.

2 Igor Korolev

Ну что тут скажешь все правтльно но вот мне когда я писал (не зная о существовании DBC точнее его еще и не было 2.6 версия) необходимо в виде диалога пользователю выдать что он должен удалить при попытке удаления данных верхнего уровня (те из справочника). А вот триггер насколько я помню этого возвращать не умеет По крайней мере стандартный.

Насчет триплета. Хм. Всегда делал это не через триггера а через транзакцию те добавление данных произвожу программно а не через триггер. Да и обновление тоже.

Igor Korolyov
"связанный Insert", и особые типы RI для
"классифицирующих" связей

Первый раз слышу термины.




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: Ссылочная целостность в Фоксе
Combat

Сообщений: 816
Откуда: Клайпеда
Дата регистрации: 26.10.2000
Петров Андрей
Первый раз слышу термины.
Эти термины, как "термины", я тоже первый раз слышу, но раньше чувствовал,
что что-то такое должно быть, и страдал от этого, ибо штатными никак не обходился.

Когда научился правильно проектировать базы - стало хватать штатных
Хотя, если есть проблемы с производительностью и база с целью решения этой
проблемы денормализована, придётся использовать что-то похитрее...

Единственное, что не нравится в штатных - некорректная обработка NULL на инсерт,
если триггер контролирует более чем одно поле в исходной таблице. Надо будет
в девятке проверить, не пофиксили ли чего доброго...




------------------
Ratings: 0 negative/0 positive
Re: Ссылочная целостность в Фоксе
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, Андрей!

1) На нет и суда нет - странно ставить сейчас аргументом то, что в FPD не
было DBC и вообще триггеров.
2) Никто не говорит что "оно не будет работать" - будет! Но это ненадёжно и
в "общем случае" нужно сделать более современно и надёжно - т.е. как
"рекомендация" это не катит.
3) Триггер НЕ ДОЛЖЕН никаких диалогов выводить! Ещё раз - триггер это
свойство данных - потому обычно используют всё-же не каскадные триггера, а
"ограничивающие" - Restrict - т.е. блокирующие то действие, которое приведёт
к нарушению целостности! И конечно тогда задача "удалить связанные строки ДО
удаления шапки" ложится на программу - триггер это так сказать последний
барьер, предохраняющий базу от разрушения.
4) хез как те термины правильно называются. Суть думаю понятна - Nullify -
это значит выставить поле внешнего ключа в Null при удалении той записи,
куда ссылался этот ключ - т.е. не "блокируем" удаление из справочника, и не
удаляём каскадно все записи на которые ссылалась удаляемая из "справочника",
а просто разрываем связь. Получаем своеобразных "сирот" - как пример -
удаление клиента - не обязательно удалять все связанные с ним бумажки -
платёжки там, старые заказы, договора и т.п. - просто переводим их к одному
"неизвестному/не важно какому" клиенту.
"связанная вставка" - это когда связь у нас типа один к один-или-много, и мы
ДОЛЖНЫ удостовериться, что при вставке в таблицу со стороны "один"
обязательно вставится как минимум одна запись и во вторую таблицу.
Вообще в реальном мире существует масса разных типов связи сущностей, и
уложиться в то убогое множество что предлагает штатный построитель RI
конечно нельзя - другой вопрос что в 80-90% случаев штатное RI таки
устраивает.




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 10 (Гостей: 10)

© 2000-2024 Fox Club 
Яндекс.Метрика