2011-11-24 73 views
0

我有一堆我正在视图中加入的表。我需要视图中的每个结果行都有一个唯一的ID ...不一定是一个GUID,但是某些值可以唯一地标识每行......并且进一步可以分解为相应的主键,用于构造独特的价值。复合可分解唯一密钥

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

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

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

+1

为什么要试图将多个键合并成一个呢?你不能只是将每个表的主键作为单独的列添加到视图中吗? *这些*的组合将是唯一的,您不必担心溢出或计算。 –

+0

一个非常好的点...但不幸的是,由于我们的ORM的约束,不可能的。 – Jeff

+0

出于兴趣,哪个ORM?也许你可以发布一个答案[这里](http://stackoverflow.com/questions/218100/orm-support-for-compound-primary-keys);) – onedaywhen

回答

2

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

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

+1也许不是最好的表演解决方案,但它横跨了我的脑海至。这将很容易实施。 –

+0

是的,很容易实现...但我想使它在寻找方面更具性能。我想在视图列上创建一个唯一的聚集索引。 – Jeff

+1

@ JeffN825 - 创建一个唯一的聚集索引不会是一个varchar列的问题,但我想知道你将如何启动搜索(在varchar或integer列上)。 –