创建Funds
或Assets
表时,我经常遇到同样的问题:并非所有Assets
都有相同的标识符。
例如:70%有一个ISIN
,有些有一个bloomberg代码,有些有两个,有些只有AccountingID
来自本地会计包,依此类推。
一般来说,我最后给该表一个代理PK,加上所有可能标识符的不同字段(Bloomberg, ISIN, AccoutingID
,..)
我曾经继承过这样一个数据库,开发人员将备用密钥迁移到子表[标识符],这是基于他事先并不知道每个可能的备用密钥的事实。
此标识符表格如下所示:
AssetID
(代理人)IdentifierType
(例如:ISIN)IdValue
什么是最佳解决方案?
我认为第一个(单个表)是最好的,因为即使我冒了几个Null,ISIN也是一个ISIN,并且是Fund
明确定义的属性。
答案 0 :(得分:1)
这取决于您的需求,但第二种方法通常更灵活,因为您可以提供合理的界面来插入新的“标识符”记录,而不需要更改数据库架构。
如果您不知道可能存在多少个标识符,或者您知道需要随时间添加更多标识符,通常会使用此方法。
在编写查询方面,前一种方法更简单,如果标识符是静态的,则可能最容易使用。
答案 1 :(得分:0)
我会做单表,因为Identifiers表方法会假设idValue的数据类型。如果你得到一些使用guid而不是int的新东西怎么办?
您仍然可以为每个可能的资产ID执行单独的列,并将有关资产的数据保存在一个单独的表中,该表可以锁定代理ID。您采用的方法主要取决于您将如何使用数据,以及您添加新资产ID类型的频率。