Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы Данных_all.doc
Скачиваний:
20
Добавлен:
20.02.2016
Размер:
1.76 Mб
Скачать

Реляционное исчисление доменов

В исчислении доменов областью определения переменных являются не отношения, а домены. Применительно к базе данных СОТРУДНИКИ-ОТДЕЛЫ можно говорить, например, о доменных переменных ИМЯ (значения - допустимые имена) или НОСОТР (значения - допустимые номера сотрудников).

Основным формальным отличием исчисления доменов от исчисления кортежей является наличие дополнительного набора предикатов, позволяющих выражать так называемые условия членства. Если R - это n-арное отношение с атрибутами a1, a2, ..., an, то условие членства имеет вид

R (ai1:vi1, ai2:vi2, ..., aim:vim) (m <= n),

где vij - это либо литерально задаваемая константа, либо имя кортежной переменной. Условие членства принимает значение true в том и только в том случае, если в отношении R существует кортеж, содержащий указанные значения указанных атрибутов. Если vij - константа, то на атрибут aij задается жесткое условие, не зависящее от текущих значений доменных переменных; если же vij - имя доменной переменной, то условие членства может принимать разные значения при разных значениях этой переменной.

Во всех остальных отношениях формулы и выражения исчисления доменов выглядят похожими на формулы и выражения исчисления кортежей. В частности, конечно, различаются свободные и связанные вхождения доменных переменных.

Реляционное исчисление доменов является основой большинства языков запросов, основанных на использовании форм. В частности, на этом исчислении базировался известный язык Query-by-Example, который был первым (и наиболее интересным) языком в семействе языков, основанных на табличных формах.

Лекция 7

Создание и модификация баз данных при помощи SQL.

Цель: создать и модифицировать базу данных использую SQL.

Ключевые слова: операторы управления правами доступа, операторы создания таблиц, операторы модификации таблиц, представления.

Литература.[1, 119-149, 943-1027, 1027-1058; 4, 154-208; 5, 71-81]

Оператори управління правами доступу. З точки зору безпеки не кожному користувачеві прикладної системи може бути дозволено одержувати інформацію з якої-небудь таблиці, а тим більше змінювати в ній дані. Для визначення прав користувачів щодо об'єктів бази даних (таблиці, представлення, індекси) у SQL визначена пара команд GRANT і REVOKE. Синтаксис операції передачі прав на таблицю:

GRANT <тип_права_на_таблицю>

ON <ім'я_таблиці> [<список_стовпців>]

TO <ім'я_користувача>

Права користувача на рівні таблиці визначаються наступними ключовими словами (ці ключові слова збігаються з командами вибірки і зміни даних):

SELECT – отримання інформації з таблиці;

UPDATE – зміна інформації в таблиці;

INSERT – додавання записів у таблицю;

DELETE – видалення записів з таблиці;

INDEX – індексування таблиці;

ALTER – зміна схеми визначення таблиці;

ALL – усі права.

У полі <тип_права_на_таблицю> може бути зазначене або ключове слово ALL або будь-яка комбінація інших ключових слів. Більшість систем підтримують також команду GRANT для призначення привілеїв на базу даних у цілому.

У якості навчальної рекомендується вибрати вільно розповсюджувані СУБД – MySQL, PostgreSQL, – і вивчати мову SQL стосовно до цієї СУБД.

У SQL визначені дві підмножини мови:

SQL-DDL (Data Definition Language) – мова визначення структур і обмежень цілісності баз даних. Сюди відносяться команди створення і видалення баз даних; створення, зміни і видалення таблиць; управління користувачами і т. д.;

SQL-DML (Data Manipulation Language) – мова маніпулювання даними: додавання, зміна, видалення і вибірка даних, управління транзакціями.

SQL-запити. Синтаксис запитів заснований на стандартному SQL і має свої особливості в різних реалізаціях СУБД. Умовно можна провести наступний поділ: SQL-DDL – привілей адміністраторів і розроблювачів БД, SQL-DML знаходиться в сфері інтересів звичайного користувача і прикладного програміста. Розглянемо коротко деякі важливі конструкції SQL.

Створення і модифікація БД.

Створення таблиці:

CREATE TABLE <ім'я_таблиці>

(<ім'я_стовпця> <тип_стовпця>

[NOT NULL]

[UNIQUE | PRIMARY KEY]

[REFERENCES <ім'я_майстер_таблиці> [<ім'я_стовпця>]]

