Докладні відомості про обмеження ЦІЛІСНОСТІ

Загалом, обмеження цілісності являють собою обмеження, що накладаються на значення, які дозволено приймати деякої змінної, або комбінації переменних1 Тому той факт, що конкретна змінна відноситься до деякого певного типу, являє собою апріорне обмеження, що накладається на розглянуту змінну (це обмеження полягає в тому, що значення, які може приймати дана змінна, повинні, безумовно, бути значеннями цього типу) Наприклад, змінна відносини S (постачальники) обмежується тим, що повинна містити значення, що є відносинами, в яких кожне значення s # являє собою номер постачальника (значення типу s #), кожне значення SNAME є імям (значенням типу NAME) і тд

Але ці прості апріорні обмеження, безумовно, не залишаються єдиними можливими і дійсно, в цьому сенсі жоден з шести прикладів, наведених у розділі 91, не уявляв собою апріорне обмеження Ще раз розглянемо приклад 1

Значення статусу кожного постачальника повинно знаходитися в межах від 1 до 100

включно

Нижче наведена трохи більш точне формулювання того ж обмеження

Якщо s – постачальник, то s має значення статусу в межах від 1 до 100 включно

А тут показаний ще більш точний (або більш формальний) спосіб формулювання цього ограніченія2

1 Як випливає з цього зауваження, обмеження цілісності застосовуються (принаймні, в прин ціпе) до змінних всіх типів Але з очевидних причин основну увагу в даній книзі наділі але саме змінним відносини

2 Зверніть увагу на те, що в цих формальних прикладах не використовується синтаксис мови Tutorial D (версії цих прикладів на мові Tutorial D наведені нижче) Крім того, цей синтаксис неповністю відповідає тому, який був визначений для реляційного числення в главі 8, хоча і близький до нього (особливо до версії, що стосується обчислення доменів)

FORALL s# € S#, sn NAME, st € INTEGER, sc € CHAR (

IF { S# s#, SNAME sn, STATUS St, CITY sc } S  THEN St

≥ 1 AND st ≤ 100 )

Це формальне вираз можна прочитати таким чином (на досить ламаною природній мові)

Для всіх номерів постачальників si, всіх імен sn, всіх цілих чисел st і всіх символьних рядків sc, якщо у змінній відносини постачальників зявляється кортеж: з атрибутами Si si, SNAME sn, STATUS st і CITY sc, то значення st більше або дорівнює 1 і менше або дорівнює 100

Можливо, тепер читач погодиться з тим, що дійсно потрібно було привести цю альтернативну версію прикладу 1 на природній мові, яка представлена ​​вище Справа в тому, що тепер стає очевидним наступний факт – ця альтернативна версія, відповідне формальне вираження і його аналог ламаною природній мові, мають деяку загальну форму (Як таку), яка виглядає приблизно так

Якщо (IF) в деякій змінної відносини присутній деякий кортеж, то (THEN,) цей кортеж задовольняє деякому умові

Ця форма є прикладом логічної імплікації (Яку іноді називають матеріальної импликацией), або просто імплікації Ця конструкція вже зустрічалася в главі 8 вона має таку загальну форму

IF  p  THEN  q

Тут р і q – логічні вираження, відповідно, звані посилкою і слідством Загальне вираз (тобто імплікація) є хибним, якщо р – істинно, aq – помилково, в іншому випадку воно є істинним іншими словами, саме вираження IF р THEN q є логічним і воно логічно еквівалентно висловом (NOT р) OR q

До речі, слід зазначити, що показана вище форма за замовчуванням включає необхідний квантор FORALL, оскільки вираження Якщо (IF) .. присутній деякий кортеж по суті означає Для всіх (FORALL) присутніх кортежів, .. .

Тепер перейдемо до аналогічного аналізу прикладів 2-6 (але при цьому не використовуючи формулювань на природній мові)

ПриміткаНаведені нижче формулювання не є єдино можливими, а також не завжди бувають найпростішими із усіх можливих, але вони, принаймні, правильні Слід також зазначити, що в кожному прикладі ілюструється щонайменше одна нова думка

2&nbsp&nbsp&nbsp Кожен постачальник з Лондона має статус 20

FORALL s# € S#, sn € NAME, st € INTEGER, sc

€ CHAR ( IF { S# s#, SNAME sn, STATUS st,

CITY sc } € S THEN ( IF sc = London THEN

st = 20 ) )

У цьому прикладі наслідок імплікації саме є импликацией

3&nbsp&nbsp&nbsp&nbsp Якщо взагалі є які-небудь деталі, то щонайменше одна з них повинна мати синій колір

IF

EXISTS р # е Р #, pn € NAME, p1 € COLOR, pw € WEIGHT, pc € CHAR

({Р # р #, PNAME pn, COLOR pi, WEIGHT pw, CITY pc} € Р

) THEN

EXISTS p# € P#, pn € NAME, p1 € COLOR, pw € WEIGHT, pc € CHAR

( { P# p#, PNAME pn, COLOR p1, WEIGHT pw, CITY pc }

€ P AND p1 = COLOR (Blue) )

Зверніть увагу на те, що не можна просто застосувати формулювання щонайменше одна деталь має синій колір, оскільки необхідно врахувати той випадок, коли взагалі немає деталей

Примітка Хоча це може здатися не зовсім очевидним, але даний приклад дійсно відповідає тій же загальній формі, як і два попередніх Нижче наведена альтернативна формулювання, яка дозволяє більш наочно підкреслити цю думку

FORALL р # € P #, pn € NAME, p1 € COLOR, pw € WEIGHT, pc € CHAR (IF {P # p #, PNAME pn, COLOR p1, WEIGHT pw, CITY pc

} € P THEN EXISTS q# € P#, qn € NAME, ql € COLOR, qw € WEIGHT, qc € CHAR

( { P# q#, PNAME qn, COLOR ql,

WEIGHT qw, CITY qc } G P AND ql = COLOR (Blue) ) )

