Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
52.7 Кб
Скачать

Приведение к третьей нормальной форме:

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

Отношение находится в нормальной форме Бойса-Кодда(БКНФ), если оно находится в третьей н.ф. и внем отсутствуют зависимости ключей или их частей от неключевых атрибутов.

  1. Представление операций реляционной алгебры средствами языка sql.

  • Объединение

SELECT * FROM R1 UNION SELECT * FROM R2;

  • Пересечение

SELECT * FROM R1 INTERSECT SELECT * FROM R2;

или

SELECT DISTINCT *

FROM R1

WHERE EXISTS

(SELECT DISTINCT R2.#A

FROM R2

WHERE R1.A1 = R2.A2

AND … AND

R1.An = R2.An);

  • Разность

SELECT * FROM R1 EXCEPT SELECT * FROM R2;

или

SELECT DISTINCT *

FROM R1

WHERE NOT EXISTS

(SELECT DISTINCT R2.#A

FROM R2

WHERE R1.A1 = R2.A2

AND … AND

R1.An = R2.An);

  • Декартово произведение

SELECT R1.Attr1,… , R1.AttrN, R2.Attr1, … , R2.AttrM

FROM R1, R2;

или

SELECT R1.Attr1,… , R1.AttrN, R2.Attr1, … , R2.AttrM

FROM R1 CROSS JOIN R2;

  • Проекция

SELECT DISTINCT Attr2, Attr5, …,AttrN FROM R1;

  • Ограничение

SELECT * FROM R1 WHERE Булевское выражение;

  • Соединение

SELECT R1.Attr1,… , R1.AttrN, R2.Attr1, … , R2.AttrM

FROM R1, R2 WHERE Булевское выражение;

или

SELECT R1.Attr1,… , R1.AttrN, R2.Attr1, … , R2.AttrM

FROM R1 CROSS JOIN R2 WHERE Булевскоевыражение;

  1. Структура языка sql. Оператор select. Типы соединений таблиц.

В упрощенном виде оператор SELECT языка SQL имеет следующую структуру:

SELECT [TOP число] [DISTINCT | DISTINCTROW | ALL] выражение_select,...

[FROM ссылка_на_таблицу | выражение_JOIN | (подзапрос)]

[WHERE условное выражение]

[GROUP BY {unsigned_integer | имя столбца| формула}]

[HAVING условное выражение]

[ORDER BY {unsigned_integer | имя столбца| формула} [ASC | DESC], ...]

Здесь:

  • WHERE – используется для определения, какие строки должны быть выбраны или включены в GROUP BY.

  • GROUP BY – используется для группирования строк по совпадающим значеним в меньший набор строк.

  • HAVING – используется для определения, какие строки после GROUP BY должны быть выбраны.

  • ORDER BY – используется для определения, какие столбцы используются для сортировки результирующего набора данных.

Условное выражение оператора WHERE можно определить в форме грамматики:

Условное_выражение ::= условное_выражение [(AND | OR) условное_выражение | Предикат_сравнения | Предикат_between | Предикат_in | Предикат_like | Предикат_null | Предикат_количественного_сравнения | Предикат_exist | Предикат_unique | Предикат_match | Предика_overlaps

В простейшем смысле оператор SELECT выполняется в следующем порядке:

  1. Выполнение одиночных операторов SELECT в следующем внутреннем порядке: FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> (пара ORDER BY и TOP). Причем, если одновременно присутствует несколько подзапросов то они выполняются независимо: параллельно – для UNION, EXCEPT и INTERSECT, в порядке от самого вложенного к внешнему – для простых подзапросов, и наоборот – для коррелированных подзапросов.

  2. Выполнение теоретико-множественных операций UNION, EXCEPT и INTERSECT.

  3. Упорядочивание результата операцией ORDER BY.

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

  1. Синтаксический анализ запроса.

  2. Преобразование в каноническую форму.

  3. Генерация планов выполнения запроса и выбор оптимального плана.

  4. Выполнение алана запроса.

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