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



         

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


При одном из этих подходов таблица создается для каждого конкретного (замыкающего цепочку наследования, most derived) класса, здесь применяется денормализация со всеми связанными с ней накладными расходами. При другом подходе для всей иерархии наследования создается одна таблица, в которой часто заводится столбец-дискриминатор, значения которого показывают, к какому классу относится каждая строка. (Возможны и различные гибридные варианты этих схем, но обычно получаемые результаты незначительно отличаются от результатов базовых подходов.) К сожалению, накладные расходы на поддержку денормализованных таблиц часто оказываются значительными при работе с большими объемами данных, а единая таблица будет содержать значительное число пустых столбцов, и, следовательно, для этих столбцов придется допустить наличие неопределенных значений и отказаться от использования ограничений целостности, поддерживаемых РСУБД.

Проблема не исчерпывается отображением наследования: совершенно по-разному обрабатываются ассоциации между объектами, типичные ассоциации 1:n и m:n, обычно используемые и в SQL, и в UML. В объектных системах ассоциации являются однонаправленными, ведущими от ассоциирующего объекта к ассоциируемому объекту (это означает, что ассоциируемый объект в действительности ничего не знает об ассоциации, если явно не установлена двунаправленная ассоциация). В то же время в реляционных системах ассоциация на самом деле является инверсной, она ведет и от ассоциируемого объекта к ассоциирующему объекту (через столбцы внешних ключей). Это оказывается поразительно важным, поскольку означает, что для поддержки ассоциаций m:n необходимо использовать третью таблицу для хранения реальной взаимосвязи ассоциирующего и ассоциируемого объектов. Даже в более простом случае связей 1:n у ассоциатора отсутствует внутреннее знание отношений, с которыми он ассоциируется – для обнаружения этих данных требуется выполнить соединение с какой-либо или со всеми ассоциированными таблицами. (Вопрос, когда следует реально выбирать эти данные, заслуживает отдельного обсуждения, см.ниже разд. «Парадокс загрузки».)




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