数据库设计最佳实践

时间:2018-02-22 04:47:43

标签: database

假设用户能够

(1) use money to buy something (Money leaves wallet)
(2) sell something to earn money (Money enters wallet) 

我希望跟踪交易并确保它们准确无误。我想到了两种方法

(A)使用三个不相交的表格进行跟踪

buys <userid, amount>
sells <userid, amount>
transaction <transactionid, userid, amount, type> 

i.e.
insert <u1, 90> into buys trigger insert <t1, u1, 90, 'buy'> 
for example

(B)从交易表中购买和销售商店transactionid

buys <userid, transactionid> 
sells <userid, transactionid>
transaction <transactionid, amount> 

i.e.
insert <t1, 90> into transaction and insert <u1, t1> into buys

我的问题是方法(A)和方法(B)的优缺点是什么?那里有哪些替代方法/最佳实践?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

  • 用户表:(用户ID,名称,...)
  • 交易表:( transactionid,amount,date,...)
  • 链接用户和交易表,(transactionid,buyerid,sellerid)。 buyerid和sellerid是user.userid的密钥。

这样,您可以从一个查询中获得买方和卖方,而不是两个表。如果您需要跟踪报价和付费价格,它们只是交易表中的额外字段。

因此,事务表中的任何数据都会进入事务表,与所涉及的用户相关的任何数据都会进入链接表。

我将实体(用户,事务)视为单独的表,并将操作视为实体之间的链接表。