Насколько широко используются объекты Oracle? - PullRequest
10 голосов
/ 24 апреля 2011

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

Кто-нибудь на самом деле использует это?

Ответы [ 8 ]

13 голосов
/ 24 апреля 2011

Для начала некоторые стандартные функции Oracle используют типы, например XMLDB и Spatial (которые включают объявление столбцов типов данных Nested Table).

Кроме того, многие разработчики PL / SQL постоянно используют типы для объявления коллекций PL / SQL или конвейерных функций.

Но я согласен, что немногие места широко используют типы и создают API-интерфейсы PL / SQL.из них.Для этого есть несколько причин.

  1. Oracle реализовал Объекты очень медленно.Хотя они были представлены в версии 8.0, только в 9.2 они полностью поддерживали Inheritance, Polymorphism и определяемые пользователем конструкторы.Правильное объектно-ориентированное программирование невозможно без этих функций.Мы не получили SUPER() до версии 11g.Даже сейчас отсутствуют функции, особенно частные объявления в TYPE BODY.
  2. Синтаксис часто неуклюжий или разочаровывающий.Документация не помогает.
  3. Большинство людей, работающих с Oracle, обычно приходят из реляционной / процедурной школы программирования.Это означает, что они не понимают ООП или не понимают, где это может быть полезно при программировании баз данных.Даже когда люди приходят с хорошей идеей, им трудно или невозможно реализовать их с использованием синтаксиса Oracle.

Последний пункт является ключевым.Мы можем изучать новый синтаксис, мы можем убедить Oracle завершить набор функций, но это имеет смысл, только если мы сможем придумать использование для типов.Это означает, что нам нужны проблемы, которые можно решить с помощью наследования и полиморфизма.

Я работал над одной системой, которая широко использовала типы.Это была система хранения данных, и подсистема загрузки данных была построена из типов.Основное обоснование было простым:

  • нам нужно применять один и тот же шаблон бизнес-правил для каждой загружаемой таблицы, поэтому процесс является общим;
  • для каждой таблицы есть свой прогноз, поэтомуоператоры SQL уникальны для каждого из них.

Реализация типа чистая: общий процесс определен в типе;реализация для каждой таблицы определена в типе, который наследуется от этого общего типа.Определенные типы могут быть сгенерированы из метаданных.Я выступал с этой темой в UKOUG несколько лет назад и более подробно об этом написал в своем блоге. Узнайте больше.

Кстати, теория отношений включает в себяконцепция доменов, которые являются определяемыми пользователем типами данных, включая ограничения и т. д. Никакая разновидность СУБД фактически не поддерживает домены, но реализация типа Oracle, безусловно, является шагом вперед.

10 голосов
/ 24 апреля 2011

Я никогда не видел выгоды от этого, в основном потому, что когда я последний раз проверял это, ваши определения объектов были неизменными, как только они использовались таблицей.

Таким образом, если бы у вас был объект Address, который вы использовали в определении таблицы Customer, вы никогда бы не смогли изменить определение объекта Address, не удалив таблицу Customer или не выполнив очень неудачное преобразование.

Объекты хороши для создания экземпляров данных - например, для того, что делает приложение - но для хранения данных и манипулирования на основе множеств, ну, я просто не вижу смысла.

7 голосов
/ 26 апреля 2011

Многие другие ответы дали хорошие примеры того, где использование объектов имеет смысл;в общем случае они предназначены для обработки определенных, возможно, сложных типов данных.Сам Oracle использует их для геопространственных данных.

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

create type emp_t as object (empno number, ename varchar2(10), ...);
create table emp of emp_t;

Хотя это могут быть хорошие простые примеры для изучения концепций, я боюсь, что они могут привести к новому поколению разработчиков баз данных, которые считают этот подход подходящим,более современный и, следовательно, лучше, чем «старомодные» реляционные таблицы.Это категорически не так.

5 голосов
/ 24 апреля 2011

Я только слышал, что он используется в одном месте, и разработчики вовлекались, чтобы уйти от него. Я думал об использовании его исключительно в PL / SQL, но поскольку наши администраторы баз данных не позволят нам устанавливать какие-либо типы, опасаясь, что мы можем использовать их в таблице, это вряд ли произойдет.

Делись и наслаждайся.

3 голосов
/ 24 апреля 2011

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

Тем не менее, по моему опыту, я бы не сказал, что Oracle является объектно-ориентированным, а скорее обладает некоторой базовой функциональностью объектов. И, как говорили другие, компании не покупают Oracle для этого OO-возможностей. Не стоит слишком увлекаться этим с Oracle imo.

3 голосов
/ 24 апреля 2011

Нередко можно увидеть, как они играют небольшую роль где-то в вашей системе.Например, если вы что-то делаете с картриджем данных Oracle.Иногда, когда вам нужно сделать что-то действительно странное, это необходимо.

Редко можно увидеть, как они широко используются в системе.Я видел, как две разные системы используют много объектов, и это было катастрофой оба раза: сложно использовать, очень медленно и полно ошибок.

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

2 голосов
/ 24 апреля 2011

Я бы сказал, что не люди покупают Oracle. Это очень непереносимо / нестандартно, и, как указал Адам, также есть некоторые подводные камни. Я лично не видел выгоды от этого. Я не знаю, насколько широко оно используется, но я не могу представить, что оно очень большое. Просмотрите этот сайт, чтобы узнать, сколько вопросов о нем задают. Это может дать вам некоторое представление.

1 голос
/ 24 апреля 2011

Ну, никогда не использовал их в своей практике, никогда не слышал, чтобы кто-то их тоже использовал, я думаю, это не очень широко используется. Это важно, когда у вас есть объектно-ориентированная база данных, oracle поддерживает OO, но не является базой данных OO.Я думаю, что люди, которые мигрируют из ОО-баз данных в Oracle, широко их используют

...