2010-03-26 3 views
0

응용 프로그램이 기본 데이터베이스 스키마를 변경하는 것을 허용하는 경우 (있는 경우)는 어떤 경우에 해당합니까? 나는. 새 열을 추가하십시오.기본 db 스키마를 수정하는 응용 프로그램

편집 :이 질문을 재촉하도록 유도 한 내용에 대한 약간의 상세 설명. 내 시스템은 다른 시스템에서 raport 파일을 받아서 가져온 데이터를 "reports"테이블에 저장합니다. 보고서에는 날짜, 금액, unit_price 등 하드 코딩 된 여러 매개 변수가 포함되어 있습니다. 이 매개 변수는 "보고서"테이블의 적절한 열에 저장됩니다. 보고서 파일에서 읽고 db에 삽입 할 수있는 새로운 매개 변수를 동적으로 (웹 인터페이스를 통해) 추가 할 수 있어야합니다.

하나의 옵션은 일부 직렬화 된 형식으로 보고서를 저장하는 것이지만 성능 문제가 있습니다. 매일 수천 개의 보고서가 있으며 매개 변수 값에 따라 "보고서"테이블을 쿼리해야 할 필요가 있습니다.

답변

2

처음으로 새 버전을로드 할 때. 이것은 각 고유 한 인스턴스에 데이터베이스를 할당하는 시스템에 특히 적합합니다. 데이터는 시스템 변수 표시, 다른 게시물에 관해서

show columns from test like 'new_column'; 
if (! new_column) 
    alter table add column new_column after some_column 

처럼 뭔가를 업데이트하기 전에 테스트해야 쓰기가, 동일한 데이터베이스 스키마 (하지만 다른 인스턴스에 증분 버전을 가진 시스템을 실행하는 경우 이러한 스키마를 변경하는 유일한 방법은 프로그래밍 방식으로 데이터베이스를 업데이트하는 것입니다. 그렇지 않으면 응용 프로그램 버전 (예 : 1.0 및 1.1)과 스키마간에 불일치가 생깁니다. 모든 데이터베이스에서 데이터베이스 변경을 적용 할 수 없습니다. 이 시간에 같은 시간.

+0

+1 좋은 지적입니다. (앱 코드 자체에서 업데이트 단계를 분리 해낼 수는 있지만 머리카락이 쪼개지는 것 같습니다.) – davek

1

간단히 말하면 절대 사용하지 마십시오. 데이터베이스 구조 변경은 제어 된 변경이어야합니다. 예를 들어 한 버전에서 다른 버전으로 데이터베이스를 업그레이드하도록 설계된 응용 프로그램 이외의 응용 프로그램이이 제어를 위반할 수 있습니다.

아마도 이것이 좋은 생각이라고 생각하는 이유나 질문을 묻는 메시지에 대해 자세히 설명 할 수 있습니다.

1

나는 결코. POJO를 변경하고 Hibernate로 하여금 데이터베이스에 필요한 모든 변경 사항을 전달할 수있게하는 것은 가능하다는 것을 알고 있지만 이것은 스키마의 적절한 구성 관리를 수행 할 수있는 기능을 제거하기 때문에 잘못된 생각입니다.

EDIT : 가능한 예외 : 앤디의 대답을 참조하십시오 (여전히 응용 프로그램 자체에서 업데이트 단계를 시도하고 있지만).

관련 문제