JDBC 호환 응용 프로그램은 SQL 문을 어디에 저장해야하며 그 이유는 무엇입니까?
지금까지 다음 옵션을 확인했습니다.
- 비즈니스 객체에 하드 코딩 됨
- 에 포함 된 SQLJ의 절
- 별도의 클래스 (예 : 데이터 액세스 개체)로 캡슐화
- 메타 데이터 기반 (데이터 스키마에서 개체 스키마 분리-메타 데이터에서 개체 스키마 간의 매핑 설명)
- 외부 파일 (예 : 속성 또는 리소스 파일)
- 저장 프로 시저
각각의“장점”과“단점”은 무엇입니까?
SQL 코드는 "코드"또는 "메타 데이터"로 간주되어야합니까?
저장 프로시 저는 성능 최적화를 위해서만 사용해야합니까? 아니면 데이터베이스 구조의 합법적 인 추상화입니까?
성능이 결정의 핵심 요소입니까? 무엇에 대해 공급 업체에 종속 ?
더 나은 것은 무엇입니까-느슨한 결합 또는 단단한 결합 및 그 이유는 무엇입니까?
편집 됨 : 답변 해주신 모든 분들께 감사드립니다. 요약은 다음과 같습니다.
메타 데이터 기반 즉, 객체 관계형 매핑 (ORM)
장점 :
- 매우 추상적-모델 변경없이 DB 서버 전환 가능
- 광범위-실질적인 표준
- 필요한 SQL의 양을 줄입니다.
- 리소스 파일에 SQL 저장 가능
- 성능은 (일반적으로) 허용 가능합니다.
- 메타 데이터 기반 접근 방식
- (데이터베이스) 공급 업체 독립성
단점 :
- SQL 및 진정한 개발자 의도를 숨 깁니다.
- DBA가 검토 / 변경하기 어려운 SQL
- 이상한 경우에는 SQL이 여전히 필요할 수 있습니다.
- 독점 쿼리 언어 (예 : HQL)를 강제로 사용할 수 있습니다.
- 최적화 (추상화)에 적합하지 않음
- 참조 무결성이 부족할 수 있습니다.
- SQL 지식 부족 또는 DB의 코드 작성에 대한주의 부족을 대체합니다.
- 기본 데이터베이스 성능과 일치하지 않음 (가까워 지더라도)
- 모델 코드는 데이터베이스 모델과 매우 밀접하게 결합되어 있습니다.
DAO 레이어에서 하드 코딩 / 캡슐화 됨
장점 :
- SQL은 데이터에 액세스하는 객체에 보관됩니다 (캡슐화).
- SQL은 작성하기 쉽습니다 (개발 속도).
- SQL은 변경이 필요할 때 쉽게 추적 할 수 있습니다.
- 간단한 솔루션 (복잡한 아키텍처 없음)
단점 :
- SQL은 DBA가 검토 / 변경할 수 없습니다.
- SQL은 DB 전용이 될 가능성이 높습니다.
- SQL 유지 관리가 어려워 질 수 있음
저장 프로 시저
장점 :
- 데이터베이스에 보관 된 SQL (데이터에 가깝게)
- SQL은 DBMS에 의해 구문 분석, 컴파일 및 최적화됩니다.
- SQL은 DBA가 검토 / 변경하기 쉽습니다.
- 네트워크 트래픽 감소
- 보안 강화
단점 :
- SQL이 데이터베이스에 연결됨 (공급 업체 잠금)
- SQL 코드는 유지하기가 더 어렵습니다.
외부 파일 (예 : 속성 또는 리소스 파일)
장점
- 애플리케이션을 다시 빌드 할 필요없이 SQL을 변경할 수 있습니다.
- 애플리케이션 비즈니스 로직에서 SQL 로직 분리
- 모든 SQL 문의 중앙 저장소 – 유지 관리가 더 쉽습니다.
- 이해하기 더 쉬움
단점 :
- SQL 코드를 유지 관리 할 수 없게 될 수 있음
- SQL 코드에서 (구문) 오류를 확인하기가 더 어렵습니다.
SQLJ 절에 포함
장점 :
- 더 나은 구문 검사
단점 :
- 자바와 너무 가깝게 연결
- JDBC보다 낮은 성능
- 동적 쿼리 부족
- 그렇게 인기가 없다