§2. Принципы построения реляционных баз данных

Связи между таблицами

Связи между таблицами отражают связи между объектами описываемой предметной области. По канонам теории реляционных баз данных эти связи должны осуществляться только на основе значений общих столбцов.

Замечание.

Согласно нулевому правилу, сформулированному Е.Ф. Коддом любая система управления реляционной базой данных, должна управлять этой базой данных, опираясь только на ее реляционные свойства.  Из этого правила и вытекает принцип  осуществления связей между таблицами.

И так механизм реализации связей между таблицами основан на совпадающих столбцах. В зависимости от того, как множество записей одной таблицы отображается во множество записей другой таблицы можно выделить четыре типа связей. Можно, таким образом,  говорить о классификации по способу отображения. 

 

Один ко многим

Связь «один ко многим», пожалуй, чаще всего встречается при конструировании реляционных баз данных. Это  отражает факт реального мира -  любой объект связан с множеством объектов, среди которых имеются много однородных.  Например, человек связан с множеством других людей по родственному признаку, может иметь в собственности несколько однородных предметов (машин, квартир и т.п.), любое предприятие имеет в своем составе множество работников и т.д.

Наличие такой связи означает, что каждая запись первой таблицы может быть связана с произвольным количеством записей второй таблицы. Записи же второй таблицы могут быть связаны не более чем с одной записью первой таблицы.

Разумеется, в общем случае не все записи и первой и второй таблицы обязательно должны участвовать в какой-то связи.  Попытка объединить  две таблицы, между которыми существует такая связь, ни к чему хорошему привести не может, так как придется многократно дублировать записи первой таблицы.  

На Рис. 1.3 представлен пример связи «один ко многим».  Таблица A (см. рис. 1.3) полностью идентична такой же таблице на Рис. 1.2.  Таблица C (см. Рис. 1.3) содержит информацию о некоторых суммах, полученных  людьми, данные о которых содержаться в таблице A:  поле SUM – полученная сумма денег, поле DATE – дата получения денег. Если поле ID в таблице A является первичным ключом, то в таблице C  столбец с этим именем первичным ключом не является. Он необходим таблице C для осуществления связи и называется внешним ключом. Связь «один ко многим» на рисунке обозначена нами при помощи  . Направление связи (от круга к развилке) показывает направление от первичного ключа к внешнему ключу. Заметим, что значение внешнего ключа в таком типе связи не является уникальным.

В рассматриваемом примере таблица A играет ведущую роль, тогда как таблица C отражает лишь некоторые события, происходящие с объектом, который представлен таблицей A.

Рис. 1.3. Пример связи «один ко многим»

Если при связи «один ко многим» вторая подчиненная таблица (C) может содержать записи, которые никак не связаны с записями главной таблицы (A), то значение внешнего ключа для таких записей таблицы C не определено, т.е. по сути, равно NULL. Чтобы избежать ситуации, когда во внешнем ключе приходится использовать NULL, прибегают к таблице посреднику (таблица AC). Один столбец такой таблицы будет являться внешним ключом, соответствующим первичному ключу таблицы A, второй столбец будет соответствовать первичному ключу таблицы C. Таким образом, связь таблицы A с AC – связь типа «один ко многим», таблицы AC с C – связь типа «один к одному». Поскольку в общем случае количество записей в таблице AC может быть меньше, чем в таблице C, то мы, т.о. и получим, что не все записи таблицы C будут участвовать в связи.

 

Hosted by uCoz