Sự khác biệt giữa ORM và ODM là gì?


156

Tôi đang cố gắng tìm ra sự khác biệt giữa ORM và ODM, theo như tôi hiểu khái niệm này, ORM (Map Relistic Mapper) ánh xạ các mối quan hệ giữa dữ liệu, trong đó như ODM (Map Document Mapper) xử lý các tài liệu. Tôi có đúng không khi cho rằng myQuery là một ví dụ về ORM và MongoDB là một ví dụ về ODM?

Như tôi chắc chắn bạn có thể thấy, tôi không quá quen thuộc với lý thuyết của khái niệm này. Ai đó có thể xin vui lòng làm rõ sự khác biệt giữa hai?

Câu trả lời:


173

MySQL là một ví dụ về cơ sở dữ liệu quan hệ - bạn sẽ sử dụng ORM để dịch giữa các đối tượng của mình trong mã và biểu diễn quan hệ của dữ liệu.

Ví dụ về các ORM là nHibernate , Entity Framework , Dapper và hơn thế nữa ...

MongoDB là một ví dụ về cơ sở dữ liệu tài liệu - bạn sẽ sử dụng một ODM để dịch giữa các đối tượng của bạn trong mã và biểu diễn tài liệu của dữ liệu (nếu cần).

Mandango là một ví dụ về một ODM cho MongoDB.


8
Bạn có thể có các khung ORM / ODM lai, như mORMot cho Delphi , Doctrine cho PHP hoặc Hibernate OGM cho Java . Và một số cơ sở dữ liệu SQL hỗ trợ mạnh mẽ cho các tài liệu, ví dụ PostgresQuery tuyệt vời có các kiểu dữ liệu JSON hoặc JSONB để bạn có thể trộn RDBMS và lưu trữ hướng tài liệu trong cùng một bảng, bao gồm các chỉ mục và truy vấn nâng cao!
Arnaud Bouchez

Vì vậy, bạn đang nói các tài liệu là tài liệu ... có ý nghĩa!
HashRocketSyntax

cầy mangut là một ODM hay ORM?
YL

1
cầy mangut, cầy mangut đều là của ODM. Tôi đoán đối với một noQuery chúng ta chỉ có thể có các ODM.
Luna Lovegood

27

Một ORM ánh xạ giữa Mô hình đối tượng và Cơ sở dữ liệu quan hệ. Một bản đồ ODM giữa Mô hình đối tượng và Cơ sở dữ liệu tài liệu. MySQL không phải là ORM, nó là Cơ sở dữ liệu quan hệ, cụ thể hơn là Cơ sở dữ liệu SQL. MongoDB không phải là một ODM, nó là Cơ sở dữ liệu Tài liệu.


Giải thích tuyệt vời! Tôi vẫn chưa rõ liệu ODM / ORM có phải là các lớp trừu tượng được cung cấp bởi cơ sở dữ liệu cơ sở hoặc bởi các thư viện trình điều khiển hay chúng là một lớp riêng biệt giữa trình điều khiển và DB? Có thể có trình điều khiển ORM cho Cơ sở dữ liệu Tài liệu và ngược lại không?
pooya13

10

Về cơ bản, ORM sử dụng Trình điều khiển cơ sở dữ liệu SQL như ODBC, JDBC hoặc OLEDB để dịch ký hiệu đối tượng sang ký hiệu quan hệ và một ODM sử dụng api JSON hoặc JSONB để dịch ký hiệu Đối tượng sang ký hiệu Tài liệu.

Có nhiều loại thực hiện khác nhau dưới mui xe.

PS: JSONB là một ký hiệu tài liệu văn bản JSON được lưu trữ ở định dạng nhị phân như được sử dụng bởi MongoDB.


1
về mặt kỹ thuật, ODBC và JDBC là các Thông số API mà trình điều khiển thực hiện.
asg

2
Postgres cũng hỗ trợ JSONB
Luna Lovegood

3

Khi bạn lần đầu tiên học cách làm việc với cơ sở dữ liệu, tất cả sẽ có hai loại thiết lập cơ sở dữ liệu là ORM (Ánh xạ quan hệ đối tượng) và ODM (Ánh xạ tài liệu đối tượng)

ORM là để ánh xạ một đối tượng với một thế giới quan hệ, về cơ bản nó chuyển đổi dữ liệu giữa các loại không tương thích trong các ngôn ngữ lập trình hướng đối tượng. ORM bao bọc các chi tiết cụ thể triển khai của trình điều khiển lưu trữ trong API (giao diện chương trình ứng dụng) và ánh xạ các trường quan hệ đến các thành viên đối tượng. Ví dụ: nếu tôi có một bảng nhân viên, nó được ánh xạ tới một đối tượng duy nhất cho tất cả nhân viên, với các phương thức khác nhau được liên kết với nó.

Mặt khác, ODM là Trình ánh xạ tài liệu đối tượng, ánh xạ các đối tượng với Cơ sở dữ liệu tài liệu như MongoDB.

Sự khác biệt chính là ORM dành cho cơ sở dữ liệu MySQL, trong khi đó, ODM thực hiện ánh xạ để thể hiện tài liệu của dữ liệu. cách tốt nhất để nhớ những gì ORM sẽ làm là nghĩ về nó như một bảng tính excel, với các hàng và cột. Khi sử dụng thiết lập này, bạn muốn chắc chắn rằng bạn có một kế hoạch tuyệt vời về cách bạn muốn giải quyết ứng dụng hiện tại, nó không cho phép nhiều sửa đổi như ODM thực hiện. Với ODM, chúng ta có thể dễ dàng thêm các trường và thuộc tính mới nhưng với ORM khi thêm một trường mới, bạn cần lưu ý rằng không có gì trống nên nó cần một giá trị như mặc định trừ khi bạn muốn đi vào từng trường và sửa đổi.


2

Mongoose là một ví dụ điển hình cho ODM (Mô hình dữ liệu đối tượng) cho MongoDB, trong đó bạn có thể trực tiếp thực hiện các thao tác với các đối tượng và được dịch sang truy vấn và lược đồ thích hợp. Nó có thể được tìm thấy ở đây tại https://mongoosejs.com/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.