用于会员订阅付款的SQL表设计帮助

用于会员订阅付款的SQL表设计帮助,sql,database-design,Sql,Database Design,我正在规划/设计一个高尔夫俱乐部的MSSQL数据库。 我有以下表格: 成员–标准联系信息 会员类型-正式会员、初级会员、60岁以上会员等。。 付款方式-现金、定期汇票、支票等 我正在努力解决的一个表格设计是付款。每年1月,认购金额将发生变化,例如,2010年,全会员全年认购金额为1000英镑,因此,如果会员A是“全会员”,他可以在10个月内一次性或分期支付1000英镑 这部分不是问题。我可以有一个带有PaymentID、MemberID、Date、PaymentAmount的付款表,它可以告诉我

我正在规划/设计一个高尔夫俱乐部的MSSQL数据库。 我有以下表格:

成员–标准联系信息 会员类型-正式会员、初级会员、60岁以上会员等。。 付款方式-现金、定期汇票、支票等

我正在努力解决的一个表格设计是付款。每年1月,认购金额将发生变化,例如,2010年,全会员全年认购金额为1000英镑,因此,如果会员A是“全会员”,他可以在10个月内一次性或分期支付1000英镑

这部分不是问题。我可以有一个带有PaymentID、MemberID、Date、PaymentAmount的付款表,它可以告诉我该会员迄今为止已支付了多少,以及有多少未支付


对我来说,2011年1月的问题是,会员的全额认购可能会增加到1100英镑,这将在尝试进行计算时产生问题。从理论上讲,我需要将2010年的付款存档,并在2011年重新开始——我不想这样做,因为我想展示会员曾经支付的每一笔付款的历史记录。我欢迎对这种情况下最有效的表设计提出任何建议

我相信您需要会员级别的可变订阅金额。例如,如果我注册,你给我一个折扣来帮助你进行设计,你向我收取的金额应该与订阅日期一起位于会员级别,以便你知道每月或一次收取多少。当我的订阅即将到期(滑动或静态)时,应向我收取新费率的基本费率。在这一点上,数学是非常简单的,因为你知道当我注册时,我已经支付了多少,我欠了多少(按比例或滑动)

以下是一个基本示例:

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

我认为您需要创建一个名为“会员成本”的表,其中每年的会员费用一个唯一的ID记录,该ID规定了每种类型的会员每年必须支付的费用。这将使您能够允许会员根据特定的“产品”付款。

您是否尝试过databaseanswers.com以获取示例模式?很棒的网站!直到现在我才听说。嗨,克里斯,这看起来是我需要的。我的一个查询是,例如,当在网页上显示数据时,我想显示各个表中的所有信息,显示MemberId 1的当前年份订阅费的SQL查询是什么?我希望管理我创建的系统的人员每年只编辑一次订阅费(不幸的是可变日期),而不需要我的任何干预。@James如果您需要更多想法,请告诉我