,...)

Користувач зобов'язаний вказати ім'я таблиці і список стовпців. Для кожного стовпця обов'язково вказуються його ім'я і тип, а також опціонально можуть бути зазначені параметри:

  • NOT NULL – у цьому випадку елементи стовпця завжди повинні мати визначене значення (не NULL);

  • один із взаємовиключних параметрів UNIQUE – значення кожного елемента стовпця повинне бути унікальним або PRIMARY KEY;

  • стовпець є первинним ключем;

  • REFERNECES <ім'я_майстер_таблиці> [<ім'я_стовпця>] – ця конструкція визначає, що даний стовпець є зовнішнім ключем і вказує на ключ якої майстер_таблиці він посилається. Контроль за виконанням зазначених умов здійснює СУБД.

Приклад: створення бази даних і таблиць:

CREATE DATABASE publications;

CREATE TABLE authors (au_id INT PRIMARY KEY, author VARCHAR (25) NOT NULL);

CREATE TABLE wwwsites (site_id INT PRIMARY KEY, site VARCHAR (255) NOT NULL, url VARCHAR (255));

CREATE TABLE wwwsiteauthors (au_id INT REFERENCES authors (au_id), site_id INT REFERENCES wwwsites (site_id));

Видалення таблиці: DROP TABLE <ім'я_таблиці>

Модифікація таблиці.

Додати стовпці:

ALTER TABLE <ім'я_таблиці> ADD

(<ім'я_стовпця> <тип_стовпця>

[NOT NULL]

[UNIQUE | PRIMARY KEY]

[REFERENCES <ім'я_майстер_таблиці> [<ім'я_стовпця>]]

,…)...

Видалити стовпці:

ALTER TABLE <ім'я_таблиці> DROP (<ім'я_стовпця>,…)

Зміна типу стовпця:

ALTER TABLE <ім'я_таблиці> MODIFY

(<ім'я_стовпця> <тип_стовпця>

[NOT NULL]

[UNIQUE | PRIMARY KEY]

[REFERENCES <ім'я_майстер_таблиці> <ім'я_стовпця>]]

,…)

Створення індексу:

CREATE [UNIQUE] INDEX <ім'я_індексу> ON <ім'я_таблиці> (<ім'я_стовпця>,…)

Ця команда створює індекс із заданим ім'ям для таблиці <ім'я_таблиці> по стовпцях, що входить у список, зазначений у дужках. Індекс часто представляє із себе структуру типу B-дерева. Створення індексів значно прискорює роботу з таблицями. У випадку вказівки необов'язкового параметра UNIQUE СУБД буде перевіряти кожне значення індексу на унікальність. Дуже часто встає питання, які поля необхідно індексувати. Обов'язково треба будувати індекси для первинних ключів, оскільки по їх значеннях здійснюється доступ до даних при операціях з'єднання двох і більш таблиць. Також у відповіді на це питання допоможе аналіз найбільш частих запитів до бази даних.

Видалення індексу: DROP INDEX <ім'я_індексу>

Представлення. Дотепер ми говорили про таблиці, що реально зберігаються в базі даних. Це, так звані, базові таблиці (base tables). Існує інший вид таблиць, що одержав назву “представлення” (іноді них називають“ таблиці, що представляються”). Нагадаємо, що представлення (view) – це таблиця, вміст якої береться з інших таблиць за допомогою запиту. При цьому нові копії даних не створюються. Коли вміст базових таблиць міняється, СУБД автоматично перевиконує запити, що створюють view, що приводить до відповідних змін у представленнях. Представлення визначається за допомогою команди

CREATE VIEW <ім'я_представлення> [<ім'я_стовпця>,…]

AS<запит>

При цьому повинні дотримуватися наступні обмеження:

– представлення повинне базуватися на єдиному запиті (UNION не припустиме)

  • вихідні дані запиту, що формує представлення, повинні бути не упорядковані (ORDER BY не припустимо)

Лекция 8

Структура базы данных. Структурированный язык запросов (SQL). Проектирование баз данных

Цель: создать структуру базы данных, создать базу данных.

Ключевые слова: проектирование базы данных, объекты, данные, взаимосвязи, отношения 1:1, 1:N, N:N, первичный ключ; первая, вторая и третья нормальная форма.

Литература.[1, 119-149, 943-1027, 1027-1058; 4, 154-208; 5, 71-81]