2017-02-23 1 views
1

서브 스크립 션 제품에 대한 데이터베이스 스키마를 설계했습니다. 사용자는 일정 기간 동안 날짜부터 구독을 선택할 수 있습니다. 사용자는 구독을 계속 활성화 한 상태에서 며칠 동안 구독을 취소 할 수 있습니다. 사용자가 한 달 동안 구독하는 경우 10 일, 15 일 및 20 일에 취소 할 수 있음을 의미하므로 단 27 일 (30 - 3) 만 지불하면됩니다.
지금까지이 스키마를 제안했습니다. enter image description here더 나은 데이터베이스 설계 방식이 필요합니다.

  • 각 사용자는 하나의 프로필을 가지고 있습니다.
  • 사용자가 요금제를 선택할 수 있습니다.
  • 일단 사용자가 계획을 선택하면 해당 계획의 시작 날짜 및 기간에 대한 정보도 저장하는 트랜잭션으로 기록됩니다. 사용자가 어떤 일 가입을 취소 할 수 있기 때문에
  • 각 트랜잭션 나는 그들이 가입을 가지고있는 다른 사용자와 일을 추적하는 방법을 지금 지불 (나중에 그 부분에 초점)

이있다?

내가 염두에두고있는 솔루션은 해당 날짜의 각 날짜와 트랜잭션 ID를 추적하는 새로운 테이블 Plan_Transaction_user입니다. 이렇게하면 사용자가 특정 날짜에 구독을 취소하면 해당 거래 ID에 해당 날짜에 대한 기록이 없습니다.

표는 다음과 같이 표시됩니다 TRANSACTION_ID 2와 관련된 사용자가 일이 그녀의 거래 기록을 취소 이후

Date  Transaction ID  
1-1-2017 1 
1-1-2017 2 
1-1-2017 3 
1-2-2017 1 
1-2-2017 3 

이 테이블에 존재하지 않습니다.

고객 기반이 5000이라면 가장 좋은 경우는 1 년 이내에 5000 * 365 ~ 1.8m 행을 갖게됩니다. 나는 이것이 최선의 접근 방법이 아니라고 확신한다. 좀 더 나은 스키마 나 더 효율적인 기존 스키마의 변경 사항을 제안 해 주시겠습니까? 내가 MariaDB (AWS RDS)를 데이터베이스로 사용하고 Python 2를 제 언어로 사용한다는 것을 알고 싶을 경우를 대비하여.

당신은 트랜잭션 테이블 대신 기간의 종료일 필드를 추가 할 수 OJAS

+2

개별적인 날짜를 추적하는 것이 실제로 여기에서 실패한 것처럼 보입니다. 여러분은'start'와'end' 날짜와 같은 한정된 범위를 캡쳐하고 싶을 것입니다. – tadman

+0

시작과 끝만 추적하면 특정 날짜에 얼마나 많은 가입자가 있었는지 어떻게 묻겠습니까? @tadman –

+2

당신은'BETWEEN' 연산자를 사용하여 테스트 할 수 있습니다. – tadman

답변

4

을 주셔서 감사합니다. end_date를 start_date와 선택한 계획에 대해 며칠 동안 쉽게 정의 할 수 있습니다. 사용자가 며칠을 취소하면 end_date를 end_date = end_date - 취소 일 수만큼 줄일 수 있습니다. 현재 유효한 end_date> = 오늘 유효한 구독 수를 확인할 수 있습니다.

0

Plan_Transaction_user 디자인과 마찬가지로 특정 날짜의 구독자 수를 알 수 있지만 누가 해당 구독자인지 알 필요가없는 경우 u는 일별로 집계 할 수 있습니다. Like

Date  user_count  
1-1-2017 1 
1-2-2017 2 
관련 문제