1

我正在重写一个允许人们将钱从一个人转移到另一个人的应用程序。所以基本上有发送者和接收者。最初在表中,我在发件人和收件人之间创建了一对多关系。

现在,有一个新的要求,即同一个 Sender 也可以是 Transaction 中的 Recipient 并且 Recipient 也可以成为 Sender(即 Recipient 可以将钱退回给 Sender)。在我看来,现在有单独的 Sender 和 Recipient 表是没有意义的。

另一层困难是,如果我沿着单表这条路线走,我如何满足发送者必须注册接收者的要求。对于发件人来说,我必须能够显示他/她的收件人是谁,即使该发件人尚未向他们汇款但只注册了他们。

4

3 回答 3

1

这应该让你开始。

  • 存在。
  • 发件人是一个
  • 收件人是一个
  • 发件人注册了收件人
  • 发件人于转移Amount收件人TransactionTime

在此处输入图像描述

于 2013-03-20T12:37:42.993 回答
1

发件人不是发件人。发件人是一个人(或更一般地说是法律方),可以扮演发件人或收件人,或两者兼而有之的角色。

create table Party (
  id serial primary key,
  name text not null
);

create table Payment (
  from_party_id int not null references party(id),
  to_party_id int not null references party(id),
  paid_at timestamp not null default current_timestamp,
  check (from_party_id <> to_party_id)
);

create table Registered_Recipients (
  sender_id int not null references party(id),
  recipient_id int not null references party(id),
  check (sender_id <> recipient_id)
);
于 2013-03-20T18:57:07.647 回答
1

您的单表前提是荒谬的;首先,您至少需要这些实体:

  • 帐户所有者
  • 帐户
  • 注册发件人
  • 注册收件人
  • 交易

稍微玩一下这个设置,并在遇到任何特定困难时进行回调。

于 2013-03-20T12:25:29.370 回答