문제

우리는 스포츠 센터 멤버십을 관리하기 위해 타사 제품을 사용합니다.우리는 여러 가지 멤버십 유형을 가지고 있습니다(예:주니어, 학생, 교직원, 커뮤니티) 및 여러 멤버십 상태(예:연간, 활성, 비활성, 일시 중지).불행하게도 이 제품은 회원의 현재 멤버십 유형과 상태만 기록합니다.시간이 지남에 따라 우리 회원의 유형과 상태가 어떻게 변했는지 추적할 수 있으면 좋겠습니다.

현재 우리는 제품의 데이터베이스 디자인에 접근할 수 있습니다.이는 SQL Server에서 실행되며 정기적으로 제품 테이블에 대해 자체 SQL 쿼리를 실행하여 자체 테이블을 생성합니다.그런 다음 테이블을 Excel의 피벗 테이블에 연결하여 차트를 생성합니다.그래서 우리는 데이터베이스 설계와 SQL에 익숙합니다.그러나 우리는 이 문제에 가장 잘 접근하는 방법에 대해 고민하고 있습니다.

이 제품에는 회원의 멤버십 구매와 시작일 및 만료일이 기록됩니다.따라서 우리는 해당 데이터를 다시 분석하여 언제든지 회원의 유형과 상태를 확인할 수 있습니다.예를 들어, 2007년 1월 1일에 주니어 멤버십을 구입하고 2007년 12월 31일에 만료된 후 2008년 6월 1일에 학생 멤버십을 구입한 경우 상태가 활성에서 비활성, 활성(1월 1일)으로 변경된 것을 볼 수 있습니다. 각각 2008년 1월 1일, 2008년 6월 1일), 유형은 중학생에서 학생(2008년 6월 1일)으로 바뀌었습니다.

기본적으로 우리는 구성원의 유형 및 상태 속성을 시간적 속성 또는 유효성 a-la Fowler(또는 시간에 따라 변하는 다른 것).

우리의 질문 (마지막으로 :) - 위의 내용을 바탕으로:이 구성원 정보를 보관하기 위해 어떤 데이터베이스 테이블 디자인을 사용하도록 권장하시겠습니까?기존 Member 테이블에 키를 입력할 수 있도록 MemberID에 대한 열이 있을 것이라고 생각합니다.또한 회원의 상태와 유형, 보유 기간을 저장해야 합니다.우리는 특정 시점에 각 유형 및 상태의 구성원 수를 확인하기 위해 이 테이블에 대한 쿼리를 쉽게 작성할 수 있기를 원합니다.

업데이트 2009-08-25:곁길로 빠져서 아직 제안된 솔루션을 시험해 볼 기회가 없었습니다.곧 그렇게 되기를 바라며 결과에 따라 답변을 선택하겠습니다.

도움이 되었습니까?

해결책

시스템이 이미 작성되고 제자리에 있었다는 점을 감안할 때이 문제에 대한 가장 간단한 접근 방식 (및 기존 데이터베이스/코드에 영향을 미치는 접근 방식은 Memberid, 상태, 유형 및 날짜 열이 포함 된 멤버십 기록 테이블을 추가하는 것입니다. 그런 다음 기본 멤버 테이블에 업데이트 및 삽입 트리거를 추가하십시오. 이 트리거가 발사되면 회원의 새로운 값 (상태 변경 날짜와 함께)을 멤버 히스토리 테이블에 작성합니다. 그런 다음이 테이블을 쿼리하여 각 멤버의 역사를 얻을 수 있습니다.

이것은 구현하기가 상당히 간단하며 기존 시스템에 전혀 영향을 미치지 않습니다.

무료 회원 자격을 위해 이것을 쓸게요. :)

다른 팁

Joe Celko의 "SQL For Smarties -Advanced SQL 프로그래밍"을 읽을만큼 충분히 추천 할 수 없습니다. 그는 시간 데이터베이스 설계에 대한 전체 장과 시간 투영, 선택 및 시간 조인 쿼리를 실행하는 방법 (효율적이고 효과적으로)을 가지고 있습니다. 그리고 나는이 포스트의 장에서 그가 말한 것을 설명하기 위해 정의를하지 않을 것입니다.

저는 스타 스키마로 구성된 보고 데이터베이스를 만들었습니다.멤버십 차원은 시간적으로 정렬되므로 서로 다른 시점에 동일한 구성원에 대해 서로 다른 행이 있을 수 있습니다.이렇게 하면 팩트 테이블의 다른 행이 기록의 다른 지점과 관련될 수 있습니다.

그런 다음 주 데이터베이스에서 일주일에 한 번씩 보고 데이터베이스를 주기적으로 업데이트하기 위한 업데이트 절차를 만들었습니다.이곳이 주요 작업이 될 곳입니다.

그런 다음 보고 데이터베이스에서 보고서를 삭제합니다.스타 스키마가 피벗 테이블과 동일한 작업을 수행하도록 만드는 것은 매우 쉽습니다.필요한 경우 보고 데이터베이스 앞에 배치할 일종의 OLAP 도구를 사용했습니다.

이것은 많은 작업이지만 시간이 지나면 보상을 받을 것입니다.

나는 멤버십 정보를 시작 및 종료 날짜와 함께 자체 테이블에 넣을 것입니다. 고객을 별도의 테이블에 보관합니다. "현재"멤버십 정보가 항상 필요한 경우 통증이지만 쿼리 나 트리거를 통해이를 해결하는 방법에는 여러 가지가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top