- •Московский Авиационный Институт
- •Оглавление
- •Теоритическая часть Основные термины, используемые в пособии
- •Многопользовательские базы данных
- •Модель данных
- •Избыточность в таблицах базах данных
- •Нормализация
- •Ограничения целостности
- •Индексы
- •История выпусков sql Server
- •Редакции sql Server 2008
- •Системные требования sql server 2008
- •Установка ms sql Server 2008
- •Программное обеспечение sql Server 2008
- •Базы данных
- •Создание новой бд
- •Удаление бд
- •Создание таблиц
- •Удаление таблиц
- •Работа с таблицами
- •Типы данных
- •Создание пользовательских типов данных
- •Создание ограничений
- •Создание диаграммы бд
- •Создание представлений
- •Создание триггеров
- •Индексы
- •Безопасность sql Server
- •Создание имя входа
- •Создание пользователя базы данных
- •Настройка удаленного доступа к бд в 326 аудитории
Нормализация
С точки зрения нормализации, существует 6 нормальных форм:
1-я НФ (обычно обозначается также 1НФ)
2НФ
3НФ
НФ Бойса-Кодда (НФБК)
Но на практике обычно используется только три. Вначале - о первой нормальной форме.
Формальное определение ее очень сурово:
Схема отношения R находится в первой нормальной форме, если значения в dom(A) являются атомарными для каждого атрибута A в R.
Но на обычный язык переводится достаточно просто: каждый атрибут отношения должен хранить одно-единственное значение и не являться ни множеством, ни списком.
Предположим, что у нас есть таблица следующего вида:
Атрибут "контактные лица" здесь, конечно, не является атомарным, поскольку в нем попадаются списки из нескольких лиц. Можно разделить его так:
Стало лучше, но ненамного, поскольку тот же самый атрибут все равно содержит разнородные данные, хотя и об одном лице. Разобьем его на несколько:
Теперь наше отношение находится в первой нормальной форме. На практике часто бывает очень сложно определить, когда атрибут является атомарным, а когда нет - все зависит от того, как он будет использоваться. Вполне может быть, что для разных пользователей потребуется разная степень дробности атрибутов. Здесь необходимо помнить, что объединять данные из базы легко, а дробить их после занесения информации - сложно. На практике нарушения первой нормальной формы встречаются.
Формальное определение второй нормальной формы выглядит так:
Схема отношения R находится во 2НФ относительно множества функциональных зависимостей F, если она находится в 1НФ и каждый неключевой атрибут полностью зависит от каждого ключа для R.
Можно дать его и более понятным языком: отношение находится во второй нормальной форме, если оно находится в первой нормальной форме и при этом все неключевые атрибуты зависят только от ключа целиком, а не какой-то его части. Например, если посмотреть на нашу таблицу, которая стала итогом приведения к первой нормальной форме, можно заметить, что телефонный код города зависит только от самого города и никак не связан с названием предприятия. Получается избыточная информация - информация о коде города повторяется несколько раз. Чтобы решить эту проблему, нашу таблицу нужно разбить на две более мелких.
Принципиальный момент, который в литературе отражается не всегда: поскольку речь идет о частичной зависимости атрибутов от ключа, то все вышесказанное относится исключительно к отношениям с составным ключом. Отношение с простым (атомарным) ключом находится во второй нормальной форме по определению и в данном этапе нормализации не нуждается.
Формальное определение третьей нормальной формы выглядит так:
Схема отношения находится в третьей нормальной форме относительно множества функциональных зависимостей F, если она находится в первой нормальной форме и ни один из непервичных атрибутов в R не является транзитивно зависимым от ключа для R.
Переводя на человеческий язык: чтобы привести отношение к третьей нормальной форме, необходимо устранить функциональные зависимости между неключевыми атрибутами отношения. То есть данные, хранимые в таблице, должны зависеть только от ключа. В нашем случае присутствует функциональная зависимость между атрибутами "Ф.И.О", "Должность" и "Телефон". Чтобы от нее избавиться, можно разбить нашу таблицу на две.
Первая таблица будет хранить данные, относящиеся к непосредственно к самому предприятию:
Вторая таблица будет хранить факты, относящиеся к конкретному лицу, исполняющему некоторые обязанности на данном предприятии:
В результате (вместе с таблицей для кода города) мы получили нормализованную версию нашей базы данных. На практике приводить таблицы к первой и второй нормальной форме приходится не так уж часто - обычно приходится приводить только к третьей. При этом нужно быть очень внимательным, поскольку функциональные зависимости не всегда бросаются в глаза.
Нормальная форма Бойса-Кодда. Это - вариант третьей нормальной формы. Отношение находится в нормальной форме Бойса-Кодда, если между ключами-кандидатами нет функциональной зависимости. Например, предположим, что в таблицу с заказами, помимо идентификатора заказчика, попало также имя заказчика. Конечно же, это неправильно, поскольку имя заказчика функционально зависит от его идентификатора.
