我们从事潜在客户的业务。客户收到我们的潜在客户。他们查看有关潜在客户的基本信息,并决定是否接受潜在客户或拒绝。如果他们接受了潜在客户,他们将被扣除1个积分(每个潜在客户),他们可以查看潜在客户的详细信息。
因此,每个潜在客户的成本为1个(与某些货币价值挂钩)。
我们有不同类型的客户:保险代理人,房地产经纪人,信用卡公司,俱乐部等。他们为1个信用卡支付不同的价格。
客户可以预付或后付。
对于以上所有内容,我有以下表格:
Customers (id, name, address, is_postpaid, customer_type_id)
CustomerTypes (id, name, credit_price) // name: insurance agent, real estate agent, etc
TransactionTypes (id, name) // add to or deduct from credit balance
CustomerTransactions (id, customer_id, quantity, transaction_type_id, credit_balance, credit_unit_price, date_created)
问题:
感谢任何反馈和批评。
更新::我已更新上述表格,以在客户表格中包含FK。
答案 0 :(得分:3)
如果交易表的粒度确实是一个交易(没有累积字段),那么预付费客户和后付费客户之间没有差异。您可以在同一列中输入正数和负数作为负数,或者(有些人更喜欢)使用两列进行“正面和负面”客户交易。
客户余额始终可以通过以下方式获得:
select
CustomerName
, sum(Credits) - sum(Debits) as AccountBalance
from Transactions as t
join Customer as c on c.CustomerId = t.CustomerId
group by CustomerName
order by CustomerName ;
答案 1 :(得分:0)
我会将数据库更改为以下内容:
客户(id,name,customerType_id,address,is_postpaid)
CustomerTypes(id,name,credit_price)
CustomerTransactions(id,customer_id,quantity,transaction_type,credit_balance,credit_unit_price,date_created)
我不太确定预付费或后付费概念。如果可以,请为我澄清一下。
答案 2 :(得分:0)
我还建议前后付款没有区别 - 你只需要交易。
为了适应帖子前的差异,您可以引入一个描述它的新表:
customer_type
--------------
id
pre_or_post
begin_date
end_date
答案 3 :(得分:0)
关于学分的一点是,从会计的角度来看,如果是预付费的话,它们就是书上的责任。它们有点像礼品卡,在使用信用卡之前,您无法识别收入。考虑到这一点,您希望信用在一段时间后过期,例如1年。由于信用证到期,您需要按照从最旧到最新的顺序扣除信用。
您应该有一个表来记录信用使用情况(即CustomerCreditUsage),另一个表用于信用购买(CustomerTransactions)。购买后,您检查负信用余额并从信用使用表中结算记录。如果是预付款,当您记录信用使用交易时,您将从最早的信用购买的贷方余额中扣除。
请注意,信贷购买与信贷使用之间存在松散的关系。你可以拥有一个没有另一个。虽然您不希望在没有匹配信用额度的情况下长时间使用信用卡(后付款)。