Для моделирования предметной области наиболее важные атрибуты – это атрибуты ссылочного типа. Именно с их помощью строятся связи между сущностями.
Атрибуты ссылочного типа называют внешними ключами (foreign keys, FK). | ||
Следующее определение связи – частное (относится к кратности «один-ко-многим»).
Связью называется отношение между двумя сущностями, при котором конкретный элемент одной из них с помощью внешнего ключа ссылается на конкретный элемент другой сущности. | ||
С понятием связи часто упоминают понятие классификатора (просьба не путать с кодовыми классификаторами вроде штрих-кодового EAN13 или книжного ISBN).
Пусть сущность А ссылается на сущность Б. Тогда сущность Б называют сущностью-классификатором для классифицируемой сущности А. | ||
Если вариантов классификации одной и той же сущности несколько (как в приведённом примере для книг: по издательствам и по авторам), то такую классификацию называют многоаспектной.
Классификатор тоже иногда может быть классифицирован. Так, в приведённом примере, авторов можно классифицировать по городам, в которых они проживают. В этом случае авторы уже выступают не в качестве классификатора, а в качестве классифицируемой сущности. Классификатором же является сущность Города.
Таблица (инфоблок) находится в 3NF, если она находится в 2NF – и в ней нет атрибутов, не относящихся напрямую к сущности, элементы которой она хранит. | ||
Продолжим рассматривать пример с книгами, издательствами и адресами издательств. Так, первоначально таблица данных о книгах выглядит следующим образом.
ID (PK) | Наименование | Издательство | Адрес издательства | ||
1 | Основы мармитологии | Мармит | Москва, ул. Маркса Спенсера, 23 | ||
2 | Мармитология и жизнь | Мармит | Москва, ул. Маркса Спенсера, 23 | ||
3 | Бухгалтерия – это скучно? | Малыш | Нижний Новгород, ул. Правды, 1 | ||
Несмотря на то, что такая форма весьма удобна для восприятия человеком, она избыточна. Так, отношение «Мармит – Москва, ул. Маркса Спенсера, 23» повторяется более одного раза. Если мы знаем адрес издательства «Мармит», то достаточно указать, что книги «Основы мармитологии» и «Мармитология и жизнь» выпущены издательством «Мармит», а его адрес можно посмотреть в адресном справочнике вида «издательство-адрес».
Первоначальный вариант не соответствует 3NF, поскольку адрес издательства относится к издательству, но не относится напрямую к книге. Собственно, и название издательства не относится к книге: оно относится тоже к издательству. К книге относится лишь факт принадлежности к издательству.
Выполним преобразования, разбив таблицу на две.
Книги
ID (PK) | Наименование | Издательство (FK) | ||
1 | Основы мармитологии | 1 | ||
2 | Мармитология и жизнь | 1 | ||
3 | Бухгалтерия – это скучно? | 2 | ||
Издательства
ID (PK) | Наименование | Адрес | ||
1 | Мармит | Москва, ул. Маркса Спенсера, 23 | ||
2 | Малыш | Нижний Новгород, ул. Правды, 1 | ||
Теперь в таблице «Книги» хранится только информация непосредственно о книгах, а в таблице «Издательства» – только информация непосредственно об издательствах. Не наблюдается также избыточности данных (каждое значение полей, не являющихся ID, встречается ровно один раз). Таким образом, мы добились соответствия 3NF.