我已经寻找了一个令人满意的答案,对我的特定问题现在有一段时间更具体,但是有用。不管我是不是在找不错的地方,我都不知道,但是这里有:
我从应用程序中提取数据,然后将其操作并发送到我自己的服务器。拉出的数据中,最初是在应用程序的数据库中,是自动递增的标识符。我刚刚检索到的这个标识符的一个例子是 955534861 。不是更好,更有效的设计,不自动增加我的主键,只使用我知道的值,并将永远保持独特,或者我应该看看代理键等概念?
提前致谢。
答案 0 :(得分:2)
您描述的情况类似于维护数据仓库的主要工作。我们从其他系统获取数据并存储它。
发生在我们身上的事情是这些“其他系统”发生了变化。这导致新版本的“其他系统”将复制先前系统中的唯一标识符。我们通过在数据仓库中添加一些内容来确保它的唯一性。它可能是识别源系统的字段,也可能是日期。它永远不是自动生成的数字。
如果您有这种情况发生这种情况,您可能希望扩展您的选择。
答案 1 :(得分:1)
如果模型中有自然键,则无法通过创建代理键来替换。
您只能添加代理密钥,并保留现有的自然密钥,这有利有弊,如here所述。
答案 2 :(得分:0)
主键(通常是自动递增ID)也是MySQL用作行标识符的,因此它应该保持不变。如果您需要由应用程序为某些其他目的生成的辅助密钥,您可能希望将其添加为另一个具有UNIQUE
索引的列。
在其他具有正确行标识符机制的数据库中,这不是问题。
答案 3 :(得分:0)
这会变得有点书呆子,但请跟我说:
只要键值是唯一的,它就会发挥其功能。但是对于性能,理想情况下,您希望键值尽可能短。
GUID是常用的,因为它们在统计上极不可能重复。但这是以大小为代价的:它们是128位长,这使得它们比机器字长。要比较两个GUID(必须在排序时重复完成,或者在b树下向下迁移索引),需要多个处理器入口来加载和比较这些值。当缓存到内存中时,它们将消耗更多内存。
自动递增键值的优点是