Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
theory-2009-2010.docx
Скачиваний:
4
Добавлен:
05.09.2019
Размер:
5.41 Mб
Скачать

1. Інформаційні технології та інформаційні системи

9. Класифікація запитів

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

А ( O ) = V,

де А - ім'я атрибута або властивості, відносно якої формується запит, O - специфікація об'єкта запиту, V - значення, яке може набути атрибут об'єкта; замість знака "=" може бути використаний будь-який із знаків бінарних предикатів, що визначені для значень даної властивості об'єкта, наприклад: {<, >, =>, ...}.

Прості запити можна отримати з найпростіших (а також і простих) за допомогою логічних зв'язок ("або", "і", "ні"). Для побудови складних типів запитів необхідне використання кванторів існування та узагальнення.

Спочатку зробимо класифікацію найпростіших запитів. Для цього використаємо основну форму A(E) Q V, де Q = { }, A – атрибут, V –значення, Q – бінарний предикат, E – сам об’єкт, ключ.

Для прикладів використаємо таку модель: нехай є кілька кіосків, і в кожному місяці вони мають певний прибуток.

  • A – номер місяця.

  • E – номер кіоску.

  • V – значення прибутку кіоску за певний місяць (на перетині № кіоску і № місяця).

Прямий запит

A(E) = ? – відомий атрибут, відомий ключ. “Який прибуток був у кіоску №7 у березні?”. Результат – одне значення.

Інвертований запит

A(?) = V – відомий атрибут і відоме значення. “Знайти номери кіосків, у яких у березні був прибуток 8 тисяч”. Результат – множина.

?(E) = V. “У якому місяці кіоск №17 мав прибуток 8 тисяч?”. Результат – множина.

?(E) = ? (річний звіт). “Видати інформацію за рік по кіоску №17”.

A(?) = ?. “Видати інформацію по всім кіоскам за березень”.

?(?) = V. “Видати інформацію про кіоски і місяці з прибутком 8 тисяч”.

?(?) = ?. Повна інформація про все.

З найпростіших запитів формуються прості та складні запити. Прості запити – це найпростіші, що з’єднанні логічними зв’язками { }. Складні запити – це найпростіші, що з’єднанні зв’язками { }.

Більш формально:

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

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

При складних запитах використовується деякий еквівалент квантору “для всіх”, який використовується для узагальнення простих запитів.

1. Інформаційні технології та інформаційні системи

10. Реляційна модель Кодда. Реляційна алгебра

12 правил Кодда. Ці правила є напів-офіційним визначенням поняття реляційна база даних:

  • правило 0: Основное правило (Foundation Rule): Реляционная СУБД должна быть способна полностью управлять базой данных, используя связи между данными.:

  • правило 1: Явное представление данных. Информация должна быть представлена в виде данных, хранящихся в ячейках. Данные, хранящиеся в ячейках, должны быть атомарны. Порядок строк в реляционной таблице не должен влиять на смысл данных.

  • правило 2: Гарантированный доступ к данным. Доступ к данным должен быть свободен от двусмысленности. К каждому элементу данных должен быть гарантирован доступ с помощью комбинации имени таблицы, первичного ключа строки и имени столбца.

  • правило 3: Полная обработка неизвестных значений: Неизвестные значения NULL, отличные от любого известного значения, должны поддерживаться для всех типов данных при выполнении любых операций.

  • правило 4: Доступ к словарю данных в терминах реляционной модели. Словарь данных должен сохраняться в форме реляционных таблиц, и СУБД должна поддерживать доступ к нему при помощи стандартных языковых средств.

  • правило 5: Полнота подмножества языка: Система управления реляционными базами данных должна поддерживать хотя бы один реляционный язык, который

    • (а) имеет линейный синтаксис,

    • (б) может использоваться как интерактивно, так и в прикладных программах,

    • (в) поддерживает операции определения данных, определения представлений, манипулирования данными (интерактивные и программные), ограничители целостности, управления доступом и операции управления транзакциями (begin, commit и rollback).

  • правило 6: Возможность модификации представлений: Каждое представление должно поддерживать операции манипулирования данными: операции выборки, вставки, модификации и удаления данных.

  • правило 7: Наличие высокоуровневых операций управления данными. Операции вставки, модификации и удаления данных должны поддерживаться не только по отношению к одной строке реляционной таблицы, но по отношению к любому множеству строк.

  • правило 8: Физическая независимость данных: Приложения не должны зависеть от способов хранения данных, аппаратного обеспечения компьютеров, на которых находится реляционная база данных.

  • правило 9: Логическая независимость данных: Представление данных в приложении не должно зависеть от структуры реляционных таблиц.

  • правило 10: Независимость контроля целостности: Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных.

  • правило 11: Дистрибутивная независимость: База данных может быть распределённой, может находиться на нескольких компьютерах, и это не должно оказывать влияние на приложения..

  • правило 12: Согласование языковых уровней: Если используется низкоуровневый язык доступа к данным, он не должен игнорировать правила безопасности и правила целостности, которые поддерживаются языком более высокого уровня.

Теоретичні основи реляційної моделі баз даних були закладені Е.Коддом на початку 70-х років Введемо поняття реляції.

Нехай V – основний алфавіт, тобто деяка скінченна множина.  - деякий виділений елемент;   V.

Позначимо через D1, D2, … Dn  V* ; де V* - множина всіх слів в алфавіті V.

Домени визначаються як Di = Di  {};

Множину імен атрибутів позначимо  . І введемо однозначне, але не обов’язково ін’єктивне відображення N:   {D1, D2, … Dn}, яке іменує домени. Кожен домен може мати кілька імен, позначимо і = N-1(Dі) – множину всіх імен домена Dі. Очевидно, що ці множини мають такі властивості: і j = ; (i=1 n) і = ;

