Chà, một điều quan trọng cần làm mỗi khi chúng ta có một cuộc thảo luận như thế này là phân biệt rõ ràng giữa các trình ánh xạ quan hệ đối tượng ("ORM") và các lớp trừu tượng hóa cơ sở dữ liệu . ORM là một loại lớp trừu tượng hóa cơ sở dữ liệu, nhưng không phải tất cả các lớp trừu tượng hóa cơ sở dữ liệu đều là ORM. Một công cụ tốt để nghiên cứu để nắm bắt điều này là thư viện SQLAlchemy nổi tiếng của Python , tự quảng cáo là "Bộ công cụ SQL và Bản đồ quan hệ đối tượng" (phần chữ đậm của tôi), với ý tưởng rằng đây là những thứ khác nhau. Khi họ đặt nó trong trang tính năng chính của họ :
Không cần ORM
SQLAlchemy bao gồm hai thành phần riêng biệt, được gọi là Core và ORM . Core tự nó là một bộ công cụ trừu tượng SQL đầy đủ tính năng, cung cấp một lớp trừu tượng trơn tru trên nhiều cách thực hiện và hành vi DBAPI, cũng như Ngôn ngữ biểu thức SQL cho phép biểu hiện ngôn ngữ SQL thông qua các biểu thức Python tổng quát. Một hệ thống biểu diễn lược đồ vừa có thể phát ra các câu lệnh DDL cũng như xem xét các lược đồ hiện có và một hệ thống loại cho phép mọi ánh xạ các loại Python thành các loại cơ sở dữ liệu, làm tròn hệ thống. Object Mapper Mapper sau đó là một gói tùy chọn xây dựng trên Core.
Trang đầu mô tả ORM như thế này:
SQLAlchemy nổi tiếng nhất với trình ánh xạ quan hệ đối tượng (ORM), một thành phần tùy chọn cung cấp mẫu trình ánh xạ dữ liệu, trong đó các lớp có thể được ánh xạ tới cơ sở dữ liệu ở dạng kết thúc mở, nhiều cách - cho phép mô hình đối tượng và lược đồ cơ sở dữ liệu phát triển theo cách tách sạch ngay từ đầu.
Ý tưởng chính của ORM là thử và kết nối sự không phù hợp trở kháng quan hệ đối tượng nổi tiếng . Điều này có nghĩa là xác định mối quan hệ giữa các lớp do người dùng định nghĩa với các bảng trong lược đồ cơ sở dữ liệu và cung cấp các hoạt động "lưu" và "tải" tự động cho các lớp của ứng dụng của bạn.
Ngược lại, các lớp trừu tượng hóa cơ sở dữ liệu không phải ORM có xu hướng cam kết nhiều hơn với mô hình dữ liệu quan hệ và SQL, và hoàn toàn không hướng đến đối tượng. Vì vậy, thay vì làm nổi bật "ánh xạ" giữa các bảng và các lớp và ẩn lược đồ cơ sở dữ liệu khỏi lập trình viên, họ có xu hướng hiển thị cơ sở dữ liệu cho lập trình viên nhưng với các API và trừu tượng tốt hơn. Ví dụ: các trình tạo truy vấn SQL cho phép bạn tạo các truy vấn SQL phức tạp theo chương trình, không cần thao tác chuỗi, như thế này ( một ví dụ từ thư viện jOOQ cho Java ):
// Typesafely execute the SQL statement directly with jOOQ
Result<Record3<String, String, String>> result =
create.select(BOOK.TITLE, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
.from(BOOK)
.join(AUTHOR)
.on(BOOK.AUTHOR_ID.equal(AUTHOR.ID))
.where(BOOK.PUBLISHED_IN.equal(1948))
.fetch();
Bây giờ, khung Play dường như không liên kết 100% với những gì tôi vừa mô tả , nhưng đối số của chúng dường như nằm trong không gian chung này: làm việc trực tiếp với mô hình quan hệ thay vì dịch nó sang các lớp và quay lại từ chúng.
Các thư viện jOOQ là giá trị nghiên cứu như một đối trọng ORMs. Họ cũng có một số mục blog có liên quan đáng để đọc: