我正在设计一个需要支持复制的新数据库,而我却决定选择什么作为我的主键.
在我们当前的主键数据库中,我们使用两个int列,第一列是identity,另一列用于描述插入行的服务器.现在我想避免为主键使用两列,而只使用一列.到目前为止,我有两种方法:
>对我的主键使用GUID
这个将确保在任意数量的服务器上始终存在唯一密钥.我不喜欢这个,是GUID是16字节大小,当用于跨越许多表的外键时,它将浪费空间.在编写查询时也很难使用它,查询速度会慢一些.
>使用int或bigint,并为每个服务器上的每个表手动指定种子和增量值.例如,如果有两台服务器,第一台服务器上的X表将从1号开始,第二台服务器上的X表将从2号开始,每台将增加2.因此会有(1,3,5,…) ..)首先,和(2,4,6,…)在第二台服务器上.这种设计的好处在于它在编写查询时更容易使用,速度快,并且外键使用的空间更少.糟糕的是,我们永远不知道将运行多少台服务器,因此很难说出增量值是多少.此外,在服务器上管理架构更改也更加困难.
管理多个服务器的最佳实践是什么?如果出现这种情况,最好的方法是什么?
解决方法
你的问题很好,经常被问到.
从维护的角度来看,我绝对会选择GUIDS.他们是有原因的.
在某些地方你可能会遇到复杂的操作,移动和重新复制你的数据,然后其他选项可以使它比它需要的更复杂一些.
这里有各种选项的简短阅读:
http://msdn.microsoft.com/en-us/library/bb726011.aspx
至于复制部分 – 如果正确完成,复制没有真正的麻烦.