Khi bạn đang tiếp cận ứng dụng từ phối cảnh cơ sở dữ liệu giống như Doctrine2 (PHP) hoặc Hibernate (Java) mà từ đó nó được "dẫn xuất", không thích hợp. Chúng phù hợp hơn nhiều khi bạn muốn đi theo cách khác (ví dụ: "Tôi có mô hình miền OO và cần tồn tại trong một db quan hệ", không phải "Tôi có một db quan hệ và muốn một giao diện OO (được tạo ra) cho nó, mà không thực hiện bất kỳ thỏa hiệp nào ở phía cơ sở dữ liệu "). Nếu bạn sử dụng chúng mặc dù sự khác biệt quan trọng trong các phương pháp tiếp cận và bạn yêu thích lược đồ quan hệ của bạn nhiều hơn mô hình đối tượng của bạn, bạn sẽ chỉ nhận được thất vọng.
Điều thực sự quan trọng là phân biệt giữa các loại công cụ ORM khác nhau khi chúng có xu hướng tập trung vào các mô hình phát triển khác nhau.
Có thể thử Propel hoặc RedBeanPHP, có vẻ phù hợp với mô hình phát triển dựa trên cơ sở dữ liệu mà hầu như không có ánh xạ, chỉ đơn thuần là các đối tượng dữ liệu "thuần túy" và không trừu tượng. Các trường khóa ngoài chỉ được đưa vào các đối tượng trực tiếp trong các giải pháp này, v.v. để chúng có thể "hỗ trợ" tất cả nội dung tổng hợp mà bạn muốn.
Các giải pháp như Doctrine2 hoặc Hibernate không khuyến khích sử dụng các phím tổng hợp và do đó chỉ hỗ trợ chúng lên đến một mức nhất định (Hibernate đi khá xa nhưng chúng không được khuyến nghị sử dụng).
Cá nhân tôi không phải là người hâm mộ các phím tổng hợp (ngoại trừ các bảng liên kết nhiều liên kết thuần túy không có dữ liệu bổ sung) vì tôi có xu hướng tiếp cận nhiều thứ hơn từ ứng dụng/miền-mô hình/đối tượng và có các phím tổng hợp được ánh xạ tới các đối tượng thường là một nỗi đau để làm việc với, ngay cả khi công nghệ ánh xạ bên dưới hỗ trợ chúng. Các khóa thay thế (hoặc ít nhất là các khóa tự nhiên một trường) làm cho mọi thứ trở nên đơn giản hơn nhiều. Tôi không phải là một nhà quan hệ tình dục-bình thường-cơ sở dữ liệu-bình thường hóa và "hiệu suất tốt hơn" là rất có vấn đề từ quan điểm của tôi. Việc lưu một lần tham gia không thường xuyên sẽ không giúp bạn tiết kiệm nếu bạn có vấn đề về hiệu năng thực sự trong một hệ thống.
Không, thông tin của bạn là vô ích. Ngay cả Doctrine 1 cũng hỗ trợ các khóa chính kết hợp. Tôi cần quan hệ nhiều cột dựa trên khóa tổng hợp chính và khóa ngoài tổng hợp. Tài liệu tham khảo Doctrine 2 nói rằng nó không hỗ trợ ở đây: http://www.doctrine-project.org/projects/orm/2.0/docs/reference/limitations-and-known-issues/en#limitations-and-known -issues – Daimon
vâng, xin lỗi, bạn nói đúng, tôi havent thấy điều đó. Tôi đã làm việc với v1.2 – trix
Tôi cũng đang sử dụng Doctrine v1.2 ngay bây giờ. Trong trường hợp này tôi tạo ra các phím thay thế xấu xí mô phỏng tính năng cần thiết ... nhưng nó phá hỏng thiết kế dữ liệu quan hệ tốt và kết thúc với hiệu suất thấp hơn (chỉ số không cần thiết) – Daimon