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

Сообщений: 706
Дата регистрации: 14.11.2001
Я последнее время больше на MS SQL пишу, но пришлость старый проект подправить.
Появилось 2 вопрос:
Если установлен контроль ссылочной целостности между 2 таблицами, могу ли я вставлять значения null в child таблицу ?
У меня не получилось, а в MS SQL получатся.
Еще одна странность меня удивила, я в контейнера БД щелкнул по свзи между таблицами и удалил ее, а тригеры не удалились, это нормально ?




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

Сообщений: 706
Дата регистрации: 14.11.2001
Пока разбирался, заметил еще, что возможна ситуация, когда хранимой процедуры _ri_update_nak нет, а они прописана в таблице когда делаешь ей MODIFY STRUCTURE, не могу понять, в каком порядке нужно производить все эти действия, с сылочной целостностью, чтобы все не разваливалось ?




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

Сообщений: 131
Откуда: Новороссийск, Красндарский край
Дата регистрации: 26.04.2001
устанавливаешь связи, а потом database->edit referential integrity
Ratings: 0 negative/0 positive
Re: Ссылочная целостность в Фоксе
Владимир Максимов

Сообщений: 14095
Откуда: Москва
Дата регистрации: 02.09.2000
Цитата:
Если установлен контроль ссылочной целостности между 2 таблицами, могу ли я вставлять значения null в child таблицу ?
Если использовать "штатный" Referential Integrity, то нельзя. Надо писать триггера самостоятельно. На такой тип ссылочной целостности он не рассчитан.

Цитата:
Еще одна странность меня удивила, я в контейнера БД щелкнул по свзи между таблицами и удалил ее, а тригеры не удалились, это нормально ?
Нормально. Постоянная связь - это шаблон. По которому может быть (а может и НЕ быть) создана Referetial Integrity. Но после создания Referential Integrity этот шаблон уже не нужен.

А вообще-то, почитай здесь

Раздел "Триггер", подраздел "Referential Integrity"
www.foxclub.ru




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

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

Цитата:
Нормально. Постоянная связь - это шаблон. По которому может быть (а
может и НЕ быть) создана Referetial Integrity. Но после создания Referential
Integrity этот шаблон уже не нужен.
Это в общем случае зависит от использованных триггеров. Для штатных
триггеров, создаваемых RI Builder-ом действительно наличие связи не
принципиально - ему нужны лишь индексы (по первичному и по внешнему ключам).
Для других систем (в частности неплохая схема NewRI) они вполне могут быть
нужны и на этапе работы триггера.




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Ссылочная целостность в Фоксе
Петров Андрей

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Я совсем в этом не разбираюсь но напишу свой вариант без всяких триггеров. Делаю связи в БД и дальше не навешиваю на них никаких триггеров. Далее при удалении записи вызываю вот эту процедуру

Для MS SQL Server

FUNCTION May_Del_Record
LPARAMETERS Str, Id
m.r=SQLEXEC(m.h_conn, 'BEGIN TRANSACTION')
m.r=SQLEXEC(m.h_conn, m.str+'?m.id')
=SQLEXEC(m.h_conn, 'ROLLBACK TRANSACTION')
RETURN m.r=1

Для файл сервера

FUNCTION Can_Delete
LPARAMETERS table,id
PRIVATE str,c,x
DIMENSION arr(1)
m.str=''
SET DATABASE TO SYS_DB
m.c=ADBOBJECTS(arr,"RELATION")
FOR m.x=1 TO m.c
IF arr[m.x,2]=m.table
m.f_table_fk=OpenDBF(arr[m.x,1])
IF SEEK(m.id,arr[m.x,1],arr[m.x,3])
m.str=m.str+arr[m.x,1]+','
ENDIF
IF m.f_table_fk
SELECT (arr[m.x,1])
USE
ENDIF
ENDIF
ENDFOR
RETURN SUBSTR(m.str,1,LEN(m.str)-1)

Достаточно просто. Может чем помог...




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

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

Теперь всё это дело запихиваем в триггер (чтоб не напрягать никого "вызовом"
процедуры, и избежать всяких "забыл вызвать", "наплевал не запрет" и т.п.),
чуть доводим код на предмет "самодостаточности", анализа "типов RI" и более
полного восстановления среды (хотя это и не обязательно в некоторых случаях)
и получаем нечто сильно напоминающее схему "универсальных триггеров" NewRI





------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Ссылочная целостность в Фоксе
Петров Андрей

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Igor Korolyov
Теперь всё это дело запихиваем в триггер (чтоб не напрягать никого "вызовом"
процедуры, и избежать всяких "забыл вызвать", "наплевал не запрет" и т.п.)

Ну во первых для примера написал. Там еще приписка была сверху...

PS Насчет меня не беспокойся я то не забуду у меня это все прописано можно сказать в классе...

Igor Korolyov
чуть доводим код на предмет "самодостаточности", анализа "типов RI"

А вот это уже интереснее. Зачем делать анализ видов связей (так понимаю их там всего 2 1_к_1 и 1_ко_Многим)? И чем мой код не самодостаточен? У меня с ним проблем никогда не было. Тьфу тьфу.

Igor Korolyov
более
полного восстановления среды

Потрудись пожалуйста объяснить что за анализ среды такой? Те что ты под этим понимаешь... Единственное что я там не сделал так это не восстановил положение курсора если файл был открыт (но мне это не нужно) и не восстановил положение в списке USE (непомню как там чего называется) Те не сделал sele (m.save_sele) Но это опять таки не принципиально. Потому что всегда вудфю sele перед там как начать работатьс таблицей...

Igor Korolyov
и получаем нечто сильно напоминающее схему "универсальных триггеров" NewRI

Ты имеешь ввиду свою собственную систему чтоли под NewRI? Вместо стандартной...




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

Сообщений: 816
Откуда: Клайпеда
Дата регистрации: 26.10.2000
Петров Андрей
не беспокойся я то не забуду
В корне неверный подход (идеологически )

Петров Андрей
у меня это все прописано можно сказать в классе...
Триггер и должен быть тем самым "классом". Поддержание RI есть задача
не каких-то пользовательских классов, а самой базы данных.
Это же "начало начал" - так сказать




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

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

1) Ну Combat правильно говорит насчёт того что RI это всё-же свойство
данных, а не способа доступа к ним Т.е. не забудешь ты, забудет тот кто
придёт за тобой, или просто будет параллельно работать с твоими данными.
2) Я не хочу вдаваться в детали того что есть "среда", и что там нужно, а
что НЕ нужно восстанавливать. Просто с точки зрения триггера -
восстанавливать надо всё - в т.ч. закрыть то что сам наоткрывал.
3) С каждой связью ассоциирован триплет "правил" - что делать при Update,
что при Delete, что при Insert - запрещать, "каскадно" повторять... штатно
только 3 типа действий возможны, хотя "в общем случае" их гораздо больше (и
популярный кое где Nullify, и "связанный Insert", и особые типы RI для
"классифицирующих" связей - ну да там общим шаблоном не отделаться уж )
4) NewRI это не МОИ триггера - поищи на UT вроде было, или через Google -
вот заголовок статьи:
=========Beginning of the citation==============
Enforcing Referential Integrity in Visual FoxPro 6.0
By Steve Sawyer, Director of Technology, Kirtland Associates
The material in these notes are excerpted and adapted from Effective
Techniques for Application Development (Hentzenwerke Publishing, 1998).
Copyright (c) 1998 by Jim Booth and Steve Sawyer All Rights Reserved
=========The end of the citation================
там есть и пример кода.




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


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

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

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