Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
О целостности данных
|
|||
|---|---|---|---|
|
#18+
Привет всем! Каким образом можно задать целостность данных в родительской и дочерней таблицах, если в дочернюю запись постоянно добавляются новые записи? Родительская с дочерней связана по первчиному ключу. В тригеррах при добавлении записи в дочернюю я могу поставить только "ignore", но тогда целостность не будет поддержана, тогда как быть??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2003, 10:24 |
|
||
|
О целостности данных
|
|||
|---|---|---|---|
|
#18+
При вставке записи в дочернюю, ты проверяешь на наличие ключа в первичной поэтому и игноре.А как же иначе.Какую еще хочешь целостность? Еще можешь тригер на удаление записи из родительской, чтобы проверяла дочернюю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2003, 11:05 |
|
||
|
О целостности данных
|
|||
|---|---|---|---|
|
#18+
В Referential Integrity должны быть два положения: Restrict Ignore Тебе нужно Restrict Только что пробовал, у меня всё в норме. Посмотри типы полей, ключи. Может там проблема Да, У меня VFP 8.0 может в 6-ом или 7-ом и есть такие проблемы, я не знаю. Ща поставлю 6-ой и гляну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2003, 11:11 |
|
||
|
О целостности данных
|
|||
|---|---|---|---|
|
#18+
У меня родительская таблица:-клиенты с примари ключом по их коду(kod) В дочерней иyдекс по такому же коду(kod) Связь нормальная между ними, только вот когда делаю в дочерней append blanc запись не добавляет ссылается на триггер. Когда делаю "ignore" запись добавляется, но целостность тогда не сохраняется. Получается, что когда добавляется новая запись, то у нее kod пустое значение, естественно такое значение kod в родительской базе нет. Вот такая вот кухня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2003, 11:42 |
|
||
|
О целостности данных
|
|||
|---|---|---|---|
|
#18+
>> когда делаю в дочерней append blanc запись не добавляет Ну правильно! Если ты добавляешь пустую запись в дочернюю таблицу, так на какую родительскую запись она ссылается ?! Ни на какую. Поэтому тригер тебе и не дает такую запись добавить. Поэтому нужно добавлять новую запись, включив предварительно буферизацию. Тогда ссылочная целосность будет проверяться не сразу после append blank, а только после того, как ты заполнишь поля, в т.ч. и поле kod_client, и сделаешь tableupdate() Но вообще-то лучше новую запись добавлять не append blank, а insert into MyTable (kod_client) Values (m.kod_client) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2003, 12:12 |
|
||
|
О целостности данных
|
|||
|---|---|---|---|
|
#18+
Есть 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). Общий подход для триггеров одинаков в любой базе данных. Могут отличаться только некоторые особенности реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2003, 12:16 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32357548&tid=1597396]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 385ms |

| 0 / 0 |
