9
табельного номера и номера проекта встречается в БД только один раз. Будем
обозначать такой ключ как (Табельный номер, Номер проекта). В таблицах бу-
дем выделять атрибуты, составляющие ключ, подчеркиванием.
Очевидно, что атрибуты Табельный номер и Номер проекта по отдельно-
сти не могут использоваться в качестве ключевых, так как, например, одно и
то же значение табельного номера может встречаться в БД несколько раз. На-
пример, значение табельного номера 15 встречается в БД дважды, так как со-
трудник Иванов работает на двух проектах. Атрибут Номер проекта также сам
по себе не является ключевым, так как, например, номер проекта 2140 встреча-
ется в БД дважды (на этом проекте работают два сотрудника).
Примечание – Как отмечено выше, приведение к 1НФ необходимо, чтобы ввести дан-
ные в любую реляционную БД. Поэтому, строго говоря, баз данных, не приведенных к пер-
вой нормальной форме, не существует. При этом “степень” разбиения атрибутов на атомар-
ные значения может быть различной в зависимости от того, какие запросы возможны для
данной БД. Например, если станет известно, что может достаточно часто требоваться ин-
формация об объектах, располагающихся на определенной улице, то, возможно, потребуется
разбить столбец Адрес на столбцы Улица и Дом.
Легко видеть, что БД, приведенная в таблице 1.2, имеет целый ряд сущест-
венных взаимосвязанных недостатков:
− большая избыточность данных: многие данные хранятся многократно.
Например, данные о каждом сотруднике (табельный номер, фамилия, специ-
альность, оклад) хранятся столько раз, сколько имеется проектов, над которыми
работает данный сотрудник. Данные о каждом проекте (номер проекта, адрес,
тип объекта, нормативный документ) хранятся столько раз, сколько имеется со-
трудников, работающих над данным проектом. Информация о том, какой нор-
мативный документ соответствует каждому типу объекта, также хранится не-
сколько раз (столько, сколько имеется проектов с данным типом объекта);
− аномалия добавления (ввода): невозможность ввода данных о сотрудни-
ке, не назначенном ни на один проект (так как при этом одно из полей, состав-
ляющих ключ БД – номер проекта – оказывается пустым). Аналогичным обра-
зом невозможным оказывается ввод данных о проекте, пока на него не назначен
ни один сотрудник;
− аномалия удаления: при удалении данных о проекте могут быть потеря-
ны данные о работниках, занятых в данном проекте, если они не заняты в дру-
гих проектах. Аналогично, при удалении данных о сотруднике можно потерять
данные о проекте, если этот сотрудник был единственным, работавшим в дан-
ном проекте;
− аномалия обновления: если изменяется какой-либо атрибут, то его при-
ходится изменять во многих записях. Например, если у сотрудника изменится
оклад, то изменение потребуется вносить столько раз, сколько имеется проек-
тов, в которых работает данный сотрудник. Кроме того, при этом происходит
нарушение целостности данных: например, в некоторый момент значения атри-
бута Оклад у одного и того же сотрудника оказываются разными.