【问题标题】:Composite Decomposible Unique Key复合可分解唯一键
【发布时间】:2011-11-24 20:21:45
【问题描述】:

我有一堆要加入到视图中的表。我需要视图中的每个结果行都有一个唯一的 id...不一定是 guid,而是一些可以唯一标识每一行的值...此外,可以分解为用于构造的相应主键独特的价值。

起初我使用的是这里建议的公式: Formula for Unique Hash from Integer Pair

...效果很好,但是现在我遇到了 Id 可能在整数地址空间之外运行的问题...甚至可能(稍微)在 bigint 地址空间之外运行。

有人可以就如何解决这个问题提供建议(也许通过创建复合 guid 而不是数值)?

【问题讨论】:

  • 为什么要费力地将多个键合并为一个呢?您不能将每个表的主键作为单独的列添加到视图中吗? 这些的组合将是独一无二的,您不必担心溢出或计算。
  • 一个很好的观点......但不幸的是,由于我们的 ORM 的限制,这是不可能的
  • 出于兴趣,哪个ORM?也许您可以发布答案here ;)

标签: sql sql-server uniqueidentifier


【解决方案1】:

这听起来太简单了,但您是否考虑过创建一个由各种主键组成的 varchar 字段,可能由一些分隔符分隔?

select 
  cast(tableA.id as varchar) + '-' + 
  cast(tableB.id as varchar)  + '-' + 
  cast(tableC.id as varchar)  as compositeKey, 
  tableA.foo //etc...

【讨论】:

  • +1 也许不是性能最好的解决方案,但我想到了。这很容易实现。
  • 是的,易于实现……但我想让它在搜索方面更具性能。我想在视图列上创建一个唯一的聚集索引。
  • @JeffN825 - 在 varchar 列上创建唯一聚集索引不是问题,但我想知道您将如何启动搜索(在 varchar 或整数列上)。
  • 通过另一个视图中的 FK 列执行相同的计算。
  • @JeffN825 - 我们不知道您的数据库使用情况(插入/更新/删除率),但我建议您对使用VARCHARINTEGER 解决方案进行一些性能测试。请放心,VARCHAR 解决方案变慢,但我怀疑它会成为您应用程序的性能杀手。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 2012-02-18
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多