[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объектно-ориентиронные базы данных
Programmer
Добрый день!

Уважаемые участники форума, хотелось бы обсудить такую тему, как объектно-ориентированные базы данных. Понимаю, немногие думают, что это действительно тема для обсуждения, но я не хочу вступать в спор, хороши ли данные системы или плохи. Исходя из моих поисков в Интернете, особенно интересных ООСУБД я не нашёл, к сожалению, может быть, я и плохо искал, но, по крайней мере, нашёл постреляционную СУБД «Cache». Правда, она мне не особо понравилась из-за её привязанности к конкретному языку, похоже, её сложно даже использовать как ООСУБД именно с таким замечательным средством разработки как PHP.

Неужели нет таких средств, гибких, чтобы можно было использовать их интерфейс не только на C++, но и на других языках, например, в PHP???

Я думаю, что нынешние реляционные СУБД, хотя они и самые распространённые, всё-таки сложны при разработке приложений, которые имеют сложную и разветвлённую структуру данных, а в ООСУБД, думаю, было бы удобно и приятно разрабатывать такие системы!

Приведу пример-аналогию, почему именно ООСУБД является наилучшим средством по сравнению с РСУБД. Я думаю, что аналогии позволяют разработчикам абстрагироваться от конкретной работы и посмотреть шире. Как разрабатывают, к примеру, вкратце, строительные комплексы, здания или даже автомобили? Сначала разрабатывается модель системы. Она обсуждается со всеми интересующимися сторонами. Когда принята модель, она постепенно разбивается на более мелкие детали, а именно, конкретные здания, конструкции здания, при этом используются стандартные конструкции или разрабатываются новые. Когда, наконец, система спроектирована, она строится, тестируется, внедряется, эксплуатируется, поддерживается. Но вот самый интересный момент - в момент эксплуатации и поддержки наша система находится в СОБРАННОМ ВИДЕ! Взять автомобиль или здание, или комплекс любой. Даже в момент модернизации, эта система всего лишь частично реконструируется, иногда, конечно, полностью разбирается, если идёт полная реконструкция, и затем собирается ВНОВЬ! Бывают такие моменты, когда используемая система сдаётся на хранение, например, когда её эксплуатация невозможна в данный момент. К примеру, на катере не покатаешься зимой, его, поэтому надо хранить в специальном месте, возможно, даже его при хранении нужно разбирать на основные составные части для удобства хранения и сохранности качества его частей и в целом.

Так к чему же я! А к тому, что ведь в реляционных базах данных производится хранение данных в неудобном и не совсем естественном виде, причём в момент использования. С одной стороны в некоторых случаях это удобно. Это удобно, когда нужно просмотреть сходные детали, как, например, в магазине запчастей, а когда нам нужен законченный продукт, мы всё-таки не идём в магазин запчастей и не говорим "быстренько собирайте мне машину", а идём туда, где находятся собранные машины. А РСУБД находится именно в состоянии, если не магазина запчастей, то лабиринта незаконченных изделий по причине того, что когда-то давно негде было хранить большие машины, их хранили по смыслу - рули в одном месте, бензобаки в другом, моторы в третьем, и т.д. Это удобно, когда мы имеем склад запчастей или, когда негде ставить большие машины, попросту, когда нет ни производственного отдела, ни магазина. Всё делается вместе, как появился покупатель, так мы ему и собрали машину.

Программисты-разработчики! Мы ведь научились работать с такими вещами как ООП, инкапсуляция, полиморфизм, наследование..., научились разрабатывать сложные продукты раздельно, по стадиям, и в то же время, комплексно, так как эти стадии разработки в итоге работают на одно общее дело! Почему же мы тогда не можем понять, что когда данные часто используются, не надо их хранить в разобранном виде, нужно их как-то уметь хранить в готовом для продажи и эксплуатации виде. Возможно, даже нужно хранить данные в двух видах - табличном и объектном. И что вообще тормозит развитие объектных БД?

Ведь необходима такая СУБД, которая работала бы с данными в том виде, в котором они и находятся. К сожалению, немногие осознают это, но, надеюсь всё-таки, что найдутся те, кто не топчется на месте, а смотрит в будущее.

Существующие объектно-реляционные СУБД, лишь замедляют работу СУБД, так как они используют ООП интерфейс как надстройку, а хранят данные, как и РСУБД - в таблицах.

Главный же вопрос в том, существуют ли на данный момент хотя бы на этапе разработки такие ООСУБД, использование которых возможно в системах, НЕЗАВИСИМО от языка, а именно совместно с PHP?

Если у кого-нибудь есть по этому вопросу конкретные соображения, очень интересно было бы почитать то, что вы думаете.
:-)



Спустя 11 минут, 30 секунд (23.03.2009 - 14:46) sergeiss написал(а):
Я чегой-то не понял, в чем "прикол" такой БД? Все равно внутри себя она будет хранить данные в каком-то определенном формате, а выдавать по запросу в другом. То есть, будут делаться какие-то определенные действия, которые будут занимать некоторое время.
У "обычных" БД есть возможность делать встроенные функции, которые как раз и могут "делать сборку автомобиля из запчастей по запросу юзера", пользуясь твоей терминологией. И обеспечат целостность данных. То есть, по сути дела, мы можем хранить данные в целом виде, без разбивки на части. И для этого не надо ничего изобретать, достаточно полностью использовать уже имеющиеся возможности.

Так что мое мнение - какие-то отдельные "реляционные" БД - это всё "от лукавого" smile.gif

Спустя 7 часов, 44 минуты, 58 секунд (23.03.2009 - 22:31) Programmer написал(а):
Всё дело в том, как организовать доступ к данным, в каком бы они формате ни лежали!

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

