ORM과 ODM의 차이점은 무엇입니까?


157

ORM과 ODM의 차이점을 이해하려고합니다. 개념을 이해하는 한 ORM (Object Relational Mapper)은 ODM (Object Document Mapper)이 문서를 처리하는 데이터 간의 관계를 매핑합니다. mySQL이 ORM의 예이고 MongoDB가 ODM의 예라고 가정해도됩니까?

알다시피, 나는 개념의 이론에 너무 익숙하지 않다. 누군가 두 사람의 차이점을 분명히 설명해 주시겠습니까?

답변:


173

MySQL은 관계형 데이터베이스의 예입니다. ORM을 사용하여 코드의 객체와 데이터의 관계형 표현간에 변환 할 수 있습니다.

ORM의 예로는 nHibernate , Entity Framework , Dapper 등이 있습니다.

MongoDB는 문서 데이터베이스의 예입니다. ODM을 사용하여 코드의 객체와 데이터의 문서 표현 (필요한 경우)간에 변환 할 수 있습니다.

Mandango 는 MongoDB 용 ODM의 예입니다.


8
Delphi 용 mORMot , PHP 용 Doctrine 또는 Java 용 Hibernate OGM 과 같은 하이브리드 ORM / ODM 프레임 워크를 사용할 수 있습니다 . 또한 일부 SQL 데이터베이스는 문서를 강력하게 지원합니다 (예 : JSON 또는 JSONB 데이터 유형 을 특징으로하는 훌륭한 PostgresSQL). 인덱스 및 고급 쿼리를 포함하여 동일한 테이블 내에서 RDBMS 및 문서 지향 스토리지를 혼합 할 수 있습니다!
Arnaud Bouchez

그래서 당신은 문서가 문서라는 것을 말하고 있습니다.
HashRocketSyntax

몽구스는 ODM 또는 ORM입니까?
YL

1
몽구스, 몽고 이드는 모두 ODM입니다. noSQL의 경우 ODM 만 가질 수 있다고 생각합니다.
Luna Lovegood

27

ORM은 오브젝트 모델과 관계형 데이터베이스 사이를 맵핑합니다. ODM은 개체 모델과 문서 데이터베이스간에 매핑됩니다. MySQL은 ORM이 아니며 관계형 데이터베이스,보다 구체적으로 SQL 데이터베이스입니다. MongoDB는 ODM이 아니며 문서 데이터베이스입니다.


좋은 설명! ODM / ORM이 기본 데이터베이스 나 드라이버 라이브러리에 의해 제공되는 추상화 계층인지, 또는 드라이버와 DB 사이에 별도의 계층인지 여전히 확실하지 않습니까? 문서 데이터베이스 용 ORM 드라이버가있을 수 있습니까?
pooya13

10

본질적으로 ORM은 ODBC, JDBC 또는 OLEDB와 같은 SQL 데이터베이스 드라이버를 사용하여 객체 표기법을 관계형 표기법으로 변환하고 ODM은 JSON 또는 JSONB API를 사용하여 객체 표기법을 문서 표기법으로 변환합니다.

후드 아래에는 다른 종류의 구현이 있습니다.

PS : JSONB는 MongoDB에서 사용하는 이진 형식으로 저장된 JSON 텍스트 문서 표기법입니다.


1
기술적으로 말하면, ODBC annd JDBC는 드라이버가 구현하는 API 사양입니다.
asgs

2
포스트 그레스는 너무 JSONB 지원
루나 러브 굿

3

데이터베이스 작업을 처음 배우면 ORM (오브젝트 관계 매핑)과 ODM (오브젝트 문서 매핑)의 두 가지 유형의 데이터베이스 설정으로 나옵니다.

객체를 관계형 세계와 매핑하는 ORM은 기본적으로 객체 지향 프로그래밍 언어에서 호환되지 않는 유형간에 데이터를 변환합니다. ORM은 스토리지 드라이버의 구현 특정 세부 사항을 API (application program interface)로 랩핑하고 관계형 필드를 오브젝트 멤버에 맵핑합니다. 예를 들어 직원 테이블이 있으면 모든 직원에 대한 단일 개체에 매핑되고 다양한 방법이 연결됩니다.

반면에 ODM은 MongoDB와 같은 문서 데이터베이스로 개체를 매핑하는 개체 문서 매퍼입니다.

주된 차이점은 ORM은 MySQL 데이터베이스 용이며 ODM은 데이터의 문서 표현을위한 매핑입니다. ORM이하는 일을 기억하는 가장 좋은 방법은 행과 열이있는 Excel 스프레드 시트로 생각하는 것입니다. 이 설정을 사용하는 경우 현재 응용 프로그램을 처리하는 방법에 대한 훌륭한 계획을 세우고 싶지만 ODM처럼 많은 수정을 허용하지 않습니다. ODM을 사용하면 새 필드와 속성을 쉽게 추가 할 수 있지만 ORM을 사용하면 새 필드를 추가 할 때 아무것도 비워 둘 필요가 없으므로 각 필드에 들어가서 수정하지 않는 한 기본값으로 설정해야합니다.


2

Mongoose는 MongoDB 용 ODM (Object Data Model)의 좋은 예입니다. 여기서 객체를 사용하여 작업을 직접 수행 할 수 있으며 적절한 쿼리 및 스키마로 변환됩니다. https://mongoosejs.com/ 에서 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.