4&nbsp&nbsp&nbsp Різні постачальники не можуть мати однакові номери постачальників,

FORALL x# G S#, xn G NAME, xt G INTEGER, xc G CHAR, y# G S#, yn G NAME, yt G INTEGER, yc G CHAR ( IF

{ S# x#, SNAME xn, STATUS xt, CITY xc } G S AND

{ S# y#, SNAME yn, STATUS yt, CITY yc } G S THEN ( IF x# = y# THEN xn = yn AND xt = yt AND xc = yc ) )

Даний вираз являє собою просто формальний виклад того факту, що

{S #} є потенційним ключем (або, у всякому разі, суперключом) для постачальників таким чином, обмеження ключа являють собою лише окремий випадок обмежень як таких Синтаксична конструкція KEY {S #} мови

Tutorial D може розглядатися як скорочення для наведеного вище більш складного вираження (До речі, тут заслуговують на увагу фігурні дужки Вони підкреслюють, що ключі завжди являють собою безлічі атрибутів, навіть якщо розглянуте безліч містить тільки один атрибут, і тому атрибути ключів в цій книзі завжди показані в фігурних дужках, щонайменше, у формальних контекстах)

Примітка І потенційні ключі, і суперключі докладно розглядаються в розділі 910

До речі, відзначимо, що цей приклад має таку загальну форму

Якщо (IF) деякі кортежі зявляються в деякої змінної відносини, то (THEN)

ці кортежі задовольняють деякій умові

Порівняйте між собою приклади 2 і 3, які обидва приймають таку ж форму, як і приклад 1 (незабаром стане очевидно, що це відноситься і до прикладу 5) На відміну від цього, приклад 6 приймає таку загальну форму

Якщо (IF) деякі кортежі зявляються в деяких змінних відносини, то (THEN) ці кортежі задовольняють деякій умові

Ця остання форма характеризується тим, що вона в загальному відноситься до всіх обмежень цілісності (перші дві можна розглядати як окремі випадки цього самого загального випадку)

5&nbsp&nbsp&nbsp Кожна поставка виконується існуючим постачальником

FORALL s # € S #, р # € Р #, q € e QTY (IF {S # s #, P # p #, QTY q} €

SP

THEN EXISTS  sn €  NAME,   st  €  INTEGER,   sc  €  CHAR

(   {  S#  S#,   SNAME  sn,   STATUS  st,  CITY  SC  }  € S  )   )

Це вираз являє собою формальне затвердження того факту, що {S #} є зовнішнім ключем для поставок, який відповідає потенційному ключу {S #} для постачальників Тому обмеження зовнішнього ключа також є лише окремим випадком обмежень як таких (додаткова інформація по цій темі також наведена в розділі 910) Слід зазначити, що в цьому прикладі беруть участь дві окремі змінні відносини, SP і S, а у всіх прикладах 1-4 бере участь тільки одна змінна отношенія3

6&nbsp&nbsp&nbsp Жоден постачальник зі статусом менше 20 не постачає будь-які деталі в количест ве більше 500

FORALL s# e  S#, sn € NAME, st € INTEGER, sc € CHAR, p# € P#, q € QTY

( IF { S#  s#, SNAME sn, STATUS st, CITY sc } € S AND

{ S# s#, P# p#, QTY q } € SP

THEN st&gt 20 OR q &lt QTY ( 500 ) )

У даному прикладі також розглядаються дві різні змінні відносини, але це обмеження не є обмеженням зовнішнього ключа

Приклади на мові Tutorial D

На завершення даного розділу розглянемо версії прикладів 2-6 мовою Tutorial D (на основі обчислення) При цьому застосовуються звичайні угоди, що стосуються імен змінних області значень

3 У попередньому виданні даної книги для позначення обмеження, в якому бере участь одна і тільки одна змінна відносини, використовувався термін обмеження змінної відносини, а для обмеження, в якому брало участь більше змінних відносин, – термін обмеження бази даних. Але, як буде показано в розділі 99, важливість такого розмежування більшою мірою відноситься до сфери практики, ніж логіки, тому надалі викладі ця тема фактично не розглядається

1&nbsp&nbsp&nbsp&nbsp&nbsp Кожен постачальник з Лондона має статус 20

CONSTRAINT SC2

FORALL SX ( IF SXCITY = London

THEN SXSTATUS = 2 0 END IF )

Зверніть увагу на те, що в мові Tutorial D логічні імплікації (вираження

IF / THEN) включають позначення кінця виразу END IF.

2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Якщо взагалі є які-небудь деталі, то щонайменше одна з них повинна мати синій колір

CONSTRAINT   PC3

IF   EXISTS   PX   (   TRUE   )

THEN  EXISTS   PX   (   PXCOLOR  =   COLOR   ( B l u e )                                        ) END   IF   

3&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Різні постачальники не можуть мати однакові номери постачальників

CONSTRAINT SC4

FORALL SX FORALL SY ( IF SXS#     =   SYS# THEN SXSNAME =                                        SYSNAME AND SXSTATUS =                                        SYSTATUS AND SXCITY   =

SYCITY

END IF )

4&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Кожна поставка виконується існуючим постачальником

CONSTRAINT SSP5

FORALL SPX EXISTS SX ( SXS# = SPXS# )

5&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Жоден постачальник зі статусом менше 20 не постачає будь-які деталі в количест ве більше 500

CONSTRAINT SSP6

FORALL SX FORALL SPX

( IF SXS# = SPXS#

THEN SXSTATUS ≥ 20 OR SPXQTY ≤ 500 END IF )

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*