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

时间:2015-07-21 12:04:54

标签: php mysql database database-design

我正在开发一个带有 MySQL和PHP 的库存软件,其中本地数据库将同步到在线数据库。

假设我有一个表sell和sell_id是表的主键。我通常使用INT和主键自动递增。

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

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

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

enter image description here

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

我打算使用字母数字 ID,这对于两个数据库都是唯一的。它会为数百万的sell_id创建任何问题或进一步减慢我的数据库查询吗?

enter image description here

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

1 个答案:

答案 0 :(得分:1)

评论太长了。

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

相反,您可以考虑在所有服务器上使用复合主键。这会将自动递增的主键与服务器ID组合在一起。引用外键的所有表都需要包含"服务器"列以及" id"。

一般来说,我不是复合主键的粉丝。但是,您有一个分布式数据库,需要识别特定的数据库" partition"数据所在的位置。这似乎是复合主键的一个很好的用例。

另一种方法 - 如果您愿意承担风险 - 是在每台服务器上将自动编号设置为不同的起始值。对一台服务器使用一个大的int和一个很大的值,例如1,000,000,000,000,为下一个服务器使用2,000,000,000,000,依此类推。我的偏好是拥有"服务器"但是,明确表示为一列。