Một ứng dụng tuân thủ JDBC nên lưu trữ các câu lệnh SQL của nó ở đâu và tại sao?
Cho đến nay, tôi đã quản lý để xác định các tùy chọn này:
- Mã cứng trong các đối tượng kinh doanh
- Được nhúng trong mệnh đề SQLJ
- Đóng gói trong các lớp riêng biệt, ví dụ: Đối tượng truy cập dữ liệu
- Theo hướng siêu dữ liệu (tách lược đồ đối tượng khỏi lược đồ dữ liệu - mô tả ánh xạ giữa chúng trong siêu dữ liệu)
- Các tệp bên ngoài (ví dụ: Thuộc tính hoặc tệp Tài nguyên)
- Thủ tục lưu trữ
"Ưu điểm" và "Nhược điểm" cho mỗi cái là gì?
Mã SQL nên được coi là “mã” hay “siêu dữ liệu”?
Các thủ tục được lưu trữ có nên được sử dụng chỉ để tối ưu hóa hiệu suất hay chúng là một cấu trúc cơ sở dữ liệu trừu tượng hợp pháp?
Hiệu suất có phải là yếu tố quyết định không? Điều gì về khóa nhà cung cấp ?
Điều gì là tốt hơn - khớp nối lỏng lẻo hoặc khớp nối chặt chẽ và tại sao?
ĐÃ CHỈNH SỬA: Cảm ơn mọi người vì câu trả lời - đây là bản tóm tắt:
Điều khiển siêu dữ liệu tức là Ánh xạ quan hệ đối tượng (ORM)
Ưu điểm:
- Rất trừu tượng - Máy chủ DB có thể được chuyển đổi mà không cần thay đổi mô hình
- Phạm vi rộng - thực tế là một tiêu chuẩn
- Cắt giảm lượng SQL cần thiết
- Có thể lưu trữ SQL trong các tệp tài nguyên
- Hiệu suất (thường) chấp nhận được
- Phương pháp tiếp cận theo hướng siêu dữ liệu
- (Cơ sở dữ liệu) độc lập với nhà cung cấp
Nhược điểm:
- Ẩn SQL và ý định thực sự của nhà phát triển
- SQL khó được DBA xem xét / thay đổi
- SQL có thể vẫn cần thiết cho các trường hợp kỳ quặc
- Có thể buộc sử dụng ngôn ngữ truy vấn độc quyền, ví dụ như HQL
- Không tự cho mình tối ưu hóa (trừu tượng hóa)
- Có thể thiếu tính toàn vẹn tham chiếu
- Thay thế cho việc thiếu kiến thức SQL hoặc thiếu cẩn thận để viết mã trong DB
- Không bao giờ khớp với hiệu suất cơ sở dữ liệu gốc (ngay cả khi nó đến gần)
- Mã mô hình rất chặt chẽ kết hợp với mô hình cơ sở dữ liệu
Được mã hóa cứng / đóng gói trong lớp DAO
Ưu điểm:
- SQL được giữ trong các đối tượng truy cập dữ liệu (đóng gói)
- SQL rất dễ viết (tốc độ phát triển)
- SQL dễ theo dõi khi cần thay đổi
- Giải pháp đơn giản (không có kiến trúc lộn xộn)
Nhược điểm:
- SQL không thể được xem xét / thay đổi bởi DBA
- SQL có khả năng trở thành DB cụ thể
- SQL có thể trở nên khó bảo trì
Thủ tục lưu trữ
Ưu điểm:
- SQL được giữ trong cơ sở dữ liệu (gần với dữ liệu)
- SQL được phân tích cú pháp, biên dịch và tối ưu hóa bởi DBMS
- SQL dễ dàng để DBA xem xét / thay đổi
- Giảm lưu lượng mạng
- Tăng cường an ninh
Nhược điểm:
- SQL được gắn với cơ sở dữ liệu (khóa nhà cung cấp)
- Mã SQL khó duy trì hơn
Các tệp bên ngoài (ví dụ: Thuộc tính hoặc tệp Tài nguyên)
Ưu điểm
- SQL có thể được thay đổi mà không cần phải xây dựng lại ứng dụng
- Tách logic SQL khỏi logic nghiệp vụ ứng dụng
- Kho lưu trữ trung tâm của tất cả các câu lệnh SQL - dễ bảo trì hơn
- Dễ hiểu
Nhược điểm:
- Mã SQL có thể trở nên không thể bảo trì được
- Khó kiểm tra mã SQL để tìm lỗi (cú pháp)
Được nhúng trong mệnh đề SQLJ
Ưu điểm:
- Kiểm tra cú pháp tốt hơn
Nhược điểm:
- Liên kết quá chặt chẽ với Java
- Hiệu suất thấp hơn JDBC
- Thiếu truy vấn động
- Không phổ biến lắm