Атрибутом називається (А,Dі) – де А  і ,

Нехай   (Аі1,D1)(Аі2,D2)…(Аік,Dк) – відношення над декартовим добутком атрибутів. Введемо над множиною так визначених відношень розбиття на класи еквівалентності: до одного класу віднесемо ті відношення, які відрізняються тільки порядком компонент у декартовому добутку. Представник такого класу називається реляцією R((Аі1,D1),(Аі2,D2),…,(Аік,Dк)).

Схемою реляції R(А12,…,Ак) називають відповідну реляційну таблицю без даних. ЧерезR будемо позначати множину імен атрибутів реляції R.

Реляційна алгебра – алгебра в строгому розумінні. Елементи основної множини – реляції.

Сигнатура складається з 8-ми операцій.

Теоретико-множинні операції ,,\ – частково визначені (визначені тільки для сумісних реляцій з однаковою структурою).

Реляції R1(A1, … , An) і R2(B1, … , Bk) називаються сумісними, якщо у них однакова кількість атрибутів; та кожному атрибуту першої реляції можна поставити у взаємно однозначну відповідність атрибут другої реляції.

Об’єднання. R1R2: в результуючу реляцію попадають всі кортежі першої і другої реляції без дублів.

Перетин. R1R2: в результуючу реляцію попадають кортежі, присутні і в першій, і в другій реляції.

Різниця. R1\R2: в результуючу реляцію попадають кортежі з R1, яких немає в R2.

Декартів добуток. R1R2 – визначається для будь-яких реляцій.

R1R2 = {(r1, … , rk, rk+1, … , rk+n) | (r1, … , rk) R1, (rk+1, … , rk+n) R2}.

Ця операція може різко збільшити об’єм результату.

Проекція. Реляція S(B1, … , Bn) узгоджена з R(A1, … , Ak), якщо  f : S R, N(f(Bi)) = N(Ai), i = 1  n.

Відображення f однозначне, але, взагалі кажучи, не взаємно однозначне.

Проекцією реляції R на схему S відносно узгодження f будемо називати реляцію

T = R[S] таку, що: T = {(r[Ai1], r[Ai2], … , r[Ain])} та T = R[Ai1, Ai2, … , Ain,]

Операція - з’єднання ( - join).

Введемо поняття  - порівнюваності для кортежів.

На двох реляціях R(A1, … , Ak) і S(B1, … , Bn) візьмемо відповідно два підкортежі:

r1 = (d1, d2, … , dm), r2 = (d1|, d2|, … , dm|);

Нехай  = {=, , <, , >, , …}; Два кортежі r1 і r2 - порівнювані:

r1r2  di  di|, i = 1,m; (m  k, m  n);

Нехай в реляції R виділений список атрибутів M1 = {A1, … , Am}, а в реляції S список атрибутів M2 = {B1, … , Bm}, причому відповідні атрибути співпадають по доменам, тобто N(Ai) = N(Bi), i = 1,m;

Операція  - з’єднання реляції R з реляцією S по спискам M1 і M2 : R[M1  M2]S = {t  R  S | t[M1]  t[M2]}.

Операція - обмеження.

Нехай задана реляція R(R), де R - множина імен атрибутів;

M1 = {A1, … , Am} R; і

M2 = {B1, … , Bm} R - списки атрибутів з властивістю N(Ai) = N(Bi); i = 1,m;

 - обмеження реляції R по спискам M1 і M2 : R[M1  M2] = {r | (r R) &(r[M1]  r[M2])}.

Операція ділення.

Нехай задана реляція R(A1, … , Ak) і два взаємнодоповнюючі списки атрибутів

M1 = {A1, … , An}; M2 = {An+1, … , Ak}

Нехай є С1 = D1…Dn; С2 = Dn+1…Dk; де Di = N(Ai), i = 1,k;

Якщо візьмемо деякий елемент x  С1, то образом x по реляції R буде називатись множина підкортежів :

imRx = {y  С2 | (x, y)  R}

Розглянемо реляції R(R), S(S) і списки атрибутів {A1, … , An}R ; {B1, … , Bn}S;

Необхідно, щоб реляції R[A1, … , An] і S[B1, … , Bn] були сумісними, тоді операція R[A B]S називається діленням R на S по спискам {A1, … , An} і {B1, … , Bn}

Результатом є множина підкортежів по атрибутам, що доповнюють список {A1, … , An}.

R[A B]S = {r[An+1, … , Ak] | (r R) & (S[B1, … , Bn]  imR(r[An+1, … , Ak]))}

Приклад використання операції ділення.

Нехай задана таблиця R з двома атрибутами (мова програмування і прізвище програміста, який цією мовою володіє)

Знайти прізвища програмістів, які знають мови А і Ф одночасно. Для виконання такого запиту утворимо допоміжну реляцію S з одним атрибутом і двома кортежами з відповідними значеннями кодів мов програмування {А,Ф}.

R[мова мв]S

R

Мова

Прізв

S

мв

 

А

І

 

А

А

П

 

Ф

ПЛ

С

Ф

Ф

Ф

І

Ф

С

ПЛ

П

П

Ф

П

І

Образом І буде {А, Ф, П}, що є надмножиною відносно{А, Ф}, тому І проходить у результуючу таблицю; а П, С, Ф – не проходять у результуючу таблицю, бо їх образи не накривають {А, Ф}. Це означає, що програміст І знає мови {А,Ф} (можливо ще щось), а інші не знають цих мов одночасно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]