gpt4 book ai didi

database - 用于复制的整数主键

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:45 26 4
gpt4 key购买 nike

我正在权衡可用于多主复制的整数主键的选项。 (我非常喜欢使用整数键而不是 GUID)

我能想到的最好的办法是先获取最重要的数据,然后再获取服务器编号:例如。服务器 1 上的发票 1 = 101服务器 2 上的发票 1 = 102其中非 serverno 部分 (invoiceno) 来自数据库编号生成器

算法:gen_id(INVOICENO_GEN, 1) * 100 + serverno并且您可以通过查看值和数学方法来获取服务器编号。

这为 99 个服务器留出了空间,同时仍然简短易读并且不会发生冲突。使用该方案和正常的整数大小列将使最大行数 (21 474 836),或者如果使用 bigint 则数十亿。

例如发票表键看起来像这样:

Server 1    
101
201
301
401

Server 2
102
202
302
402

所以我的问题是:我忽略了任何批评或缺陷吗?

数据库是 Firebird。

最佳答案

只创建一个复合主键怎么样?

定义一个“ServerID”以在每个服务器上设置,例如1、2、3、4 等作为 INT。然后将“InvoiceID”作为您的 Invoice 表中的 INT。

将主键创建为 (ServerID,InvoiceID)。

这样一来,您就有了超过 99 台服务器的空间,而且您不必操纵/计算任何 ID 或类似的东西。

当然,任何引用您的 Invoice 表的表现在也需要使用 (ServerID,InvoiceID) 作为外键 - 但我想如果您需要的话,在您的表中到处都有 ServerID 不会成为问题也复制那些表。

马克

关于database - 用于复制的整数主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com