Почему сейчас развита организация интерфейса в виде таблиц? Потому что изначально не легко представить что-то в многомерном пространстве, и даже в трёхмерном, поэтому человек с самого начала развития БД любые данные стремился спроецировать на плоскость, одни на одну плоскость, а другие - на другую, а за тем связывал эти плоскости по различным координатам.

И возникновение ООП как раз и было необходимо для того, чтобы в программе отделять одни модули от других, одни объекты от других, и эти объекты являются как бы "сгустками" данных, которые взаимодействуют между собой, как и в реальном мире.

Просто таблицы, табличный интерфейс, легче строить, но он неудобен, когда данные сложны, имеют сложную структуру.

Кстати, данные в момент работы программы находятся не в таблицах, а в памяти в «своём» формате, а доступ к ним осуществляется НЕ ЧЕРЕЗ ТАБЛИЦЫ, а с помощью ООП интерфейса (если брать объектно-ориентированный подход).

Но, к сожалению, что касается ООСУБД, то они не в пике развития находятся, тут надо смотреть, почему РСУБД имеют большую поддержку, наверное, по той причине, что и ООП не сразу возник. Когда развивалось ООП, ООСУБД только начали развиваться, и в этот момент, естественно, наиболее простые РСУБД захватили почти весь рынок, да и сами данные были не такими сложными, просто их делили на части по смыслу и хранили так.
dry.gif

Спустя 1 час, 10 минут, 25 секунд (23.03.2009 - 23:42) Programmer написал(а):
Допустим, есть библиотека, пускай в ней хранится информация о видах искусств мира, их описание, конкретные произведения, авторы (создатели).

В РСУБД, чтобы сохранить эту информацию, мы бы создали следующие таблицы:
- виды искусства (название, способ выражения, описание, распространение, родитель …);
- авторы произведений искусства (имя, описание, биография…);
- произведения (название, содержание, описание, автор, вид искусства…);

Понятно, что пример не такой большой, чтобы иметь выгоду ООСУБД, но выгода будет видна, если представить, что данные имеют большую вложенность (в каждом искусстве свои направления), да и читаться такие данные в РСУБД будут сложно и запутанно, а в ООСУБД – легко!

В ООСУБД, чтобы хранить эту информацию, нужно создать суперкласс «ИСКУССТВО», объявить в нём статические свойства:
- «название»; (название искусства)
- «способ выражения»; (способ выражения искусства)
- «описание»;
- «распространение»;
- «список авторов»; (список ссылок на авторов)
- «список произведений»; (список ссылок на произведения)
- «список направлений»; (список названий направлений)
- «предок»; (название искусства, в состав которого входит)

И свойства не статические, а объекта (конкретного произведения):
- «название»; (название произведения)
- «содержание»;
- «описание»;
- «автор»; (ссылка на автора)

Одни из методов могут быть:
- создание произведения (конструктор объекта, в параметрах приходит ссылка на автора);
- добавление автора в список авторов (вызвать в конструкторе);
- добавление произведения в список произведений (вызвать в конструкторе);
- а также методы, возвращающие значения свойств;


Чтобы создать направление искусства, например, литературы или худож. искусства, создаётся класс «ЛИТЕРАТУРА», который наследуется от класса «ИСКУССТВО». Дополнительно создаётся метод, который вносит в предок название текущего искусства! А также свойства, характерные для данного вида искусства. В случае таблиц мы имели бы разреженные таблицы, а это неэффективное использование памяти.

Также создаётся класс «АВТОР» со свойствами:
- «список авторов» (ссылки на них); // статическое

- «имя»;
- «описание»;
- «биография»;
- «список произведений» (ссылки на них);

И методы:
- Создание автора (конструктор);
- Создание произведения (с параметром «this», т.е. автор);
- Добавление в список авторов (в статическое свойство);
- Добавление в список произведений;


В результате мы имеем доступ ко всем видам искусств через пространство имён «ИСКУССТВО», через виды искусства – к подвидам и т.д. и авторам данного вида. Ко всем авторам имеем доступ через пространство «АВТОР».
Если нужен доступ сразу ко всем вида и подвидам искусства, нужно добавить метод в подвиды, который заносит в корень («Искусство») все произведения (а также названия подвидов!).

Хотя пример, кажется, выглядит больше в случае с ООСУБД, но если данные представляют большой объём, то ООСУБД работает быстрее и эффективнее, чем РСУБД.
И даже если использовать разные таблицы для разных искусств, то это усложняет базу, делает её нечитабельной, каждый раз придётся добавлять новые таблицы в результате. Иначе – хранить все виды искусства в одной таблице, а ведь разные искусства имеют разные свойства (объясняю своим языком biggrin.gif).
Извиняюсь, что в названии темы пропущено «ва»smile.gif

Спустя 9 часов, 16 минут, 15 секунд (24.03.2009 - 08:58) sergeiss написал(а):
Ну ты и понаписал smile.gif
Но что самое интересное, всё описанное тобой реализуется на 100% на основе существующих БД. "Просто ты не умеешь их готовить" smile.gif

Потому как хочешь ты или не хочешь, но информация внутри любой БД будет храниться в виде файлов, и надо будет организовывать взаимосвязи разных параметров.
Нужны тебе функции (методы в терминологии классов)? Они есть в БД.
Нужны тебе триггеры, срабатывающие при изменении каких-то данных? Они есть в БД.
Хочешь ты запросить "сложно вывернутые данные", но не хочешь делать сложный запрос? Делаешь его один раз внутри БД, а потом обращаешься через простой запрос и даже не паришься о том, как это там устроено.

Надо только научиться с этим работать и потом использовать. Просто "тупо" использовать.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.