2009-04-20 7 views
2

매년 우리 회사는 참가자들이 제품을 보여줄 수있는 컨퍼런스/스탠드를 개최합니다.매년 데이터베이스 스키마 변경이 필요합니다. 어떤 전략을 사용해야합니까?

우리는 참가자들이 회의에 등록 할 수있게 해주는 웹 응용 프로그램을 가지고 있습니다. 회사 이름, 결제 정보 등과 같은 정보를 입력 할 수 있습니다.

참가자가 어떤 정보를 입력해야하는지에 대한 요구 사항은 매년 다릅니다.

I.E, 1 년 참가자는 원하는 스탠드의 크기를 입력해야 할 수도 있고, 내년에는 더 이상 필요하지 않을 수도 있습니다. 1 년 동안 원하는 총 m^2를 입력하면되지만, 내년에는 원하는 길이, 높이 및 층 수를 추가해야 할 수도 있습니다.

지난 몇 년 동안, 이로 인해 DB 스키마가 매우 복잡해졌습니다. 이제는 데이터베이스에 '쓸모없는'필드와 테이블이 많이 생겨서 상당히 엉망이되었습니다. 역사적인 이유로, 우리는 매년 스키마를 기본으로 다시 설정할 수 없습니다. 이전 회의의 데이터 중 일부가 필요할 수 있습니다.

So :이 문제를 해결할 수있는 방법에 대해 누구나 알고 있습니까? 내가 생각할 수있는 유일한 해결책은

  • 버전입니다
  • 스토어 XML로 '변화'의 모든 정보 즉, 각 회의에 대한 우리의 데이터베이스

사람이하는 방법에 대한 좋은 litterature가있는 경우 진화하는 데이터베이스를 처리하고 쓸모없는 데이터를 처리하면 좋을 것입니다!

답변

5

이 말을 싫어할 때 엔티티 속성 값 구조가 가장 잘 작동하는 경우 일 수 있습니다. 이 가볍게 사용할 수있는 모델이 아닌

http://en.wikipedia.org/wiki/Entity-Attribute-Value_model

주, 그것으로 심각한 문제가있다. 그러나 이것이 바로 문제 해결의 종류입니다.

1

모든 확장 데이터에 대해 이름 - 값 접근 방식을 사용하는 것이 좋습니다. 본질적으로 매년 정적 데이터를 정의합니다. 이것은 회사 정보와 같은 것입니다. 예를 들어 주소의 정의는 매년 바뀌지 않습니다. 이것들은 정상적으로 수정 될 것입니다.

그러면 모든 질문의 마스터를 포함 할 테이블을 정의하고 그 질문의 유효 연도를 알기 위해 어떻게 든 연결됩니다. 이 테이블은 동적으로 GUI를 만들 수있는 질문에 대한 다른 속성을 나타낼 수도 있습니다.

이 작업을 수행 한 후에도 내가 모델링 한 것의 최종 상태가 아닐 수 있습니다. (나는 아마도 다른 테이블과 연계 될 것입니다. 질문, 그리고 이것은 내가 회사를 연결하는 것입니다.이 방법으로 우리는 계속해서 질문을 재사용 할 수 있습니다.)

Note: I have a picture to go along with tihs need to find a place to upload it too...Will edit soon as I get that up http://i40.tinypic.com/1582ih2.png

0

"우리는 지금 우리의 데이타베이스는 '오래된'필드와 테이블을 많이 가지고, 매우 지저분 보이기 시작합니다. 역사적인 이유로, 우리는 단지에 대한 기본을 다시 스키마를 재설정 할 수 없습니다 우리는 구 회의에서 얻은 데이터 중 일부가 필요할지도 모릅니다. "

필요할 수있는 경우 쓸모가 없습니다.

그러나 프런트 엔드를 일반적으로 코딩합니다. 이는 스탠드 영역 구성 (예 : 사용자가 제공하는)의 모든 형식을 처리 할 수있는 시스템을 갖게되며 향후 발생해야하는 경우 더 많은 기능을 제공한다는 의미입니다.

"standarea"(m^2에 해당하는 영역), "스탠딩 크기"(길이, 너비, 높이 등)와 같은 테이블이있는 경우 - 모델에이 객체를 일치시키는 객체 (StandArea, StandSize)가 있습니다. 이것들은 모두 공통 기본 클래스 인 StandData를 확장 할 수 있습니다.

1 년 한 테이블이 데이터 세트를 가져 오면 내년에 다른 테이블이 데이터를 가져옵니다. DAO는 각 테이블 (parent, err, stand_uid 필드에 의해)에서 각 개체를로드하고 "ConferenceApplication"개체의 StandData 필드를 발견 된 것으로 설정하려고 시도합니다.

다른 옵션은 가능한 모든 필드를 단일 테이블에 넣고 비울 수있게하는 것입니다.

관련 문제