php - 在线和本地MySQL数据库需要同步时如何创建主键

标签 php mysql database database-design

我正在使用 MySQL 和 PHP 开发一个库存软件,本地数据库将同步到在线数据库。

假设我有一张表 sell 并且 sell_id 是该表的主键。我通常使用 INT 和带主键的自动递增。

本地数据库 1 sell 表有 2 个条目(sell_id 1,2),本地数据库 2 sell 表有 2 个条目(sell_id 1,2)。

如果我将这 2 个本地销售表条目同步/插入到在线销售表中,它将变为 (sell_id 1,2,3,4)。

随着销售 ID 的更改,它会影响其他表中使用 sell_id 作为外键的那些条目。

enter image description here

在这种情况下我应该如何计划创建主键。

我打算使用alpha-numeric id,这对两个数据库都是唯一的。它会产生任何问题或进一步减慢我对数百万 sell_id 的数据库查询吗?

enter image description here

还有其他方法可以解决这个问题吗?

最佳答案

评论太长了。

通常,当您有一个复制系统时,目标是在所有服务器上维护相同的数据。这似乎不是您的业务要求。

相反,您可以考虑在所有服务器上使用复合主键。这会将自动递增的主键与服务器 ID 结合起来。所有引用外键的表都需要合并“服务器”列和“id”。

总的来说,我不喜欢复合主键。但是,你有一个分布式数据库,需要确定数据所在的具体数据库“分区”。这似乎是复合主键的一个很好的用例。

另一种方法(如果您愿意承担风险)是在每台服务器上将自动编号设置为不同的起始值。使用大整数和大值,例如一台服务器使用 1,000,000,000,000,下一台服务器使用 2,000,000,000,000,依此类推。不过,我更喜欢将“服务器”明确表示为一列。

关于php - 在线和本地MySQL数据库需要同步时如何创建主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31538565/

相关文章:

database - Perl 在 HTML::Template 中嵌套了 TMPL_LOOP

python - Pyinstaller 无法将信息插入到 sqlite 数据库文件 --onefile

mysql - 显示基于另一个表的表信息

database - 使用外键创建 KDB+/Q 表

php - 架构文件托管 ftp 服务器

php - XML 解析子问题

mysql - 如何在 oracle sql 中合并(列)两个 SELECT 语句的输出?

mysql - 如何以任意顺序获取一行的位置?

php - SQL 查询在第三个 AND 附近不起作用

php - 如何更改 wordpress 中特色图片的图片大小?