Tản mạn về Object Relational Mapping

ORM là gì ?

ORM là 1 kỹ thuật lập trình giúp ánh xạ các record dữ liệu trong hệ quản trị cơ sở dữ liệu sang dạng đối tượng đang định nghĩa trong các class – một khái niệm phổ biến được sử dụng trong tất cả các ngôn ngữ hiện đại ngày nay như: Java, PHP, Ruby. Bạn có thể áp dụng kĩ thật này với bất cứ dự án nào bạn thích

Có hai patterns được áp dụng cho các cách thiết kế ORM khác nhau.

  • Active Record: Một số ORM nổi tiếng sử dụng như: Eloquent, CachePHP, JOOQ, TOPLINK
  • Data Mapper: Một số ORM nổi tiếng sử dụng như: Doctrine, Hibernate, SqlAlchemy

ORM hoạt động như thế nào ?

Cơ bản thì ORM gói gọn CSDL trong 1 object, 1 phần sẽ chứa data phần còn lại sẽ xử lý để biến nó thành CSDL quan hệ.

ORM biểu thị các đối tượng ở đó dữ liệu được hiển thị dưới dạng Object

Ưu nhược điểm của ORM

Ví dụ về lấy danh sách người dùng cùng với bài đăng mới nhất của mỗi người dùng:

PHP
$usersWithLatestPosts = DB::select('
    SELECT u.*, p.*
    FROM users u
    LEFT JOIN (
        SELECT user_id, MAX(created_at) AS latest_post_date
        FROM posts
        GROUP BY user_id
    ) latest_posts ON u.id = latest_posts.user_id
    LEFT JOIN posts p ON u.id = p.user_id AND latest_posts.latest_post_date = p.created_at
');

Đây là cách sử dụng ORM trong laravel

PHP
$usersWithLatestPosts = User::with(['posts' => function ($query) {
    $query->latest()->limit(1);
}])->get();

Như ví dụ ở trên chúng ta sẽ thấy rõ được 1 số ưu điểm khi sử dụng ORM đó là đoạn code sẽ ngắn gọn hơn, đọc vào dễ hiểu và thân thiện với coder hơn. Đó cũng là một ưu điểm nổi bật của ORM khi được áp dụng vào các dự án.

Ưu điểm:

  • Dễ sử dụng và đọc
  • Tính di động và linh hoạt
  • Bảo mật dữ liệu
  • Tương thích với quan hệ đối tượng
  • Tiết kiệm thời gian phát triển

Nhược điểm:

  • Hiệu suất không cao nhất
  • Tùy chỉnh phức tạp
  • Phụ thuộc vào ORM
  • Tối ưu hóa không linh hoạt

Conclusion

Nên mix giữa ORM và Raw SQL sao cho hiệu quả. Với các truy vấn thông thường thì ORM là lựa chọn của mình. Với các tình huống phải thao tác với nhiều bản ghi, raw SQL có vẻ hợp lí hơn. Nhưng khi dùng raw sql bạn phải thực sự cẩn thận về vấn đề Sql Injection.

Cảm ơn các bạn đã theo dõi bài viết trên, trong bài viết có tham khảo từ một số nguồn khác. 🙏🙏🙏

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like
Read More

20 Laravel Eloquent Tips and Tricks (P1)

Eloquent ORM được sủ dụng rất nhiều trong 1 project Laravel, tuy nhiên để sử dụng được tối đa những gì Laravel cung cấp thì không phải ai cũng biết. Trong bài viết này mình sẽ chỉ cho các bạn một vài thủ thuật, hi vọng sẽ giúp ích cho các bạn trong một vài trường hợp cụ thể.
Read More

Có gì mới ở PHP 8.3?

Table of Contents Hide 1. Typed Class Constants2. Dynamic class constant fetch3. json_validate() function4. #[\Override] attribute5. Deep Cloning of readonly Properties6. Randomizer::getBytesFromString() method7. Randomizer::getFloat() and…
Read More

SOLID Principles

Table of Contents Hide Single-responsibility PrincipleOpen/Closed Principle (OCP)Liskov Substitution Principle (LSP)Interface Segregation Principle (ISP)Dependency Inversion Principle (DIP)Advantages of…