首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为客户帐户表推荐的表架构?

为客户帐户表推荐的表架构?
EN

Stack Overflow用户
提问于 2012-06-01 21:50:07
回答 4查看 714关注 0票数 1

我想为一个系统创建一个数据库模式,其中包含客户以及他们所做的费用和付款。推荐的方法是什么,以便我以后只使用一个查询就可以获得所有客户的列表以及他们的总费用和付款?

单个查询应返回如下结果:

代码语言:javascript
复制
NAME  |  TotalCharges  |  TotalPayments
John          80              100
Nick         100               90

我正在考虑创建两个单独的表,一个用于收费,另一个用于付款。

代码语言:javascript
复制
CUSTOMERS
-ID
-NAME

CHARGES
-ID
-CUSTOMER_ID
-AMOUNT

PAYMENTS
-ID
-CUSTOMER_ID
-AMOUNT

另一种方法是为费用和付款创建一个表,每个表使用一列,如下所示:

代码语言:javascript
复制
CUSTOMERS
-ID
-NAME

CHARGES_AND_PAYMENTS
-ID
-CUSTOMER_ID
-CHARGE_AMOUNT
-PAYMENT_AMOUNT

另一种方法是使用一个TRANSACTION_TYPE标志,对费用和付款使用一个表。0->Payment,1->Charge,但如果我使用这种方法,我将无法使用一个查询获得客户的总费用和付款(或者我可以吗?)

代码语言:javascript
复制
CUSTOMERS
-ID
-NAME

CHARGES_AND_PAYMENTS
-ID
-CUSTOMER_ID
-TRANSACTION_TYPE  (Flag: 0=Payment, 1=Charge)
-AMOUNT

哪种方法是最好的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-01 21:58:20

对每个客户ID的费用和支付表进行合计

代码语言:javascript
复制
select Customers.Name
 , Customers.id
 , ( select sum(Charges.Amount)
       from Charges
      where CustomerId = Customers.id )
 , ( select sum(Payments.Amount)
       from Payments
       where CustomerId = Customers.id )
票数 1
EN

Stack Overflow用户

发布于 2012-06-01 21:57:37

您的第一种方法是正确的解决方案。

用于检索数据的Sql查询将为:

代码语言:javascript
复制
select 
    CUSTOMERS.ID,  CUSTOMERS.Name, 
   sum( CHARGES.AMOUNT ) as total_CHARGES_amount,
   sum( PAYMENTS.AMOUNT ) as total_PAYMENTS_amount
from
   CUSTOMERS 
  left outer join
   CHARGES on CUSTOMERS.ID = CHARGES.CUSTOMER_ID
  left outer join
   PAYMENTS on CUSTOMERS.ID = PAYMENTS.CUSTOMER_ID
group by
   CUSTOMERS.ID,  CUSTOMERS.Name
票数 1
EN

Stack Overflow用户

发布于 2012-06-01 22:00:55

在所有三种方法中,您都可以通过一个查询获取数据,但我将推荐第一种方法,因为在第一种方法中,您的数据将根据实体进行适当的组织。您的查询将如下所示:

代码语言:javascript
复制
Select C.Name, SUM(CH.AMOUNT) AS CHARGES, SUM(P.AMOUNT) AS PAYMENTS
FROM CUSTOMERS C
LEFT JOIN CHARGES CH ON C.ID = CH.CUSTOMER_ID
LEFT JOIN PAYMENTS P ON C.ID = P.CUSTOMER_ID
WHERE C.ID = @CustomerId
GROUP BY C.Name
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10851544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档