
- •Уровни представления данных в бд
- •Языки баз данных
- •Логическая структура данных
- •Операции над данными
- •10. Иерархическая модель данных
- •Реляционная модель данных
- •Основные понятия реляционной модели данных
- •Таким образом, отношение - это совокупность кортежей, т.Е. Таблица со всеми своими строками.
- •Ключи отношений
- •Поставщик изделие
- •Первичный ключ никогда не должен принимать нулевого значения, а в составном ключе ни одна из компонент никогда не должна быть нулевой.
- •Контроль ссылочной целостности
- •Нормализация отношений реляционной бд
- •Первая нормальная форма
- •Поставки1 поставки
- •Поставщик1 поставки
- •Операции над отношениями
- •Теоретико-множественные операции
- •Запрос 4
- •Язык sql - общие сведения
- •Язык запросов qbe
- •Запрос 1
- •Запрос 2
Поставщик1 поставки
|
П# |
Имя поставщика |
Город |
Тариф |
||||||
---|---|---|---|---|---|---|---|---|---|---|
|
П1 П2 П3 |
Восход Заря Салют |
Тула Самара Тула |
10 15 10 |
||||||
|
|
|
|
|||||||
|
|
|
|
П# |
И# |
Кол |
П1 П1 П1 П2 П2 П3 |
И1 И2 И3 И1 И2 И4 |
300 200 200 200 500 80 |
Третья нормальная форма
Отношение находится в 3НФ, если в нем нет функционально полной зависимости между не ключевыми атрибутами.
Рассмотрим зависимости между атрибутами отношения ПОСТАВЩИК1.
К
аждый
из не ключевых атрибутов полностью
зависит от первичного ключа П#, но
в то же время атрибут Тариф
функционально полно зависит только от
атрибута Город. Эти атрибуты могут
существовать вне зависимости от
первичного ключа. Следовательно, это
отношение находится не в 3НФ.
В таком отношении также могут возникнуть аномалии включения-удаления. Если потребуется включить в таблицу сведения о новом городе и стоимости перевозок из него, то мы не сможем этого сделать до тех пор, пока в этом городе не появится новый поставщик и не получит свой статус поставщика. До тех пор ему не присвоен код П#, т.е. П# =0 и кортеж, содержащий сведения об этом городе не будет иметь первичного ключа (аномалия включения). Если же предприятие Заря перестанет поставлять нам изделия и потеряет статус поставщика и код П#, то из таблицы ПОСТАВЩИК1 придется исключить все сведения о нем, в том числе и те, которые мы хотели бы сохранить, например, стоимость доставки из Самары (аномалия удаления).
Для приведения отношения к 3НФ необходимо выделить в отдельную таблицу не ключевые атрибуты, функционально полно зависящие друг от друга. Таблицу ПОСТАВЩИК1 разделим на две таблицы: ПОСТАВЩИК и ДОСТАВКА.
ПОСТАВЩИК ДОСТАВКА
|
П# |
Имя постащика |
Город |
||||
---|---|---|---|---|---|---|---|
|
П1 П2 П3 |
Восход Заря Салют |
Тула Самара Тула |
||||
|
|
|
|||||
|
|
|
Город |
Тариф |
Тула Самара |
10 15 |
Теперь эти отношения находятся в 3НФ и в БД можно включать сведения о новых городах и тарифах даже в том случае, когда из этих городов пока не делается никаких поставок. Между полученными отношениями существует связь типа 1:М (на стороне 1 находится отношение ДОСТАВКА). Связь осуществляется через атрибут Город.
Таким образом, исходная таблица ПОСТАВКИ2 разделилась на три таблицы: ПОСТАВЩИК, ДОСТАВКА, ПОСТАВКИ. Каждая из таблиц находится в 3НФ. Эти таблицы можно рассматривать в качестве модели данных реляционной БД.