[RobinHood] 数据库Schema设计

  • account_entries table 在 reserve cash 的时候有点问题,如果我有100块,reserve了80块,那我的理解就是在account entries里面添加一个state为reserved而且quantity为80的entry。那原来的100块的那个entry的state不变吗?如果transaction完成了,那这两个entry的状态又怎么变换呢?

  • 这个account_entries_table没有显示用户的balance呀?这个需要自己再建立额外的表吗?

  1. 这里的 ledger table external_account_id指的是什么呀啊?买卖股票的时候我怎么发现没有用上这个field?

  2. 这里的 ledger table 也可以改名字叫做 order table 吧?

第一个问题我也想问,没看到balance,而且account table里那个quantity是钱数还是预留股票数量?

我觉得可能如果是asset是现金就是钱的数量,如果是股票那就是股票的数量,我们看看老师怎么回答吧

  1. 本来100块, reserve 80 块之后,变成80块在 reserved 状态,20块还可以用。原来100块的 state 是需要变的。完成了以后,变成20块可用+多少股股票。用户的 balance 会显示成 asset_class=cash;symbol=USD;quantity=20; 如果是股票的话 asset_class=stock;symbol=AAPL;quantity=20,不需要额外建表。
  2. 可以去掉,确实用不到。
  3. 也可以叫 Order Table,记录的就是每一笔向交易所发出的 Order。

嗯 就是这个意思。

懂了,这个设计很精妙啊,那我再确认一下:

  1. 本来100块, reserve 80 块之后,变成80块在 reserved 状态,20块是available。原来一个entry,变成了两个entry。
    asset_class=cash;symbol=USD;quantity=20,state=available
    asset_class=cash;symbol=USD;quantity=80,state=reserved

  2. 完成了以后,变成20块可用+多少股股票。用户的 balance 会显示成 asset_class=cash;symbol=USD;quantity=20; 如果是股票的话 asset_class=stock;symbol=AAPL;quantity=20,不需要额外建表

对的,就是这个意思