Justin Cave là chính xác rằng điều này có thể dẫn đến dữ liệu dư thừa, nhưng điều này thực sự phụ thuộc vào cách bạn thiết kế cơ sở dữ liệu của bạn.
Cách tiếp cận nối tiếp toàn bộ một đối tượng vào một đốm màu không quá đáng như hầu hết mọi người ở đây nghĩ. Trên thực tế, đối với một số ứng dụng, đây có thể là thiết kế tốt nhất bạn có thể làm, như tôi đã giải thích ở đây: /programming//a/12644223/1121352 .
Thật vậy, việc tuần tự hóa một đối tượng dẫn đến ít nhất hai lợi ích:
1- Giảm sự không phù hợp trở kháng : một số loại Java không có sẵn trong SQL, đặc biệt nếu bạn sử dụng nhiều lớp và loại tùy chỉnh, do đó chuyển đổi qua lại từ các đối tượng Java sang SQL có thể là một rắc rối lớn và thậm chí dẫn đến sự mơ hồ.
2- Linh hoạt hơn trong lược đồ của bạn . Thật vậy, các lược đồ quan hệ thực sự tuyệt vời cho dữ liệu có cùng cấu trúc, nhưng nếu một số đối tượng của bạn trong một lớp có thể có các thuộc tính khác nhau tùy thuộc vào các điều kiện trong thời gian chạy, các lược đồ quan hệ có thể cản trở đáng kể luồng công việc của bạn.
Vì vậy, chắc chắn có những lợi ích cho cách tiếp cận này (ít nhất là hai, nhưng chắc chắn là những cách khác mà tôi không trích dẫn), nhưng tất nhiên chi phí rất lớn phải trả là bạn mất gần như tất cả các lợi ích của lược đồ quan hệ.
Tuy nhiên, bạn có thể tận dụng tốt nhất cả hai thế giới nếu bạn thiết kế cẩn thận cơ sở dữ liệu của mình: bạn vẫn có thể đặt lược đồ quan hệ (nghĩa là: các cột khóa duy nhất) bằng cách sử dụng các thuộc tính duy nhất cho từng đối tượng và sau đó lưu trữ đối tượng trong blob . Theo cách này, bạn vẫn có thể đảm bảo truy xuất nhanh đối tượng của mình với một số định danh duy nhất được xác định bởi các thuộc tính của đối tượng, đồng thời giảm sự dư thừa, trong khi bạn hủy bỏ sự không khớp trở kháng và giữ tính linh hoạt hoàn toàn của các đối tượng Java.
Một lưu ý phụ, có một vài nỗ lực của một số nhà sản xuất DB để trộn các mô hình đối tượng và đối tượng lại với nhau, như kiểu dữ liệu JSON trong PostQuery và PostgreQuery để bạn có thể xử lý trực tiếp JSON giống như bất kỳ cột quan hệ nào, và cả SQL3 và OQL (Đối tượng Ngôn ngữ truy vấn) để thêm (giới hạn) các đối tượng hỗ trợ vào SQL.
Cuối cùng, tất cả chỉ là vấn đề thiết kế và thỏa hiệp giữa mô hình quan hệ và mô hình đối tượng.
/ EDIT sau khi đọc bình luận: tất nhiên, nếu dữ liệu của bạn phải có thể tìm kiếm được ("có thể truy vấn"), bạn KHÔNG nên lưu trữ dữ liệu của mình dưới dạng blob. Nhưng nếu một số phần dữ liệu của bạn không có nghĩa là có thể tìm kiếm được , mà là một loại dữ liệu meta nào đó, thì việc lưu trữ phần dữ liệu này dưới dạng đối tượng trong một blob có thể là một giải pháp tốt, đặc biệt nếu dữ liệu meta này có cấu trúc linh hoạt và có thể thay đổi từ đối tượng này sang đối tượng khác.