Связь типа «один-ко-многим» (1:М). Ключевые поля
При таком типе связи каждой записи в одной таблице соответствует одна или более записей в связанной таблице. Для реализации такого отношения используются две таблицы. Одна из них представляет сторону «один», другая - сторону «много».
Например, нужно иметь информацию о студентах и результатах сдачи ими экзаменов (дата сдачи, предмет, оценка и т.д.). Если все это хранить в одной таблице, то ее объем неоправданно возрастет, т.к. в ней для каждой записи об очередном экзамене должны повторяться все анкетные сведения о студенте. Поскольку Студент и Экзамены - это разные сущности, то и атрибуты их должны храниться в разных таблицах. Но эти сущности связаны между собой, т.к. экзамены сдает определенный студент. Причем один студент может сдавать несколько экзаменов, т.е. налицо тип отношения «один-ко-многим».
Решением этой задачи является создание двух таблиц(например, Студенты и Экзамены), в каждой из которых хранятся соответствующие атрибуты (рисунок 2). Для связывания этих таблиц нужно использовать какой-либо атрибут студента, сдающего экзамен, который будет повторяться в обеих таблицах. Но этот атрибут должен однозначно идентифицировать каждый экземпляр сущности Студент, т.е. являться уникальным для каждого студента. Таким атрибутом может стать, например, номер зачетки (он уникален для каждого студента). В данном случае атрибут Номер зачетки будет являться ключом для сущности Студент.
Рисунок 2 Пример связи «один-ко-многим»
Ключ– это минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Ключ может быть простым (когда он состоит из одного атрибута) и составным (когда он состоит более чем из одного атрибута). Если в таблице нет поля, однозначно определяющего каждую запись, его нужно создать искусственно.
В таблице со стороны «один» ( в нашем примере Студенты) поле Номер зачетки будет ключевым.
Связь типа «много-ко-многим» (М:М)
При этом типе связи множеству записей в одной таблице соответствует множество записей в связанной таблице. Большинство современных СУБД непосредственно не поддерживают такой тип отношений. Для его реализации отношение разбивается на два, имеющих тип «один-ко-многим». Соответственно, для хранения информации потребуется уже как минимум три таблицы: две со стороны «много» и одна со стороны «один». Связь между этими тремя таблицами также осуществляется посредством ключевых полей.
Создание многотабличной базы данных в СУБД Access
Определение ключевых полей
При создании многотабличной базы данных важно правильно разбить данные на таблицы, определить связи между ними и определить ключевые поля.
Создавая таблицы с помощью Конструктора, MS Access может автоматически создать первичный ключ, поставив перед первым указанным в структуре полем поле Код и задав для него тип данных Счетчик. Это происходит, если в создаваемой таблице не были определены ключи. В этом случае при сохранении структуры таблицы MS Access напоминает об отсутствии ключевых полей и предлагает их автоматическое создание. Созданные таким образом ключевые поля далеко не всегда удачно вписываются в общую схему базы данных. В большинстве случаев ключи должен определять сам разработчик заранее, до сохранения структуры таблицы. В отношениях «один-ко-многим» таблица со стороны «много» вообще может не иметь ключевых полей. В этом случае от их автоматического создания всегда следует отказываться.
Для того, чтобы определить какое-либо поле таблицы ключевым, нужно в режиме Конструктора таблиц установить курсор в строке с именем этого поля и нажать на кнопку Определить ключ на панели инструментов или ввести команду Правка/Ключевое поле. После этого в строке рядом с именем этого поля появится изображение ключа.
1.3.2 Определение связи между таблицами
После определения структуры таблиц многотабличной базы данных нужно указать способ, которым эти таблицы связаны.
Для определения связей нужно перейти в окно базы данных и выполнить команду Сервис/Схема данных или на панели инструментов нажать кнопку Схема данных . После этого откроется окно Схема данных и окно Добавление таблицы. В окне Добавление таблицы нужно выделить имена таблиц, добавляемых в схему данных, и нажать на кнопку Добавить. После этого данное окно можно закрыть.
В окне Схема данных появятся имена всех указанных таблиц вместе со списками полей. Имена общих полей выделены полужирным шрифтом. Нужно выделить ключевое поле в списке полей таблицы со стороны “один”, нажать кнопку мыши, перетащить ее курсор на аналогичное поле в списке полей связываемой таблицы, после чего кнопку мыши отпустить. В результате появится диалоговое окно Связи (рисунок 3).
В этом окне в первой строке будет выведено имя поля, по которому связывались таблицы. Чтобы в связанных таблицах не нарушалась целостность данных, нужно щелкнуть по флажку Обеспечение целостности данных. После этого станет невозможна запись в неключевую таблицу такого значения общего поля, которого нет в таблице ключевой.
После установления целостности данных Access включает две дополнительные опции: Каскадное обновление связанных полейи Каскадное удаление связанных записей.
Рисунок 3 Диалоговое окно Связи
Если выбрать первую опцию, то при изменении какого-либо значения ключевого поля в ключевой таблице автоматически обновляются значения этого поля для соответствующих записей во всех связанных таблицах. Например, если у одного из студентов изменился номер зачетки в таблице Студенты, то он автоматически должен поменяться и в таблице Экзамены.
Выбор второй опции при удалении одной из записей в ключевой таблице приведет к удалению тех записей в таблице со стороны «много», которые имеют такое же значение ключа. Например, если из таблицы Студенты удалить запись об одном из студентов, то записи о результатах сданных им экзаменов будут удалены автоматически.
Для завершения процесса создания связей, нужно щелкнуть по кнопке Создать. Между таблицами в окне Схема данныхбудетнарисована линия, указывающая на наличие связи между ними. На конце линии у таблицы со стороны «один» будет цифра 1, а на другом конце, у таблицы со стороны «много» – символ бесконечности . После закрытия этого окна все установленные связи будут сохранены.