我想知道制作银行交易表的最佳方法是什么。
我知道用户可以拥有多个帐户,因此我添加AccountID
而不是UserID
,但如何命名另一个外国帐户。我怎么知道它是传入还是传出的事务。我在这里有一个例子,但我认为可以做得更好,所以我会征求你的意见。
在我的示例中,我将所有事务存储在一个表中并添加bool isOutgoing
。因此,如果设置为true
,我知道如果用户ForeignAccount
已向false
汇款,那么我知道ForeignAccount
已向用户汇款。
我的例子
请注意,这不适用于真正的银行。我只是在努力解决最佳实践问题。
答案 0 :(得分:1)
通常,我认为,您会看到一列反映帐户的DEBIT或CREDIT,而不是传出。
可能有几个表格如下:
ACCOUNT
-------
account_id
account_no
account_type
OWNER
-------
owner_id
name
other_info
ACCOUNT_OWNER
--------------
account_id
owner_id
TRANSACTION
------------
transaction_id
account_id
transaction_type
amount
transaction_date
在这里,您将获得2条交易记录 - 一条显示借记,一条显示信用
如果你真的想要,你可以在另一个表中链接这两个交易
TRANSACTION_LINK
----------------
transaction_id1
transaction_id2
答案 1 :(得分:1)
我的意见:
答案 2 :(得分:1)
我同意关于isOutgoing标志的评论 - 插入/更新很容易错误地设置它(虽然列的名称很清楚,作为列可能会被忽略,因此设置为默认值)。
交易表的另一种方法可以是:
TransactionID (unique key)
OwnerID
FromAccount
ToAccount
TransactionDate
Amount
或者,您可以拥有“LocalAccount”和“ForeignAccount”,金额字段的符号代表方向。
如果您正在进行涉及多种货币的交易,则需要/考虑以下列
Currency
AmountInBaseCcy
FxRate
如果涉及多种货币,那么您要么希望每个ccy组合的fx汇率/日期的共同ccy或每次交易存储它 - 这取决于它的计算方式
答案 3 :(得分:0)
我认为您正在寻找的是如何处理多方关系(帐户可以有多个所有者,所有者可以拥有多个帐户)
您可以通过连接表执行此操作。因此,您拥有帐户所需的所有详细信息帐户,您拥有用户所需的所有详细信息,然后您拥有帐户USer,其中只包含其他两个表中的ID。