
- •Семантическое моделирование данных: er-диаграммы
- •Реляционная модель данных: домены и отношения Общая характеристика реляционной модели данных
- •Типы данных – множество значений, множество операций
- •Простые типы данных
- •Структурированные типы данных
- •Ссылочные типы данных
- •Типы данных, используемые в реляционной модели
- •Отношения, атрибуты, кортежи отношения Определения и примеры
- •Свойства отношений
- •Первая нормальная форма
- •Реляционная модель данных: целостность
- •Целостность в реляционной модели данных
- •Реляционная модель данных: реляционная алгебра
- •Ограничения на операции
- •Соединение
- •Деление
- •Манипулирование реляционными данными
- •Реляционная модель данных: реляционное исчисление кортежей Реляционное исчисление
- •Исчисление кортежей
- •Реляционная алгебра и реляционное исчисление
- •Проектирование реляционных баз данных на основе принципов нормализации: функциональные зависимости
- •Проектирование реляционных баз данных на основе принципов нормализации: 1nf, 2nf, 3nf, bcnf Нормальная форма
- •Роль нормализации в проектировании реляционных баз данных
- •Нормальные формы
- •Первая нормальная форма (1nf)
- •Вторая нормальная форма (2nf)
- •Третья нормальная форма (3nf)
- •Нормальная форма Бойса — Кодда (bcnf)
- •Типы данных Transact-sql Типы данных (Transact-sql)
- •Типы данных
- •Преобразования типа Transact-sql Преобразование типов данных (компонент Database Engine)
- •Скалярные выражения Transact-sql
- •Логические выражения Transact-sql Логические операторы (Transact-sql)
- •Табличные выражения Transact-sql Табличные выражения
- •7.2.1. Предложение from
- •7.2.1.1. Соединённые таблицы
- •7.2.1.2. Псевдонимы таблиц и колонок
- •7.2.1.3. Подзапросы
- •7.2.1.4. Табличные функции
- •7.2.2. Предолжение where
- •7.2.3. Предложения group by и having
- •7.2.4. Обработка оконных функций
- •Обобщенные табличные выражения Transact-sql Применение обобщенных табличных выражений
- •With обобщенное_табличное_выражение (Transact-sql)
- •Рекомендации по созданию и использованию обобщенных табличных выражений
- •Рекомендации по созданию и использованию обобщенных табличных выражений
- •Рекомендации по созданию и использованию рекурсивных отв
- •Инструкции языка управления потоком Transact-sql Язык управления потоком (Transact-sql)
- •Сценарии и пакеты Transact-sql Сценарии языка Transact-sql
- •Инструкции языка описания данных Transact-sql Инструкции языка описания данных ddl (Transact-sql)
- •Инструкции alter (Transact-sql)
- •Инструкции create (Transact-sql)
- •Инструкции drop (Transact-sql)
- •Ограничения целостности Transact-sql
- •Инструкции языка обработки данных Transact-sql
- •Предложение for (Transact-sql)
- •Инструкции языка контроля доступа к данным Transact-sql
- •Хранимые процедуры Transact-sql Хранимые процедуры (компонент Database Engine)
- •Функции Transact-sql Основные сведения о пользовательских функциях
- •Триггеры Transact-sql Триггеры dml
- •Курсоры Transact-sql Курсоры
- •Использование простого курсора и синтаксиса
- •Индексы Transact-sql Индексы
- •Вторичный индекс path типа данных xml
- •Вторичный индекс value типа данных xml
- •Вторичный индекс property
- •Управление транзакциями в sql Server Инструкции транзакций (Transact-sql)
- •Журналирование в sql Server Журнал транзакций (sql Server)
- •Просмотр журнала ошибок sql Server
- •Управление безопасностью в sql Server
- •Массовый импорт и экспорт данных в sql Server Массовый импорт и экспорт данных (sql Server)
- •Методы массового импорта и экспорта данных
- •Файлы форматирования
- •Метаданные в sql Server Метаданные (службы Master Data Services)
- •Распределенные запросы и распределенные транзакции в sql Server Распределенные запросы
- •Распределенные транзакции Transact-sql
- •Распределенные запросы и распределенные транзакции
Проектирование реляционных баз данных на основе принципов нормализации: функциональные зависимости
Функциональная зависимость - это связь типа многие к одному между двумя множествами атрибутов заданной переменной-отнощения. Для заданной переменной-отнощения R зависимость А -> В (где А и В являются подмножествами множества атрибутов переменной-отнощения R) выполняется для переменной-отнощения R тогда и только тогда, когда любые два кортежа переменной-отнощения R с одинаковыми значениями атрибутов множества А имеют одинаковые значения атрибутов множества В.
Каждая переменная-отношение обязательно удовлетворяет некоторым тривиальным функциональным зависимостям; причем функциональная зависимость тривиальна тогда и только тогда, когда ее правая (зависимая) часть является подмножеством ее левой части (детерминанта).
Одни функциональные зависимости подразумевают другие зависимости. Для данного множества зависимостей S замыканием называется множество всех функциональных зависимостей, подразумеваемых зависимостями множества S. Множество S обязательно является подмножеством собственного замыкания S. Правила логического вывода Армстронга обеспечивают исчерпывающую и полную основу для вычисления замыкания для заданного множества S, хотя несколько дополнительных правил вывода (легко выводимых из правил Армстронга) позволяют упростить практические вычисления.
Для данного подмножества Z множества атрибутов переменной-отношения R и множества функциональных зависимостей S, которые выполняются в переменной-отношении R, замыканием подмножества Z для множества S называется такое множество всех атрибутов А переменной-отношения R, что функциональная зависимость Z -> А является членом замыкания S. Если замыкание Z состоит из всех атрибутов переменной-отношения R, то подмножество Z называют суперключом переменной-отношения R (а неприводимый суперключ, в свою очередь, называется потенциальным ключом). В этой главе было дано описание простого алгоритма для получения замыкания Z на основе Z и S и, следовательно, для определения, является ли данная зависимость X -> Y членом замыкания (функциональная зависимость X Y является членом замыкания тогда и только тогда, когда множество Y является подмножеством замыкания Х).
Два множества функциональных зависимостей S1 и S2 эквивалентны тогда и только тогда, когда они являются покрытиями друг для друга, т.е. Sl=S2. Каждое множество функциональных зависимостей эквивалентно по крайней мере одному неприводимому множеству. Множество функциональных зависимостей является неприводимым, если, во-первых, каждая функциональная зависимость этого множества имеет одноэлементную правую часть; во-вторых, если ни одна функциональная зависимость множества не может быть устранена без изменения замыкания этого множества; в-третьих, если ни один атрибут не может быть устранен из левой части любой функциональной зависимости данного множества без изменения замыкания множества. Если I является неприводимым множеством, которое эквивалентно множеству S, то проверка выполнения функциональных зависимостей из множества I автоматически обеспечит выполнение всех функциональных зависимостей из множества S.
В заключение следует отметить, что многие высказанные выше соображения можно расширить в отношении ограничений целостности вообще, а не только функциональных зависимостей. Например, в общем случае следующие допущения являются верными.
Некоторые ограничения целостности являются тривиальными,
Одни Ограничения целостности подразумевают другие ограничения.
Множество всех ограничений, подразумеваемых заданным множеством, может рассматриваться как замыкание этого заданного множества.
Выяснение вопроса, будет ли некоторое ограничение находиться в некотором замыкании (т.е. будет ли заданное ограничение подразумеваться некоторыми данными ограничениями), является очень интересной практической задачей.
Не менее интересной практической задачей является поиск неприводимого покрытия для некоторого заданного множества установленных ограничений.
Благодаря наличию исчерпывающего и полного множества правил вывода различных функциональных зависимостей, работать с ними удобнее, чем с ограничениями целостности вообще. В списках рекомендуемой литературы в конце этой и главы 12 даны ссылки на работы, в которых описывается несколько других типов ограничений (MVD, JD и 1ND); для них также существуют подобные наборы правил вывода. Однако в данной книге другие существующие типы ограничений столь же подробно и полно, как функциональные зависимости, не рассматриваются.