0

我目前有一个库存类型表(仅显示重要的字段):

Timestamp Account User  Symbol Locates 
---------+-------+---- +------+--------
 2012-...| ABC   | Joe | ZZZ  | 1000
---------+-------+---- +------+--------

每当用户需要调整定位(共享)的数量时,他们就会在表中发布一条新记录。我需要为用户存储几乎完全相同的数据来调整他们持有的股票数量。事实上,唯一不同的Locates字段是Shares需要调整股票的字段,例如:

Timestamp Account User  Symbol  Shares
---------+-------+---- +------+--------
 2012-...| ABC   | Joe | ZZZ  | 2000
---------+-------+---- +------+--------

问题是最好有 2 个表,一个用于定位,一个用于共享,还是最好有 1 个表,将Locates列重命名为Shares并添加一个 Enum 类型列以指示事务类型('LOCATES ','位置')。

目前还没有这方面的报告。它仅用于用户所做的应用程序存储更改,并在重新启动应用程序时重建定位和共享。我看不出任何一种方法都有很大的优势,所以这更像是一个“什么是最佳实践”类型的问题。

更新

在阅读了一些评论后,我意识到如果不知道这张表是如何使用的,很难回答。希望这里有一个简短的解释:

每天结束时,我们会从数据库中清除交易数据,这样第二天就开始没有数据了。这些定位/共享数据都不会每天结转。

每天早上应用程序启动,并从第三方每天发布到服务器的平面数据文件中加载拥有的共享和定位的共享(一天开始时没有从数据库加载数据)。在交易日内,用户可以通过向服务器发送消息来调整股票数量和/或定位。此消息更新服务器上内存中的值,并将记录写入此表以显示正确的起始值应该是什么。(基本上覆盖了从平面文件中读取的内容)。

如果我们需要在白天重新启动服务器(这种情况很少见,但可能发生),在重新启动时,来自平面文件的数据会重新读回应用程序。应用程序还读取此表中的任何记录,并使用帐户/符号组合的最新记录来覆盖从平面数据文件中读取的值。因此,如果我们必须重新启动应用程序,此表将用作额外的每日数据源。

4

1 回答 1

1

您还有第三种选择,即有两个数据列,一个用于定位,一个用于共享。

我认为拥有一个通用列不是一个好主意,它的值取决于枚举类型。这种情况很容易发生错误。某一天的总份额调整是多少?糟糕,我还包括了“定位”。

一些数据库支持计算/计算列。使用这样的数据库,您还可以使用指示符列指定一行是用于定位还是共享(或两者):

IsLocate as (case when locates is not null then 'Y' else 'N' end),
IsAdjustment as (case when shares is not null then 'Y' else 'N' end),
于 2012-08-09T21:59:13.650 回答