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

       

Сложные объекты


Следует поддерживать сложные объекты

Сложные объекты строятся из более простых путем применения конструкторов. Простейшими являются такие объекты, как целые числа, символы, символьные строки произвольной длины, булевские значения и числа с плавающей точкой (можно было бы добавить другие атомарные типы). Имеются различные конструкторы сложных объектов: примерами могут служить кортежи (tuple), множества (set), мультимножества (bag), списки (list), массивы (array). Минимальный набор конструкторов, который должна иметь система, – это множества, списки и кортежи. Множества необходимы, потому что они обеспечивают естественный способ представления коллекций реального мира. Кортежи необходимы, потому что они представляют естественный способ представления свойств сущностей. Конечно, важны и множества, и кортежи, поскольку они получили широкое распространение в качестве конструкторов объектов благодаря реляционной модели. Списки или массивы важны потому, что они сохраняют порядок, который имеет место в реальном мире, а также потому, что они присутствуют во многих научных приложениях в виде матриц или временных рядов.

Конструкторы объектов должны быть ортогональными: любой конструктор должен быть применим к любому объекту. Конструкторы реляционной модели не являются ортогональными, потому что конструкция множества может быть применена только к кортежам, а конструкция кортежа – только к атомарным значениям. Другими примерами являются реляционные модели с не первой нормальной формой (non-first normal form), в которых конструкцией верхнего уровня всегда должно быть отношение.

Отметим, что для поддержки сложных объектов необходимы соответствующие операции для работы с такими объектами (как бы они не были устроены). То есть операции со сложным объектом должны транзитивно распространяться на все его компоненты. Примерами могут быть выборка или удаление сложного объекта целиком или создание "глубокой" ("deep") копии (в отличии от "поверхностной" ("shallow") копии, в которой компоненты не копируются: в копии корня объекта указываются ссылки на компоненты копируемого объекта). Конечно, пользователь должен иметь возможность определять дополнительные операции со сложными объектами (см. ниже правило расширяемости). Однако для реализации этой возможности необходимы некоторые обеспечиваемые системой средства, такие как два различаемых типа ссылок ("является частью" ("is-part-of") и "общая" ("general")).



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