LINUX.ORG.RU

Вопрос по объектно-ориентированным СУБД и хранению данных в виде типов и объектов.


0

0

Здравствуйте. Извиняюсь, если дублирую какую-нибудь тему или пишу не в тот форум.

Вот уже неделю ищу информацию в интернете по поводу того, на каком этапе сейчас развитие ООСУБД в мире. Я сам занимаюсь веб-разработкой, опыт небольшой, раньше вёрсткой занимался, а сейчас именно программированием. Имею небольшой опыт работы с MySQL. Но так как я сейчас занимаюсь объектно-ориентированным программированием, в частности на PHP, то возникает желание чтобы и в базе данные хранились в виде объектов, то есть ближе к естественному состоянию. Данные бывают разные, и как-то не хочется размещать их в таблицах. Мне не трудно это делать в таблицах, но, прочитав в интернете о принципах ООСУБД, появилось огромное желание найти эту СУБД. К сожалению, предлагаемые СУБД имеют встроенный язык программирования, неужели нет таких же наподое той же MySQL. Вроде же есть язык запросов OQL, как раз для цели выборки данных из ООСУБД, неужели нельзя обойтись просто поддержкой на внутреннем уровне OQL, а они встраивают тот же C++, как будто нет других языков. Вот тут непонятно, конечно. Можно было оставлять просто интерфейс доступа, независимо для языка.

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

На случай если таких сейчас нет, имеет ли смысл тогда хранить данные в таблицах так: таблица типов, таблица описания типов, таблица описания свойств, таблица объектов, таблица значений свойтсв объектов. Но как тогда хранить массивы и деревья разной структуры? Кто-нибудь такое делает, или я придумываю себе лишнюю работу?

Можешь ORM использовать, будет типа как объект

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

> А вот OpenLDAP не сайдёт за ООСУБД

LDAP иерархический

phasma ★☆
()
Ответ на: комментарий от tailgunner

Спасибо.

Postgres - очень интересная БД, есть пользовательские типы (я так понял, что от пользовательских типов могут создаваться только таблицы), массивы, возможность наследования таблиц (сами типы наследоваться не могут?) и многое другое. На него даже имеет смысл переходить с MySQL, конечно, кому это надо.

Что касается ORM, интересно было бы узнать, поддерживает ли он свойство-массивы (списки и ассоциативные, деревья), свойства-ссылки у объекта. И насколько при этом замедляется БД, кто-нибудь имеет опыт работы с ним?

Programmer
() автор топика

В принципе, по тому, что хочется, может быть лучше посмотреть на технологию репозиториев. Не знаю, что там с PHP, для Java есть спецификация JCR и ее реализация Jackrabbit.

svr69 ★★
()
Ответ на: комментарий от svr69

> Отчасти встали

От очень малой части.

> У Cach\'e были и есть толстые инсталляции

Cache появилась раньше ООСУБД и не является ООСУБД, IIRC.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Cache появилась раньше ООСУБД и не является ООСУБД, IIRC

Что значит раньше ООСУБД? Раньше 1995? Ну может быть, уже не помню, но вообще объектные базы данных разрабатывались еще в 80-х. И да, Cache - объектная база данных, хотя у нее и есть интерфейс SQL.

svr69 ★★
()
Ответ на: комментарий от svr69

> Что значит раньше ООСУБД? Раньше 1995?

Раньше середины 80-х.

> И да, Cache - объектная база данных, хотя у нее и есть интерфейс SQL.

Cache - многомерная БД. И SQL, и объектный интерфейс ей не родные.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Раньше середины 80-x? На intersystems.com:

The development of Caché began in 1995 as successor product to InterSystems' family of ANSI-Standard M-based database products.

Никому верить нельзя, даже производителю. Ну и odms.org тоже врет как сивый мерин. Ужас.

svr69 ★★
()
Ответ на: комментарий от svr69

> The development of Caché began in 1995 as successor product to InterSystems' family of ANSI-Standard M-based database products.

"Founded in 1978 by Phillip T. (Terry) Ragon, who remains its CEO.

InterSystems was one of the original vendors of M-technology (aka MUMPS) systems, with a product called ISM. Over the years, InterSystems acquired several other MUMPS implementations"

"Internally, Caché stores data in multidimensional arrays capable of carrying hierarchically structured data. These are the same “global” data structures used by the MUMPS database language"

Это значит, что Cache как продукт - очень старая, с корнями в 70-х. Просто в 1997 она получила новое имя.

> Никому верить нельзя, даже производителю.

Особенно производителю.

> Ну и odms.org тоже врет как сивый мерин. Ужас.

Ты просто не понял, что там сказано.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Не буду спорить, тем более, что с Cache я не работал. Просто обычно она позиционируется как объектная.

svr69 ★★
()

Вот некоторый список ООСУБД

http://www.versant.com/ http://www.db4o.com/ http://www.intersystems.com/ http://www.neodatis.org/ http://www.objectdb.com/ http://www.objectivity.com/ http://www.orientechnologies.com/cms/

по моему мнению встроенный язык вообще не нужен. нужна интеграция с существующими языками. я сам пользовался интеграцией с java (JDO)

lbvf
()

для пистона есть zope object db

dimon555 ★★★★★
()

Я бы посоветовал любопытствовать в сторону db4o. Это для явы и дотнета, но есть информация вроде простых туториалов на русском. Объекты в базе хранятся прямо в виде объектов. То есть ты получаешь прямо объект. Нет ни каких таблиц и прочего. просто делашь какую то операцию вроде $myObj = getFromDb( Person("Паша", "Козлов") ); и у тебя объект. Никаких таблиц и отображений. Очень удобно на первый взгляд. В реальности ни разу применять не пробовал. Из того, что знаю, насколько я понял для конкретно для веба возникнут проблемы создания отчётов, так как средства создания этих самых отчётов либо слабо развиты, либо почти отсутствуют. Хотя вроде автор в одной статье намекал что есть что-то. Но сказал "если вы думаете, что нет, можете в принципе не заморачиваться. Но если очень хотите - попробуйте, может понравится". Ну то есть по русски если и на языке php-шника, то так примерно - сложно будет выбрать наиболее популярные картинки за день, и прочую подобную лабуду.

Пару ссылочек для затравки

http://dev.net.ua/blogs/servicedeveloper/archive/2008/03/26/5776.aspx

http://www.ibm.com/developerworks/ru/library/j-db4o6/index.html?ca=dre-ru-0114

Да,для php вроде нет ничего свободного. По крайней мере я не нашёл, Когда искал. Если найдёшь чего - создай тему в толксах, ибо любопытно, пжл.

AndreyKl ★★★★★
()
Ответ на: комментарий от theri

то есть удобно использовать ORM вместе с модулем валидации данных из форм

[code]


sub edit : Local Form {
     my ($self, $c, $address_id, $person_id) = @_;
     my $address : Stashed;
     if(!$address_id && $person_id){
         # we're adding a new address to $person
         # check that person exists
         my $person = $c->model('AddressDB::People')->
                                      find({id => $person_id});
             if(!$person){
                $c->stash->{error} = 'No such person!';
                $c->detach('/person/list');
             }
         # create the new address
             $address = $c->model('AddressDB::Addresses')->
                                       new({person => $person});
   
     }
     else {
         $address = $c->model('AddressDB::Addresses')->
                                   find({id => $address_id});
         if(!$address){
             $c->stash->{error} = 'No such address!';
               $c->detach('/person/list');
         }
     }
     if ($c->form->submitted && $c->form->validate){
             # transfer data from form to database
         $address->location($c->form->field('location'));
         $address->postal ($c->form->field('postal' ));
         $address->phone    ($c->form->field('phone'    ));
         $address->email    ($c->form->field('email'    ));
         $address->insert_or_update;
         $c->stash->{message} =
             ($address_id > 0 ? 'Updated ' : 'Added new ').
                         'address for '. $address->person->name;
         $c->detach('/person/list');
   }
   else {
       # transfer data from database to form
       if(!$address_id){
            $c->stash->{message} = 'Adding a new address ';
       }

             else {
                 $c->stash->{message} = 'Updating an address ';
             }
             $c->stash->{message} .= ' for '. $address->person->name;
             $c->form->field(name => 'location',
                                  value => $address->location);
             $c->form->field(name => 'postal',
                                  value => $address->postal);
             $c->form->field(name => 'phone',
                                  value => $address->phone);
             $c->form->field(name => 'email',
                                  value => $address->email);
         }
     }
     sub delete : Local {
           my ($self, $c, $address_id) = @_;
           my $address = $c->model('AddressDB::Addresses')->
                                            find({id => $address_id});
           if($address){
                 # "Deleted First Last's Home address"
                 $c->stash->{message} =
                       'Deleted ' . $address->person->name. q{'s }.
                             $address->location. ' address';
                 $address->delete;
           }
           else {
                 $c->stash->{error} = 'No such address';
           }
           $c->forward('/person/list');
     }
     1;

[/code]

theri
()
Ответ на: комментарий от theri

Вроде выглядит не так уж и плохо. Но перл.. он меня с детсва пугает. Вот tailgunner'у вроде изменяющая компилятор и перекомпилирующая им себя в рантайме программа на лиспе снится, а мне вот попроще вещи - перл )).

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

Да, я шучу про перл конечно.

Не с детства он мне снится. С тех пор как увидел, вот с тех и снится. А в детстве я его не видел. )

AndreyKl ★★★★★
()
Ответ на: комментарий от theri

да не расстаивайтесь. Я шучу. Честное слово не хотел обидеть. Пример, по моему, интересный.

AndreyKl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.