f_evgeny wrote: В пределе, мне это видится так, реляционные - это где данные организованны в виде таблиц, объектные - в виде дерьевьев.
Не совсем, все-таки не в виде деревьев, а в виде иерархии объектов. Упрощать это дело до деревьев все-таки нельзя.
f_evgeny wrote: Чем хороши таблицы, и чем плохи деревья?
Предположим, что мы имеем много данных, лежит перед нами такая большая куча объектов. Как мы будем с ними разбираться? Простой, рабоче-крестьянский подход говорит следующее - выделяем набор признаков, совокупность которых определяет объект. Что получилось? Правильно, таблица, в которой строки соответствуют объектам, столбцы - признакам.
Теперь попробуем ту же самую кучу проклассифициоровать при помощи деревьев. Получаем в пределе для каждого объекта свое дерево признаков. И как теперь с этим $*#*: разбираться?
Нет, разбираься-то как раз проще всего с объектами. В идеале вообще не надо будет переводить объект в проскую таблицу и обратно.
Скажем Запрос в объектной системе мог бы выглядеть примерно так:
Code: Select all
IEmployer CompanyEmployer = new (SELECT IEmployer Emp WHERE Emp.Salary>1000 AND (IManager)Emp.IsCustomer('Microsoft'))
На выходе я получил бы коллекцию объектов типа IEmployer, содержащюю всех менеджеров занимающихся MS, с окладом больше штуки. При этом никокой ORM и прочая низкоуровневая лабуда не тревожила бы вообще никого - у меня есть уже готовый объект или коллекция объектов нужного типа, с которой я могу делать вообще все что угодно.
Но на сколько я себе представляю, на данном этапе развития БД это невозможно реализовать с приемлемой скоростью.
Хотя бы потому, что это сходу упирается в невозможность использовать индексы. Внутренняя реализация метода IsCustomer недоступна ввиду инкапсуляции, а значит невозможно предположить результат вызова этого метода если не вызвать его явно для каждого объекта.
Теоретически, можно придумать хитрые метаданные, описывающие методы и строить индексы на основе этих метаданных, но это не самый простой путь и об удачных реализациях я не слышал.
Далее, то же приведение типов, а-ля (IManager)Emp, радости индексам опять-таки не добавит.
И так далее, вообщем куда не плюнь - всюду проблемы.
Поэтому пока и рулит реляционный движек. С одной стороны он очень универсален, а с другой - обладает на редкость хорошей производительностью.