Không thể nói liệu một thiết kế cơ sở dữ liệu cụ thể có xấu hay không mà không biết ứng dụng đang làm gì, hình dạng của dữ liệu, kỳ vọng về hiệu năng, v.v. Mặc dù thông thường hóa (ở một mức độ nào đó) được coi là thực tiễn tốt nhất, nhưng khá phổ biến đối với các khu vực cơ sở dữ liệu vì lý do hiệu suất rất tốt và xấu là rất nhiều để thảo luận mà không có nhiều dữ liệu hơn so với hầu hết mọi người khi họ bắt đầu.
Thêm vào nhiều cách tiếp cận có thể được đưa ra để phản đối ánh xạ quan hệ và mọi thứ trở nên phức tạp hơn vì cấu trúc cơ sở dữ liệu "tốt nhất" sẽ phụ thuộc vào mô hình đối tượng cụ thể, mức độ kế thừa, v.v.
Bằng cách lấy một kích thước phù hợp với tất cả các thư viện kiên trì ORM sẽ luôn tạo ra cấu trúc cơ sở dữ liệu không tối ưu cho bất kỳ tình huống cụ thể nào và sẽ sử dụng một số điều có thể được coi là thực tiễn xấu cho tình huống cụ thể đó .
Bạn chắc chắn có thể viết một ORM đã được chuẩn hóa nhưng bạn sẽ thấy hàm ý hiệu năng khá lớn vì mỗi lần chèn vào một bảng chính, nó cần quét các bảng tra cứu khác nhau để xem các giá trị có tồn tại không, nếu chúng có lấy khóa của chúng và nếu chúng không có khóa 't thực hiện các chèn có liên quan.
(Khi bạn làm điều này bằng tay, bạn có thể cắt ngắn một số điều này vì bạn biết rằng bạn đã đưa chúng xuống chỉ chứa giá trị hợp lệ để bạn không cần phải thực hiện các tra cứu này, bạn chỉ cần sử dụng khóa hạnh phúc để hợp lệ, ORM không thể đưa ra giả định đó vì nó không kiểm soát UI.)
Nhưng điều bạn phải nhớ là họ không nhằm tối ưu hóa hiệu suất cơ sở dữ liệu hoặc tính toàn vẹn dữ liệu, họ đang tối ưu hóa cho tốc độ phát triển . Nếu cấu trúc cụ thể của dữ liệu của bạn là quan trọng đối với bạn thì bạn cần phải viết mã ánh xạ đối tượng / RDBMS bằng tay hoặc ít nhất là đánh giá chi tiết tất cả các thư viện có sẵn và chọn một thư viện đáp ứng hầu hết nhu cầu của bạn ( nếu một cái tồn tại).
Về cơ bản, nó đi theo yêu cầu và đánh đổi giữa dữ liệu có cấu trúc tốt, hiệu suất cơ sở dữ liệu và tốc độ phát triển. Cũng như nhiều sự đánh đổi, bạn không được chọn cả ba.