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



         

Проблема объектно-табличного отображения


Одна из первых и наиболее очевидных проблем при использовании объектов в качестве внешнего компонента реляционного хранилища данных состоит в том, как следует отображать классы в таблицы. По началу это кажется довольно простым упражнением – таблицы соответствуют типам, столбцы – полям. Даже для типов полей подыскиваются типы столбцов таблиц, которые соответствуют им в довольно сильной степени: типы VARCHAR соответствуют типу String, тип INTEGER – типу int и т.д. Так что имеет смысл для каждого класса, определенного в объектной системе, определить таблицу с тем же или схожим именем. Или, возможно, если объектный код пишется при уже существующей схеме базы данных, то класс отображается на существующую таблицу.

Но с течением времени любой подготовленный объектно-ориентированный разработчик, естественно, будет стремиться использовать в объектной системе наследование, и для этого понадобится делать то же самое в реляционной модели. К сожалению, в реляционной модели не поддерживается какой-либо вид полиморфизма, или связи IS-A. Поэтому разработчикам, в конечном счете, приходится применять один из трех вариантов отображения наследования в реляционный мир: таблица на класс, таблица на конкретный класс и таблица на семейство классов. У каждого из этих вариантов имеются существенные потенциальные недостатки.

Вероятно, наиболее понятным является подход с отдельной таблицей для каждого класса, поскольку он направлен на нахождение минимального «расстояния» между объектной и реляционной моделями. Каждому классу в иерархии наследования соответствует отдельная таблица, и объекты порожденных типов «сшиваются» путем соединения различных таблиц, основанных на наследовании. Например, если в объектной модели имеется базовый класс Person, из которого порождается класс Student, являющийся, в свою очередь, предком класса GraduateState, то потребуются три таблицы PERSON, STUDENT и GRADUATESTUDENT, каждая из которых соответствует одноименному классу.


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