powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / О целостности данных
7 сообщений из 7, страница 1 из 1
О целостности данных
    #32357548
karpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Каким образом можно задать целостность данных в родительской и дочерней таблицах, если в дочернюю запись постоянно добавляются новые записи? Родительская с дочерней связана по первчиному ключу. В тригеррах при добавлении записи в дочернюю я могу поставить только "ignore", но тогда целостность не будет поддержана, тогда как быть???
...
Рейтинг: 0 / 0
О целостности данных
    #32357637
andrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При вставке записи в дочернюю, ты проверяешь на наличие ключа в первичной поэтому и игноре.А как же иначе.Какую еще хочешь целостность?
Еще можешь тригер на удаление записи из родительской, чтобы проверяла дочернюю.
...
Рейтинг: 0 / 0
О целостности данных
    #32357661
malec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Referential Integrity должны быть два положения:
Restrict
Ignore

Тебе нужно Restrict
Только что пробовал, у меня всё в норме.
Посмотри типы полей, ключи. Может там проблема
Да, У меня VFP 8.0 может в 6-ом или 7-ом и есть такие проблемы, я не знаю.
Ща поставлю 6-ой и гляну.
...
Рейтинг: 0 / 0
О целостности данных
    #32357727
karpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня родительская таблица:-клиенты с примари ключом по их коду(kod)
В дочерней иyдекс по такому же коду(kod)
Связь нормальная между ними, только вот когда делаю в дочерней append blanc запись не добавляет ссылается на триггер. Когда делаю "ignore" запись добавляется, но целостность тогда не сохраняется. Получается, что когда добавляется новая запись, то у нее kod пустое значение, естественно такое значение kod в родительской базе нет. Вот такая вот кухня.
...
Рейтинг: 0 / 0
О целостности данных
    #32357794
andrew_Pr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> когда делаю в дочерней append blanc запись не добавляет
Ну правильно! Если ты добавляешь пустую запись в дочернюю таблицу,
так на какую родительскую запись она ссылается ?! Ни на какую.
Поэтому тригер тебе и не дает такую запись добавить.
Поэтому нужно добавлять новую запись, включив предварительно буферизацию.
Тогда ссылочная целосность будет проверяться не сразу
после append blank, а только после того, как ты заполнишь поля,
в т.ч. и поле kod_client, и сделаешь tableupdate()
Но вообще-то лучше новую запись добавлять не append blank,
а insert into MyTable (kod_client) Values (m.kod_client)
...
Рейтинг: 0 / 0
О целостности данных
    #32357799
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 2 таблицы:

CREATE TABLE TabParent (TabParentID I, ...)
CREATE TABLE TabChild (TabChildID I, TabParentID I, ...)

Для обеспечения ссылочной целостности, между ними организуется связь по значению поля TabParentID и в Referenty Intagrety устанавливается триггер по типу Restrict.

Это означет, что в таблицу TabChild нельзя добавить запись с таким значением в поле TabParentID которого в настоящий момент нет в какой-либо записи таблицы TabParent в поле с тем же названием.

Что делает команда APPEND BLANK.

Эта команда создает новую запись, где все поля принимают либо пустые значения, либо значения по умолчанию (это прописывается в DEFAULT соответсвующих полей).

Судя по всему у тебя не назначено никакое значение DEFAULT для поля TabParentID таблицы TabChild. Значит по команде APPEND BLANK FoxPro предпримет попытку записать в это поле пустое значение.

При этом триггер проверит, есть ли пустое значение в какой-либо записи таблицы TabParent в поле ParentID. Не обнаружит такого значения и выдаст отказ в принятии изменений.

Что нужно сделать, чтобы добавить новую запись при существующем триггере Insert по типу Restrict.

Еть несколько вариантов решения:

-) Можно при модификации структуры таблицы в реквизите DEFAULT поля ParentID таблицы TabChild написать вызов некой функции для генерации такого значения, которое есть в поле ParentID таблицы TabParent. Но это не очень хорошо в данном случае. Поскольку провацирует появление логических ошибок. Т.е. привязку новой записи таблицы TabChild к неожидАемой записи таблицы TabParent

-) Использовать команду APPEND BLANK только в режиме буферизации таблиц (триггера срабатывают в момент сброса буфера)

-) Вместо команды APPEND BLANK использовать команду INSERT-SQL с явным заданием значения поля ParentID, ну например:

INSERT INTO TabChild (ParentID) VALUES (1)


PS:
Очень рекомендую почитать хоть какую-нибудь книгу по базам данных (не обязательно FoxPro). Общий подход для триггеров одинаков в любой базе данных. Могут отличаться только некоторые особенности реализации.
...
Рейтинг: 0 / 0
О целостности данных
    #32358123
karpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь!!!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / О целостности данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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