У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент





TO структура_пам’яті

ON (ключ1, ключ2,. ..) і

INDEX ON ім’я_відношення IS ім’я_індекса (ключ1, ключ2,. ..)

Оператор MODIFY змінює структуру відношення, що зберігається відповідно до параметра структура_пам’яті і заданого набору ключових атрибутів. Оператор INDEX створює окрему індексну структуру для заданих полів даного відношення. Створені індекси використовуються системою для оптимізації виконання операторів маніпулювання даними. Узгодженість вмісту відносин і індексів підтримується системою автоматично.

Мова QUEL містить також оператори визначення обмежень цілісності, представлень і обмежень доступу. На них ми зупинимося трохи пізніше.

У тому вигляді, в якому ми його стисло описали, мова QUEL призначена для інтерактивної роботи з базами даних Ingres. Для програмування прикладних інформаційних систем, які повинні взаємодіяти з базами даних, була розроблена мова програмування EQUEL, що є, по суті, розширенням мови програмування Сі шляхом вбудовування в нього операторів мови QUEL. Мова EQUEL визначається таким чином:

Будь-який оператор мови Сі є оператором мови EQUEL. Будь-який оператор мови QUEL, якому передують два знаки '#', є допустимим оператором мови EQUEL. Змінні Сі-програми можуть використовуватися в операторах QUEL, замінюючи імена відносин, імена атрибутів, елементи списку вибірки або константи. Ті змінні Сі-програми, які використовуються таким чином, повинні при своєму оголошенні бути помічені подвійним знаком '#'. Оператор RETRIEVE (без INTO) супроводиться складовим оператором мови Сі, який виконується по одному разу для кожного вибраного кортежу.

Приклад програми на мові EQUEL, що видає номер групи на ім'я студента:

main()

{

## char stud_name[20];

## int group_number;

while (READ(stud_name_)

{

## RANGE OF S IS STUDENTS

## RETRIEVE (group_number = G.GROUP.NUMBER)

## WHERE (S.STUD_NAME = stud_name)

{

PRINT ("The group number of 'stud_name' is 'group_number');

}

}

}

Програма на мові EQUEL обробляється спеціальним препроцесором, який перетворює її в звичайну Сі-програму, що містить виклики Ingres з передачею як параметри текстів операторів мови QUEL. Подальшу схему ми вже обговорювали.

8.5. Загальний підхід до організації уявлень, обмежень цілісності і контролю доступу

Ми об'єднали ці три уявні не дуже близькими теми, тому що в Ingres для розв'язання відповідних проблем застосовується єдиний підхід, заснований на модифікації операторів SQL. Почнемо з уявлень. Як і в System R (точніше, в мові SQL), представлення бази даних - це деякий іменований запит з іменованими полями результуючого відношення.

Наприклад, оператор

DEFINE VIEW GROUP310

(STUD_NUMBER = S.STUD_NUMBER,

STUD_NAME = S.STUD_NAME,

STUD_STATUS = S.STUD_STATUS)

WHERE (S.GROUP_NUMBER = 310)

визначає відношення, що представляється, що включає номери студентських квитків і імена студентів з групи 310.

Передбачимо, що ми хочемо тепер знайти неуспішних студентів у відношенні GROUP310:

RANGE OF G310 IS GROUP310

RETRIEVE (G310.STUD_NAME)

WHERE (G310.STUD_STATUS = "NO")

Тоді після модифікації цей запит буде виглядати таким чином:

RETRIEVE (STUD_NUMBER = S.STUD_NUMBER, STUD_NAME =

S.STUD_NAME, STUD_STATUS = S.STUD_STATUS)

WHERE (S.GROUP_NUMBER = 310 AND

S.STUD_STATUS = "NO")

На тих же самих принципах побудований контроль доступу до даних і контроль цілісності баз даних. Наприклад, обмеження доступу до відношення СТУДЕНТИ може бути визначено таким чином:

DEFINE PERMIT RETRIEVE, REPLACE

ON S

TO PETROV

AT TTA5

FROM 9:00 TO 15:00

ON MON TO FRI

WHERE (S.GROUP_NUMBER = 310)

Це означає, що Петрову дозволяється читати і модифікувати відношення СТУДЕНТИ з термінала TTA5 у час від 9 до 15:00 в робочі дні тижня, причому тільки ті кортежі, які задовольняють сформульованій умові. При компіляції будь-якого оператора QUEL над відношенням СТУДЕНТИ цей оператор буде модифікуватися таким чином, щоб він був виконаний при виконанні умов хоч би одного з обмежень доступу.

Аналогічно, якщо для відношення СТУДЕНТИ визначено обмеження цілісності

DEFINE INTEGRITY

ON S

WHERE (S.STUD_STIP < 150,000)

то до умови будь-якого оператора зміни кортежів відношення СТУДЕНТИ буде через AND додаватися умови всіх обмежень цілісності, визначених для цього відношення.

На закінчення цієї лекції помітимо, що звичайно, в Ingres підтримується механізм паралельних транзакцій з відповідною синхронізацій доступу і журналізація змін баз даних. Однак нам не відомі які-небудь особливості механізмів, що застосовуються. На особливостях оптимізації операторів QUEL ми зупинимося в лекції, присвяченій оптимізаціям в мовах баз даних.


Сторінки: 1 2 3