Классика баз данных - статьи

       

В качестве примера рассмотрим отношение


В качестве примера рассмотрим отношение rShipmentItems. Первичный ключ этого отношения входят два поля, одно из которых, NoS, зависит от класса cShipments, а другое, CoodsID – от класса cGoogs. Исходя из только что сформулированного принципа, мы должны выбрать класс, схему которого должно определять рассматриваемое отношение. Целью этого выбора является адекватное представление сущностей реального мира. В нашем случае естественно предположить (поскольку мы говорим про данные, означенные как "элемент отгрузки") что схема отношение rShipmentItems должна послужить основой для определения структуры класса cShipments.

Из этого следует, что связь rShipments.NoS <->rShipmentItems.NoS является избыточной в объекте. Для оптимальной организации уровня хранения следует изменить схему отношения rShipmentItems, исключив из него атрибут NoS. Однако это изменение не будет единственным.

Поле GoodsID отношения rShipmentItems связано с первичным ключом возникшего в результате нормализации отношения rGoogs. В процессе анализа мы пришли к выводу, что rGoogs является сильным отношением, определяющем класс сGoogs. Однако, поскольку отношения rShipmentItems и rGoogs описывают объекты разных классов, эта связь не является избыточной в объекте.

В таком случае процедура объектной привязки предполагает, что если поля (поле) слабого отношения, описывающего некоторый класс, являются внешним ключом, связанным с ключом сильного отношения, описывающего другой класс, то эти поля (поле) должны быть заменены ссылкой на класс сильного отношения. Возможность такой замены обусловлено тем, что между множеством значений ключа сильного отношения и множеством уникальных идентификаторов объектов класса этого отношения, существует взаимно-однозначное соответствие. Значение явно заданного поля GoodsID (ключ класса) в объектах класса cGoods точно так же уникально, как и скрытое значение уникального объектного идентификатора и, следовательно, поле rShipmentItems.GoodsID должно быть заменено ссылкой на класс cGoods (то же самое относится и к полю StaffID отношения rShipment, которое должно быть заменено на ссылку на класс cStaff ).


Содержание  Назад  Вперед