Шпора. Первая нормальная форма
![]()
|
Первая нормальная форма Соединение находится в первой нормальной форме тогда и только тогда, когда в любом его отношении каждый его кортеж содержит только одно значение для каждого из атрибутов (т.е. "в ячейках нет списков"). Кроме того, все отношения соответствуют реляционной модели данных, т.е. в таблицах: - порядок строк не несет никакой информации; - порядок столбцов не несет никакой информации; - нет повторяющихся строк; - каждое пересечение строки и столбца содержит ровно одно значение из соответствующего домена (атомарность, по сути, требование 1НФ); - в таблице нет скрытых или служебных столбцов. Вторая нормальная форма Соединение (или отношение) находится во второй нормальной форме тогда и только тогда, когда оно находится в первой нормальной форме и каждый неключевой атрибут неприводимо зависит от потенциального ключа, т.е. в составе потенциального ключа отсутствует меньшее подмножество атрибутов, от которого можно также вывести (данную) функциональную зависимость. (т.е. нет атрибутов зависящих от части кого-либо потенциального ключа) Третья нормальная форма Соединение (или отношение) находится в третьей нормальной форме тогда и только тогда, когда оно находится во второй нормальной форме, и ни один неключевой атрибут отношения не находится в транзитивной функциональной зависимости от его потенциального ключа. (т.е. нет неключевых атрибутов, зависящих от любого потенциального ключа через другие неключевые атрибуты) Транзитивная функциональная зависимость: A->B И B->C Нормальная форма Бойса-Кодда (НФБК) Соединение (или отношение) находится в нормальной форме Бойса — Кодда тогда и только тогда, когда (оно находится в третьей нормальной форме и) каждая нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ. (отличается от 3НФ при наличии пересекающихся потенциальных ключей внутри одного отношения) Тривиальная ФЗ: A->B и B->A или {A,B} -> A Приводимая слева ФЗ: {A,C}->B -> (A->B) Четвертая нормальная форма Соединение (или отношение) находится в четвертой нормальной форме, если оно находится в НФБК и все нетривиальные многозначные зависимости являются функциональными зависимостями от потенциальных ключей. (т.е. не нужно менять несколько значений при изменении одного) Многозначная зависимость: A->>B {A,C}->B и A->B и не С->B (т.е. связь "ко многим") Тривиальная МЗ: B включенное подмножество A или С = Ø Пятая нормальная форма Соединение находится в пятой нормальной форме (иначе — в проекционно-соединительной нормальной форме) тогда и только тогда, когда (оно находится в 4НФ и) каждая нетривиальная зависимость в ней определяется потенциальным ключом (ключами). (т.е. невозможны коллизии, независящие от ограничений на значения атрибутов и их сочетаний) Доменно-ключевая нормальная форма (ДКНФ) Соединение находится в ДКНФ тогда и только тогда, когда оно находится в 5НФ, и каждое наложенное на ограничение является логическим следствием ограничений доменов и ограничений ключей. Шестая нормальная форма Соединение находится в шестой нормальной форме тогда и только тогда, когда оно удовлетворяет всем нетривиальным зависимостям. Из определения следует, что соединение находится в 6НФ тогда и только тогда, когда оно неприводимо, то есть не может быть подвергнуто дальнейшей декомпозиции без потерь. Нормальные формы (резюме) Каждая нормальная форма ограничивает определенный тип ФЗ и устраняет аномалии обработки данных. Нормальные формы характеризуются следующими свойствами: 1НФ - все атрибуты простые; 2НФ - 1НФ и нет ФЗ от части ключа; 3НФ - 2НФ и нет транзитивных ФЗ от ключа; НФБК - 3НФ и нет ФЗ от неключевых атрибутов; 4НФ - НФБК и нет нетривиальных МФЗ от неключей; 5НФ - 4НФ и нет никаких нетривиальных ФЗ по соединению. ДКНФ - 5НФ и все ограничения определяются ограничениями доменов. 6НФ - полная нормализация. 1НФ >= 2НФ >= 3НФ >= НФБК >= 4НФ >= 5НФ >= ДКНФ >= 6НФ SQL Создание таблицы Синтаксис CREATE TABLE имя_таблицы ( имя_столбца тип_данных [NULL NOT NULL n] ) Примеры CREATE TABLE Товар ( Название VARCHAR(50) NOT NULL, Цена MONEY NOT NULL, Тип VARCHAR(50) NOT NULL, Сорт VARCHAR(50), ГородТовара VARCHAR(50) ) CREATE TABLE R (a 1 CHAR(1), a2 INT, PRIMARY KEY(a 1 ,a 2)) SQL Изменение таблицы Синтаксис ALTER TABLE имя_таблицы { [ADD[COLUMN] имя_столбца тип_данных [NULL | NOT NULL]] | [DROP[COLUMN] имя_столбца] } Пример ALTER TABLE Клиент ADD Рас_счет CHAR(20) SQL Удаление таблицы Синтаксис DROP TABLE имя_таблицы [RESTRICT CASCADE] SQL Создание индекса CREATE [UNIQUE] INDEX имя_индекса ON имя_таблицы ( имя_столбца [ASC|DESC][,….n] ) SQL Удаление индекса DROP INDEX имя_индекса Средства языка SQL предлагают несколько способов определения индекса -автоматическое создание индекса при создании первичного ключа; -автоматическое создание индекса при определении ограничения целостности UNIQUE - создание индекса с помощью команды CREATE INDEX. SQL Оператор SELECT SELECT [ALL DISTINCT ]]{*|[имя_столбца [AS новое_имя]]} [,……n] FROM имя_таблицы [[AS] псевдоним] [,……n] [WHERE <условие_поиска>] [GROUP BY имя_столбца [,……n] [HAVING <критерии выбора групп>] [ORDER BY имя_столбца n]] Предложение FROM задает имена таблиц и представлений, которые содержат поля, перечисленные в операторе SELECT Псевдоним - необязательный параметр, сокращение, для имени таблицы Обработка элементов оператора SELECT выполняется в следующей последовательности: SELECT устанавливает, какие столбцы должны присутствовать в выходных данных FROM определяются имена используемых таблиц; WHERE выполняется фильтрация строк объекта в соответствии с заданными условиями GROUP BY образуются группы строк, имеющих одно и то же значение в указанном столбце группировка HAVING фильтруются группы строк объекта в соответствии с указанным условием выборка после группировки ORDER BY определяется упорядоченность результатов выполнения операторов SQL Агрегатные функции Count(Выражение) - определяет количество записей в выходном наборе SQL запроса Min/Max(Выражение) - определяют наименьшее и наибольшее из множества значений в некотором поле запроса Avg (Выражение) - эта функция позволяет рассчитать среднее значение множества значений, хранящихся в определенном поле отобранных запросом записей. Является арифметическим средним значением, т е суммой значений, деленной на их количество Sum(Выражение) - вычисляет сумму множества значений, содержащихся в определенном поле отобранных запросом записей SQL Группировка Примеры SELECT Клиент.Фамилия, Avg(Сделка.Количество) AS Среднее_количество FROM Клиент INNER JOIN Сделка ON Клиент.КодКлиента=Сделка.КодКлиента GROUP BY Клиент Фамилия SELECT Клиент.Фирма, Sum(Сделка.Количество) AS Общее_Количество, Sum(Товар.Цена*Сделка.Количество) AS Стоимость FROM Товар INNER JOIN ( Клиент INNER JOIN Сделка ON Клиент.КодКлиента=Сделка.КодКлиента ) ON Товар.КодТовара=Сделка.КодТовара GROUP BY Клиент Фирма SQL Группировка с условием Условия в HAVING отличаются от условий в WHERE: HAVING исключает из результирующего набора данных группы с результатами агрегированных значений; WHERE исключает из расчета агрегатных значений по группировке записи, не удовлетворяющие условию; в условии поиска WHERE нельзя задавать агрегатные функции. Пример. Определить фирмы, у которых общее количество сделок превысило три: SELECT Клиент.Фирма, Count(Сделка.Количество) AS Количество_сделок FROM Клиент INNER JOIN Сделка ON Клиент.КодКлиента=Сделка.КодКлиента GROUP BY Клиент.Фирма HAVING Count(Сделка.Количество)>3 SQL Добавление данных Синтаксис INSERT INTO <имя_таблицы> [(имя_столбца [,……n])] {VALUES (значение [,……n]) | - количество элементов в обоих списках должно быть одинаковым; - должно существовать прямое соответствие между позицией одного и того же элемента в обоих списках, поэтому первый элемент списка значений должен относиться к первому столбцу в списке столбцов, второй ко второму столбцу и т д - типы данных элементов в списке значений должны быть совместимы с типами данных соответствующих столбцов таблицы. Пример INSERT INTO Товар ( Название, Тип, Цена) VALUES("Славянский", "шоколад" , 12) SQL Удаление данных Пример/ Удалить все прошлогодние сделки DELETE FROM Сделка WHERE Year(Сделка.Дата) = Year(GETDATE()) -1 SQL Модификация данных Синтаксис UPDATE имя_таблицы SET имя_столбца = <выражение> [,……n] [WHERE <условие_отбора>] Увеличить цену товаров первого сорта на 25% UPDATE Товар SET Товар.Цена =Товар.Цена*1.25 WHERE Товар.Сорт = "Первый" Диаграмма «Сущность – связь» --- - может (модальность) __ - должен (модальность) Модальность "может" означает, что экземпляр одной сущности может быть связан с одним или несколькими экземплярами другой сущности, а может быть и не связан ни с одним экземпляром. Модальность "должен" означает, что экземпляр одной сущности обязан быть связан не менее чем с одним экземпляром другой сущности. SQL. Состав, назначение, достоинства и недостатки Язык SQL предназначен для манипулирования данными в реляционных базах данных, определения структуры баз данных и для управления правами доступа к данным в многопользовательской среде. Поэтому, в язык SQL в качестве составных частей входят: язык манипулирования данными (Data Manipulation Language, DML) язык определения данных (Data Definition Language, DDL) язык управления данными (Data Control Language, DCL). Подчеркнем, что это не отдельные языки, а различные команды одного языка. Достоинства языка: Стандартность, независимость от конкретных СУБД, возможность переноса с одной вычислительной системы на другую, возможность программного доступа к БД Недостатки: Сложность Отступления от стандартов Вложенные запросы Вложенный запрос – это запрос, который находится внутри другого SQL запроса и встроен внутри условного оператора WHERE. Данный вид запросов используется для возвращения данных, которые будут использоваться в основном запросе, как условие для ограничения получаемых данных. Вложенные запросы должны следовать следующим правилам: Вложенный запрос должен быть заключён в родительский запрос. Вложенный запрос может содержать только одну колонку в операторе SELECT. Оператор ORDER BY не может быть использован во вложенном запросе. Для обеспечения функционала ORDER BY, во вложенном запросе может быть использован GROUP BY. Вложенные запросы, возвращающие более одной записи могут использоваться с операторами нескольких значений, как оператор IN. Вложенный запрос не может заканчиваться в функции. SQL - Оператор IN Оператор IN позволяет указать несколько значений в предложении WHERE. Он является сокращением для нескольких условий OR. SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, ...); SQL - Оператор EXISTS Оператор EXISTS используется для проверки существования любой записи в подзапросе. Если подзапрос возвращает одну или несколько записей, то возвращается true. SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition); SQL - Операторы ANY и ALL Операторы ANY и ALL используются с предложением WHERE или HAVING. Оператор ANY возвращает true, если какое-либо из значений подзапроса соответствует условию. Оператор ALL возвращает true, если все значения подзапроса удовлетворяют условию. SELECT column_name(s) FROM table_name WHERE column_name operator ANY|ALL (SELECT column_name FROM table_name WHERE condition); Операторы JOIN, UNION, INTERSECT, EXCEPT SQL - Оператор UNION Оператор UNION используется для объединения результирующего набора из двух или более операторов SELECT. Каждый оператор SELECT в UNION должен иметь одинаковое количество столбцов. Столбцы также должны иметь похожие типы данных и в каждой инструкции SELECT быть в том же порядке. SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; SQL – Оператор JOIN JOIN предназначен для соединения двух или более таблиц базы данных по совпадающему условию. Этот оператор существует только в реляционных базах данных SELECT ИМЕНА_СТОЛБЦОВ (1..N) FROM ИМЯ_ТАБЛИЦЫ_1 JOIN ИМЯ_ТАБЛИЦЫ_2 ON УСЛОВИЕ SQL – Оператор INTERSECT и EXCEPT Эти операторы возвращают различные строки, сравнивая результаты двух запросов. Оператор EXCEPT возвращает уникальные строки из левого входного запроса, которые не выводятся правым входным запросом. Оператор INTERSECT возвращает уникальные строки, выводимые левым и правым входными запросами. |