Данные хранятся как упорядоченные записи или строки значений атрибутов. Сама база состоит из серии файлов, называемых отношениями или таблицами (рис. 5).
Реляционные системы основаны на законах реляционной алгебры или алгебры отношений, которая основывается на теории множеств, т.е. каждая таблица отношений функционирует как множество. Þ
Основное правило из теории множеств: таблица не может иметь строку, которая совпадает с какой-либо другой строкой.
Раз каждая строка уникальна, то для определения критерия поиска используются одна или несколько колонок. Выбранная колонка является первичным ключем для поиска значений в других колонках БД. Однозначная идентификация по первичному ключу достигается за счет уникальности значений в колонке первичного ключа. Колонка второй таблицы, с которой связан первичный ключ, называется внешним ключом. Соединение таблиц происходит по равенству значений колонки первичного ключа одной таблицы с колонкой внешнего ключа второй таблицы. Такая стыковка строк двух таблиц называется реляционным соединением (relational join). Но! для гарантии соответствия значения связанные строки предполагаются находящимися в тех же позициях. Можно привязать третью таблицу, взяв одну из оставшихся колонок второй таблицы за первичный ключ и состыковав по соответствующей колонке третьей таблицы и т.д.
Чтобы мы могли установить реляционные соединения, каждая таблица должна иметь хотя бы одну общую колонку с другой таблицей. Эта избыточность – как раз то, что прежде всего и обеспечивает реляционное соединение. Однако, по возможности, избыточность следует уменьшать.
Для определения вида, который ваши таблицы должны иметь, установлен набор правил, называемых нормальными формами Кодда. Рассмотрим основные три.
Первая нормальная форма. В каждой строке любой колонки таблицы должно находиться только одно значение
Вторая нормальная форма. Каждая колонка, не являющаяся первичным ключам, должна полностью зависеть от первичного ключа.
Т.е., если вы хотите найти заданную строку, используя другие отношения, то лучше использовать реляционное соединение вместо того, чтобы дублировать колонки в разных таблицах.
Третья нормальная форма. Колонки, не являющиеся первичным ключом, должны зависеть от первичного ключа, и наоборот, первичный ключ должен быть независим от колонок не первичного ключа.
Т.е. нужно использовать первичный ключ для поиска значений в других колонках, но нельзя использовать другие колонки для поиска значений в колонке первичного ключа.
Цель второй и третьей нормальных форм – уменьшение избыточности, использование наименьшего числа колонок.