Каскадне видалення - велика енциклопедія нафти і газу, стаття, сторінка 2

Якщо встановлений тільки прапорець Забезпечення цілісності даних, то видаляти дані з ключового поля головної таблиці не можна. Якщо разом з ним включені прапорці Каскадне оновлення пов'язаних полів і Каскадне видалення пов'язаних записів. то, відповідно, операції редагування і видалення даних в ключовому полі головної таблиці дозволені, але супроводжуються автоматичними змінами в пов'язаної таблиці. [17]

Умова на видалення записів задано для полів основної таблиці - Інвентарний об'єкт ОЗ. При видаленні записів в основній таблиці автоматично видаляються записи підпорядкованої таблиці - каскадне видалення. [18]

Якщо таблиця, з якої видаляються записи, пов'язана з іншою таблицею, що містить інформацію, яку не слід видаляти, клацніть правою кнопкою миші на лінії зв'язку, а потім клацніть на команді Змінити зв'язок (Edit Relationship) в контекстному меню. Переконайтеся, що прапорець Забезпечення цілісності даних (Enforce Referential Integrity) виділено, а прапорець Каскадне видалення пов'язаних записів (Cascade Delete Related Records) - немає. [19]

Встановивши такий тригер, можна видаляти рядок з батьківської таблиці, і при цьому відійдуть відповідні рядки в двох дочірніх таблицях. Врахуйте, проте, що якщо між цими таблицями є відносини, створені з використанням зовнішніх ключів, то в процесі каскадного видалення можуть виникнути труднощі. У таких ситуаціях SQL-сервер повертає повідомлення про помилку, що інформує про те, що була зроблена спроба видалити батьківську запис до того, як видалені всі дочірні. В цьому випадку, можливо, найкращим виходом стане створення збереженої процедури, що видаляє спочатку дочірні записи, а потім батьківську. [20]

Щоб накласти ці правила на конкретну зв'язок, при її створенні слід встановити прапорець Забезпечення цілісності даних. Якщо даний прапорець встановлений, то будь-яка спроба виконати дію, що порушує одне з перерахованих вище правил, призведе до висновку на екран попередження, а сама дія виконано не буде. Якщо встановлений прапорець Каскадне видалення пов'язаних полів. то при видаленні запису в головній таблиці видаляються і всі пов'язані записи в подчіненнойтабліце. [21]

Однак на практиці таблиці бази даних, як правило, пов'язані між собою, і наявність цих зв'язків в схемі бази даних обов'язково враховується програмою Access при спробі видалити записи однієї з пов'язаних таблиць, про що вже говорилося в главі 10, розділ Забезпечення нехтін пя ч даних в базі. Зміна зв'язків встановлений прапорець опції каскадне видалення М Я. [23]

Щоб гарантувати, що відносини між записами в зв'язаних таблицях правильні, і що ви випадково не видалите і не зміните пов'язані дані, Access використовує систему правил, яка називається цілісністю на рівні посилань. Коли встановлено прапорець Cascade Update Related Fields (Каскадне оновлення пов'язаних полів), зміна значення первинного ключа в головній таблиці автоматично оновлює відповідне значення у всіх пов'язаних записах. Коли встановлено прапорець Cascade Delete Related Records (Каскадне видалення пов'язаних записів), видалення запису в головній таблиці видаляє всі пов'язані з нею записи з пов'язаної таблиці. [24]

По-перше, відновити видалені записи не так-то просто. По-друге, видалення може виявитися більшим, ніж ви розраховували. Якщо таблиця, з якої видаляються записи, пов'язана з іншою таблицею і заданий параметр Каскадне видалення пов'язаних записів (Cascade Delete Related Records), записи в другій таблиці також будуть видалені. В одних випадках це виправдано, в інших - ні. Наприклад, навряд чи ви захочете видалити записи про минулі продажах тільки тому, що потрібно видалити товари, на які біль-шенетспроса. Существуютдваспособарешеніяетойпроблеми: зберегти резервну копію бази даних, перш ніж видаляти записи, або перемістити видаляються записи в спеціально створену для цих цілей таблицю. [25]

По-перше, не існує швидкого способу відновити вилучені записи. По-друге, ефект від запиту на видалення може виявитися складнішим і далекосяжних, ніж ви собі уявляєте. Якщо таблиця, в якій ви видаляєте записи, має зв'язок з іншою таблицею, і для зв'язку з цим встановлена ​​опція Cascade Delete Related Records (каскадне видалення зв'язаних записів), записи з другої таблиці також будуть видалені. [26]

Як було зазначено вище, при виборі зв'язку для резольвірованія в графі зв'язків можна використовувати різні евристичні функції оцінки. У разі паралельного резольвірованія необхідно робити вибір безлічі зв'язків, що відповідають деяким умовам. Варто відзначити, що невдалий вибір зв'язку може призвести до експоненціального зростання кількості диз'юнктів при вирішенні складних завдань, що зробить процедуру виведення практично непридатною. У той же час вдалий вибір зв'язку може значно збільшити ефективність процедури виведення. Наприклад, резольвірованіе єдиною зв'язку предикатной літери в диз'юнкт призведе до появи так званого чистого диз'юнкт, який повинен бути знищений. Видалення чистого диз'юнкт в свою чергу може привести до каскадному видалення інших диз'юнктів і до ефекту снігової лавини. В результаті структура графа зв'язків може значно спроститися. [27]

Сторінки: 1 2

Поділитися посиланням: