Jaka jest różnica między ORM a ODM?


157

Próbuję dowiedzieć się, jaka jest różnica między ORM i ODM, o ile rozumiem tę koncepcję, ORM (Object Relational Mapper) mapuje relacje między danymi, podczas gdy ODM (Object Document Mapper) zajmuje się dokumentami. Czy mam rację zakładając, że mySQL jest przykładem ORM, a MongoDB jest przykładem ODM?

Jak na pewno widzisz, nie jestem zbyt zaznajomiony z teorią tego pojęcia. Czy mógłby ktoś wyjaśnić różnice między nimi?

Odpowiedzi:


173

MySQL to przykład relacyjnej bazy danych - do tłumaczenia między obiektami w kodzie a relacyjną reprezentacją danych należy użyć ORM.

Przykłady ORM to nHibernate , Entity Framework , Dapper i więcej ...

MongoDB to przykład bazy danych dokumentów - możesz użyć ODM do tłumaczenia między obiektami w kodzie a reprezentacją danych w dokumencie (w razie potrzeby).

Mandango jest przykładem ODM dla MongoDB.


8
Możesz mieć hybrydowe frameworki ORM / ODM, takie jak mORMot for Delphi , Doctrine for PHP lub Hibernate OGM for Java . Niektóre bazy danych SQL mają silne wsparcie dla dokumentów, np. Świetny PostgresSQL, który zawiera typy danych JSON lub JSONB, dzięki czemu można mieszać RDBMS i przechowywanie zorientowane na dokumenty w tej samej tabeli, w tym indeksy i zaawansowane zapytania!
Arnaud Bouchez

Więc mówisz, że dokumenty są dokumentami ... to ma sens!
HashRocketSyntax

mangusta to ODM czy ORM?
YL

1
mangusta, mangusta to odmiany ODM. Myślę, że dla noSQL możemy mieć tylko ODM.
Luna Lovegood

27

Mapa ORM między modelem obiektowym a relacyjną bazą danych. Odwzorowanie ODM między modelem obiektowym a bazą danych dokumentów. MySQL to nie ORM, to relacyjna baza danych, a dokładniej baza danych SQL. MongoDB to nie ODM, to baza danych dokumentów.


Świetne wyjaśnienie! Nadal nie jestem pewien, czy ODM / ORM są warstwami abstrakcji dostarczanymi przez bazową bazę danych lub przez biblioteki sterowników, czy też są one oddzielną warstwą między sterownikiem a bazą danych? Czy może istnieć sterownik ORM dla bazy danych dokumentów i odwrotnie?
pooya 13

10

Zasadniczo ORM używa sterownika bazy danych SQL, takiego jak ODBC, JDBC lub OLEDB, do tłumaczenia notacji obiektowej na notację relacyjną, a ODM używa JSON lub JSONB API do tłumaczenia notacji Object na notację dokumentu.

Pod maską są różnego rodzaju realizacje.

PS: JSONB to notacja dokumentu tekstowego JSON przechowywana w formacie binarnym używanym przez MongoDB.


1
mówiąc technicznie, ODBC i JDBC to specyfikacje API implementowane przez sterownik.
asgs

2
Postgres również obsługuje JSONB
Luna Lovegood

3

Kiedy po raz pierwszy nauczysz się pracy z bazą danych, wszystko sprowadza się do dwóch typów konfiguracji bazy danych, którymi są ORM (mapowanie relacji obiektów) i ODM (mapowanie dokumentu obiektowego)

ORM, który ma mapować obiekt ze światem relacyjnym, w zasadzie konwertuje dane między niekompatybilnymi typami w obiektowych językach programowania. ORM opakowuje specyficzne dla implementacji szczegóły sterowników pamięci masowej w API (interfejs aplikacji) i mapuje pola relacyjne na elementy składowe obiektów. Na przykład, jeśli mam tabelę pracowników, jest ona przypisana do pojedynczego obiektu dla wszystkich pracowników, z różnymi metodami z nim związanymi.

Z drugiej strony ODM to Object Document Mapper, który mapuje obiekty za pomocą bazy danych dokumentów, takiej jak MongoDB.

Główna różnica polega na tym, że ORM jest przeznaczony dla baz danych MySQL, podczas gdy ODM wykonuje mapowanie dla reprezentacji danych w dokumencie. Najlepszym sposobem na zapamiętanie tego, co robi ORM, byłoby myślenie o nim jako o arkuszu kalkulacyjnym programu Excel z wierszami i kolumnami. Korzystając z tej konfiguracji, chcesz mieć pewność, że masz świetny plan, w jaki sposób chcesz poradzić sobie z bieżącą aplikacją, nie pozwala ona na tak wiele modyfikacji, jak robi to ODM. Dzięki ODM możemy łatwo dodawać nowe pola i właściwości, ale z ORM podczas dodawania nowego pola należy pamiętać, że nic nie pozostaje puste, więc musi mieć wartość domyślną, chyba że chcesz wejść do każdego i zmodyfikować.


2

Mongoose jest dobrym przykładem ODM (Object Data Model) dla MongoDB, w którym można bezpośrednio wykonywać operacje na obiektach i który jest tłumaczony na odpowiednie zapytanie i schemat. Można go znaleźć tutaj na https://mongoosejs.com/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.