2010-12-29 3 views
2

골프 클럽을위한 MSSQL 데이터베이스를 계획/설계하고 있습니다. 나는 다음과 같은 테이블이 있습니다회원 가입 지불을위한 SQL 테이블 디자인 도움말

회원 - 표준 연락처 정보 MembershipTypes - 전체, 주니어, 60 년대는 등 PaymentMethods 이상 - 현금, 상임 주문, 확인 등이 있습니다 .. 테이블의

하나는 I 디자인 고군분투하는 것은 지불입니다. 매년 1 월에 가입 금액이 변경됩니다. 예를 들어 2010 년 정회원 가입은 1 년 동안 £ 1000이므로 A 회원이 "정회원"인 경우 1 회 지불으로 10 천원을 지불 할 수 있습니다.

이 부분은 문제가되지 않습니다. 나는 PaymentID, MemberID, Date, PaymentAmount를 가진 지불 테이블을 가질 수 있었고 이것은 회원이 현재까지 지불 한 금액과 얼마나 많은 금액을 알려줄 수 있습니다.

나를위한 문제는 2011 년 1 월 정회원 구독이 계산을 시도 할 때 문제가 될 수있는 1100 파운드까지 증가 할 수 있습니다. 이론 상으로는 2010 년 지급액을 보관하고 2011 년부터 새로 시작해야합니다. 회원이 한 번 지불 한 모든 지불 내역을 보여 드리고자합니다. 이 시나리오에서 가장 효율적인 테이블 디자인에 대한 제안을 환영합니다.

+2

예를 들어 databaseanswers.com을 사용해 보셨습니까? –

+0

그레이트 사이트! 나는 지금까지 그것을 들어 본 적이 없다. – James

답변

4

회원 등급에 따라 다양한 구독료가 필요하다고 생각합니다. 예를 들어, 가입하고 디자인을 돕는 할인 혜택을받는 경우, 요금을 청구하는 금액은 회원 등급과 함께 구독 날짜와 함께 있어야 수집 할 금액, 월간 또는 일회 내역을 알 수 있습니다 . 내 가입 기간이 만료 (슬라이딩 또는 정적)하기 시작하면 기본 요율이 새 요율로 청구됩니다. 내가 가입 한 시점, 현재까지 지불 한 금액 및 빚진 금액 (비례 배분 또는 미끄러짐)을 알기 때문에 수학은이 시점에서 매우 간단합니다. 매우 가까운

Member 
    MemberId 
    Name 
    Address 
    Etc... 

Product 
    ProductId 
    Name 
    Description 
    Price 

Payment 
    PaymentId 
    SubscriptionId 
    Amount 
    DatePaid 

Subscription 
    SubscriptionId 
    MemberId 
    ProductId 
    Price 
    StartDate 
    EndDate (if needed) 

안된 쿼리 :하지만 여기

은 기본 예제

*-- how much do I owe?* 
select m.Name, sum(s.Price) - sum(p.Amount) as Owes 
from Member m 
join Subscription s on m.MemberId = s.MemberId 
join Payment p on s.SubscriptionId = p.SubscriptionId 
where m.MemberId = 1 

*-- how long have I been a member* 
select datediff('year', min(StartDate), getdate()) as yrs, 
    datediff('month', min(StartDate), getdate()) as mths, 
    datediff('day', min(StartDate), getdate()) as dys 
from Subscription 
where MemberId = 1 

*-- when does my subscription expire* 
select max(EndDate) as ExpirationDate 
from Subscription 
where MemberId = 1 

*-- list all payments by product* 
select m.Name as MemberName, 
    pr.Name as ProductName, 
    pr.Price as ProductPrice, 
    s.Price as SubscriptionPrice, 
    p.Amount as AmountPaid 
    p.PaidDate, 
from Member m 
join Subscription s on m.MemberId = s.MemberId 
join Payment p on s.SubscriptionId = p.SubscriptionId 
join Product pr on s.ProductId = pr.ProductId 
where MemberId = 1 
+0

안녕하세요 크리스.이게 내가 필요한 것 같아. 한 가지 질문은 웹 페이지에 데이터를 표시 할 때 여러 테이블의 모든 정보를 표시하려는 것이고 MemberId 1에 대한 현재 구독료를 표시하는 SQL 쿼리는 무엇입니까? 나는 내가 만든 시스템을 관리하는 사람이 일년에 한 번 구독료를 수정하기를 원한다. (불행히도 날짜가 변함), 내게 개입 할 필요가 없다. – James

0

난 당신이 회원 비용이라는 테이블을 만들 필요가 있다고 생각하고 어디 연간 회비 각 회원 유형이 연간 지불해야하는 수수료를 규정하는 고유 한 ID로 기록됩니다. 이를 통해 회원은 특정 "제품"을 참조하여 지불 할 수 있습니다.

+0

나는 당신이 올바른 길에 있다고 생각합니다. – James

+0

@James 더 이상 아이디어가 필요하면 알려주세요. – Bnjmn