2013-03-20 17 views
1

我正在改寫允許人們將錢從一個人轉移到另一個人的應用程序。所以基本上有發件人和收件人。最初在表格中,我創建了發件人和收件人之間的一對多關係。如何爲改變角色的對象設計表數據庫

現在,有一個新的要求,即同一個發件人也可以是交易中的收件人,並且收件人也可以成爲發件人(即收件人可以將錢退回給發件人)。這在我看來,現在沒有單獨發送者和收件人表的要點。

另一層困難是,如果我沿着這張單一表格的路線走下去,我該如何迎合發件人必須註冊收件人的要求。對於發件人而言,我必須能夠顯示他/她的收件人是誰,即使該發件人尚未向他們匯款但只註冊了他們。

回答

1

這應該讓你開始。

  • 存在。
  • 發件人
  • 收件人
  • 發件人註冊的收件人
  • 發件人TransactionTimeAmount收件人轉移。

enter image description here

+0

這是怎麼處理同一個人的多個accoutns? – 2013-03-20 13:07:11

+0

@PieterGeerkens它沒有。它不是OP正在編寫的應用程序的ERD;他只是陷入了發件人 - 收件人的角色。 – 2013-03-20 18:35:48

1

單個表的前提是荒謬的;一開始,你需要這些實體至少包括:

  • AccountOwner
  • 帳戶
  • RegisteredSender
  • RegisteredRecipient
  • 交易

玩這種設置了一下,回調,遇到任何特定的困難。

+0

通過上述實體,當RegisteredSender向他/她自己轉賬時會發生什麼情況。在這種情況下,RegisteredSender也是RegisteredRecipient。 RegisteredSender是否將其註冊爲RegisteredRecipients?然後,您還有另一種情況,即註冊接收人發起轉賬,然後他們成爲發件人,現在RegisteredSender將成爲收件人。這個要求似乎有點牽強,但其真實性。 – Napoleon 2013-03-20 13:06:16

+0

這就是爲什麼Account是最低要求的實體之一;這樣一個人就可以將資金從他們自己的一個賬戶轉移到他們擁有的另一個賬戶。想想我列出的實體是如何相互關聯的,然後尋找可能存在的任何漏洞。 – 2013-03-20 13:09:21

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) 
); 
相關問題