【发布时间】:2012-06-01 22:45:43
【问题描述】:
我想为一个包含客户及其费用和付款的系统创建一个数据库模式。推荐的方法是什么,以便我稍后可以仅使用一个查询获得所有客户的列表以及他们的总费用和付款?
单个查询应返回如下结果:
NAME | TotalCharges | TotalPayments
John 80 100
Nick 100 90
我正在考虑创建两个单独的表,一个用于费用,一个用于付款。
CUSTOMERS
-ID
-NAME
CHARGES
-ID
-CUSTOMER_ID
-AMOUNT
PAYMENTS
-ID
-CUSTOMER_ID
-AMOUNT
另一种方法是为费用和付款创建一个表,每个表使用一列,如下所示:
CUSTOMERS
-ID
-NAME
CHARGES_AND_PAYMENTS
-ID
-CUSTOMER_ID
-CHARGE_AMOUNT
-PAYMENT_AMOUNT
另一种方法是使用 TRANSACTION_TYPE 标志同时使用一个表进行收费和付款。 0->付款,1->收费,但如果我使用这种方法,我将无法使用一个查询(或者我可以吗?)获得客户的总费用和付款
CUSTOMERS
-ID
-NAME
CHARGES_AND_PAYMENTS
-ID
-CUSTOMER_ID
-TRANSACTION_TYPE (Flag: 0=Payment, 1=Charge)
-AMOUNT
哪种方法最好?
【问题讨论】:
-
您可以在单个查询中使用第三种方法获得所需的输出。如果您还需要获得总金额(所有费用减去所有付款),第三种方法将是最灵活的解决方案。