Данные, хранящаяся в БД не должна дублироваться. Все строки (кортежи) отношения должны быть уникальными. Ключом отношения, или первичным ключом, называется атрибут отношения, однозначно определяющийкаждый из его кортежей. В отношении Студент ключом отношения может быть №_студенческого_билета. (Фамилия не может быть использована, т. к. существуют однофамильцы).
Простой ключ— ключ, содержащий только один атрибут. В общем случае операции с данными в БД выполняются быстрее в том случае, когда в качестве ключа используется самый короткий и самый простой из возможных типов данных. С этой точки зрения наилучшим образом подходит целочисленный тип. Сложный, или составной, ключ — это ключ, состоящий из нескольких атрибутов.
Реляционная база данных представляет собой совокупность взаимосвязанных таблиц. Рассмотрим еще одну таблицу, которая содержит сведения об успеваемости студентов по разным предметам. В такой таблице не нужны данные о курсе, специальности и дате рождения студента, т. к. эти данные уже хранятся в таблице Студенты. Нам достаточно будет поместить в эту таблицу атрибут, который будет определять каждого студента (№_студенческого_билета), данные о предмете и полученной оценке. При этом таблицы Студенты и Успеваемость окажутся связанными при помощи атрибута №_ студенческого_билета.
Таблица 4. Фрагмент отношения Успеваемость
№_студенческого билета
Предмет
Оценка
Высшая математика
Философия
Высшая математика
Философия
NULL
Общая физика
Общая физика
NULL
Атрибут №_студенческого_билета таблицы Успеваемость содержит данные, которые идентифицируют студентов. Если нужно узнать фамилию студента, соответствующее строке в таблицеУспеваемость, то ее следует искать в таблице Студенты по значению домена №_студенческого_билета.
В таблице Успеваемость атрибут №_студенческого_билета является внешним ключом (в таблице Студенты он является первичным ключом, в таблице Успеваемость первичный ключ – составной: №_студенческого_билета+ Предмет).
Внешний ключ — это атрибут (или множество атрибутов) одного отношения, являющийся ключом другого отношения. Внешние ключи используются для установления логических связей между отношениями. Связь между двумя таблицами устанавливается путем присваивания значений внешнего ключа одной таблицы значениям ключа другой.
Так же как и любые другие ключи, внешние ключи могут быть простыми либо составными. При разработке реляционных БД ту таблицу, от которой идет связь, называют главной, а ту таблицу, к которой она ведет – подчиненной. В нашем примере в качестве главной таблицы можно выбрать таблицу Студенты, тогда Успеваемость – будет подчиненной. В главной таблице всегда доступны все содержащиеся в ней записи. В подчиненной же таблице доступны только те записи, у которых значение атрибутов внешнего ключа совпадает со значением соответствующих атрибутов текущей записи главной таблицы.
№_студенческого_билета
Фамилия
Дата_рождения
Курс
Специальность
23980282
Алексеев Д. А.
12.03.1982
Биология
Яковлев Н. В.
25.12.1979
Физика
Михайлов В. В.
28.02.1979
Математика
Афанасьев А. В.
19.08.1983
Иностранный язык
Кузнецов T. И.
03.10.1982
Физика
2312568Т
Смирнов А. Д.
26.03.1981
История
№_студенческого_билета
Предмет
Оценка
23980282
Высшая математика
23980282
Философия
Рисунок 7. Связи между главной и подчиненной таблицами
Различают четыре типа связей между таблицами реляционной базы данных:
- один к одному — каждой записи одной таблицы соответствует только одна запись другой таблицы;
- один ко многим — одной записи главной таблицы могут соответствовать несколько записей в подчиненной таблицы;
- многие к одному— нескольким записям главной таблицы может соответствовать одна и та же запись подчиненной таблицы;
- многие ко многим— одна запись главной таблицы связана с несколькими записями подчиненной таблицы, а одна запись подчиненной таблицы связана с несколькими записями главной таблицы.
Различие между связями типа «один ко многим» и «многие к одному» зависит от того, какая из таблиц выбирается в качестве главной, а какая — в качестве подчиненной. Например, если из связанных таблиц Студенты и Успеваемость в качестве главной выбрать таблицуСтуденты, то получим связь типа «один ко многим». Если же выбрать в качестве главной таблицу Успеваемость, получится связь типа «многие к одному».