0

我试图在实现小型 SQL Server '08 数据库时做出判断。

我正在将平面文件数据库的输出文本文件从旧的 COBOL 系统转换为上述 SQL Server 数据库。它是一个车辆和房地产贷款数据库,可以通过 Lender ID(七位数)、银行帐号(15 位数)和“账户后缀”(两位数)的组合来唯一标识。

我承认我在数据库管理方面非常天真(老实说,直到我现在的职位才真正做到这一点),并且我正在尝试确定两种方法中哪一种是我实施的最佳选择将索引到其他几个表的键:

1) 使用上述值的三列键标识每笔贷款,或
2) 通过实施“键”列来非规范化数据,该列是组合三个值的 24 个字符的字符串。

非规范化是丑陋的,当然,但我无法预料会发生更新异常,因为贷款无法在银行之间来回传递或更改其贷款后缀。这些值的变化保证是不同的帐户。

复合键更优雅,但我读过一些论文表明它是一件坏事。

那么,哪个选项可能是更好的选择,更重要的是,为什么?

4

3 回答 3

3

我会使用自动生成的代理键,然后在自然键上放置一个唯一索引。这样,如果自然密钥发生变化(如果说一家银行被另一家银行收购),那么它只需要在一个地方改变。使用代理键最重要的事情是确保自然键的唯一性,如果一个exiusts 和唯一索引会做到这一点。

于 2009-09-16T21:23:31.577 回答
1

如果这是不会经常更新的参考数据,那么使用多部分密钥应该没问题。

如果这是高流量事务数据,则添加代理键(int identity,clustered primary key)并将三部分键作为备用键。

我根本不建议实施选项 2。

于 2009-09-16T18:13:02.227 回答
0

我建议只使用自动递增的数字代理键。为什么它需要是其他三个“关键”列的混搭?

于 2009-09-16T18:12:43.173 回答