数据库设计:多个潜在标识符

时间:2012-02-23 14:31:36

标签: database-design

创建FundsAssets表时,我经常遇到同样的问题:并非所有Assets都有相同的标识符。

例如:70%有一个ISIN,有些有一个bloomberg代码,有些有两个,有些只有AccountingID来自本地会计包,依此类推。

一般来说,我最后给该表一个代理PK,加上所有可能标识符的不同字段(Bloomberg, ISIN, AccoutingID,..)

我曾经继承过这样一个数据库,开发人员将备用密钥迁移到子表[标识符],这是基于他事先并不知道每个可能的备用密钥的事实。

此标识符表格如下所示:

  • AssetID(代理人)
  • IdentifierType(例如:ISIN)
  • IdValue

什么是最佳解决方案?

我认为第一个(单个表)是最好的,因为即使我冒了几个Null,ISIN也是一个ISIN,并且是Fund明确定义的属性。

2 个答案:

答案 0 :(得分:1)

这取决于您的需求,但第二种方法通常更灵活,因为您可以提供合理的界面来插入新的“标识符”记录,而不需要更改数据库架构。

如果您不知道可能存在多少个标识符,或者您知道需要随时间添加更多标识符,通常会使用此方法。

在编写查询方面,前一种方法更简单,如果标识符是静态的,则可能最容易使用。

答案 1 :(得分:0)

我会做单表,因为Identifiers表方法会假设idValue的数据类型。如果你得到一些使用guid而不是int的新东西怎么办?

您仍然可以为每个可能的资产ID执行单独的列,并将有关资产的数据保存在一个单独的表中,该表可以锁定代理ID。您采用的方法主要取决于您将如何使用数据,以及您添加新资产ID类型的频率。