Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция7(проектирование).doc
Скачиваний:
4
Добавлен:
19.09.2019
Размер:
178.69 Кб
Скачать

Лекция №7. Тема: «Проектирование структуры базы данных»

(2 ч)

Основные знания:

понятия функциональной зависимости, нормализации, аномалий, 1НФ, 2НФ, 3НФ.

Вопросы для изучения:

1. Понятие функциональной зависимости.

2. Нормализация базы данных. Аномалии баз данных.

3. 1НФ.

4. 2НФ.

5. 3НФ.

Начнем с описательного сценария.

Компания N хранит информацию о своих счетах, причем для каждого счета указывается Номер_счета, Баланс, Информация о клиенте, представленная в следующем формате: Номер_клиента, Имя, Адрес, Статус. Счета могут быть двух типов: Депозит и Текущий. Клиенты могут иметь произвольное число счетов. Номер_счета уникальным образом определяет счет. Несколько клиентов могут совместно использовать общий счет. Каждый счет обрабатывается одним филиалом банка. Для каждого филиала банка указывается Название_филиала, Адрес, Менеджер. Разные филиалы имеют различные названия.

7.1. Понятие функциональной зависимости.

Основополагающее понятие теории нормализации — понятие функциональной зависимости. Функциональная зависимость — это семантическое понятие, которое отражает определенную семантическую связь между атрибутами отношения.

Определение. Пусть в отношении существует множество атрибутов X. Некий атрибут или множество атрибутов А является функционально зависимым от X тогда и только тогда, когда каждой комбинации значений X соответствует одно и только одно значение А.

Рассмотрим атрибут Название_филиала отношения Филиал. Определенный филиал банка может иметь только один адрес. Поэтому каждому значению Название_филиала соответствует одно и только одно значение атрибута Адрес. В каждом филиале есть также только один менеджер.

Конкретное значение Название_филиала может быть связано с произвольным числом значений атрибутов Номер_счета и Баланс и с одним или двумя значениями атрибута Тип. Следовательно, эти атрибуты не являются функционально зависимыми от Название_филиала. Однако конкретному значению атрибута Номер_счета соответствует одно и только одно значение Баланс и Тип.

Если бы счетом мог распоряжаться только один клиент, то можно было бы попытаться установить функциональную зависимость от Номера_счета, но существует счет (348973), которым владеют два различных клиента.

Можно определять функциональную зависимость от любого множества атрибутов. Все примеры, приведенные выше, касались зависимости oт одного атрибута.

Функциональные зависимости — удобное средство выявления потенциальных ключей (атрибутов или множеств атрибутов, которые уникальным образом идентифицируют все кортежи отношения). Предположим, существует функциональная зависимость А от Х, и объединение А и X образует полное множество атрибутов отношения. Если каждый кортеж уникален, то каждая комбинация значений X встречается в таблице только однажды, поскольку ей соответствует в точности одно множество значений А, образующее остальную часть кортежа. Это не означает, что X обязательно является первичным ключом. Это так называемый потенциальный ключ.

Множество атрибутов образует первичный ключ, когда каждая комбинация его значений может встретиться только однажды. Каждое отношение имеет первичный ключ, образованный множеством всех его атрибутов. Однако такой первичный ключ редко используется в качестве идентификатора. Необходимо по-новому сформулировать наше определение первичного ключа. Первичный ключ — это потенциальный ключ, который не имеет избыточности (избыточность — это способность потенциального ключа содержать атрибуты, после удаления которых его все еще можно будет использовать для уникальной идентификации всех кортежей отношения). Первичный ключ — это минимальное (несократимое) множество атрибутов, которое позволяет уникальным образом идентифицировать кортежи. Чтобы найти потенциальные ключи, необходимо сократить все потенциальные ключи до минимальных множеств атрибутов, необходимых для уникальной идентификации кортежей.

Например, отношение Филиал имеет следующий потенциальный ключ: