0

我正在开发一个(可能)大规模跟踪客户数据的跟踪软件,以及为与所述客户相关的任务创建的票证。这个系统完全用PHP编写,数据库是MySQL。

该系统目前支持多个“位置”(例如商店),每个位置都有自己的客户数据表(在同一个数据库中,每个数据库可以托管到完全不同的业务安装)。例如:

store1_customers

customer_id | customer_firstname | customer_lastname
----------------------------------------------------
          1 |               John |               Doe
          2 |               Bill |               Bob

store2_customers

customer_id | customer_firstname | customer_lastname
----------------------------------------------------
          1 |               Jill |             Smith
          2 |              Jimmy |            Person

这非常适合将位置分开以满足不同的业务需求。但是,我们需要为可以从任何位置访问的其他实例拥有“全球”客户,同时将其他客户分开。

我能想到的两个选项是创建一个新的“global_customers”表,然后可以单独从中提取,或者将所有数据合并到一个大表中。

我对这两种方法都有顾虑。第一个需要在每个引用客户的表中都有一个新列,以确定要从哪个客户表中提取。例如,store1_tickets必须知道是1store1_customers还是从中提取客户 ID global_customers。这似乎有点脏,我认为尝试执行多个JOIN查询会出现问题。

制作一张巨型表的第二种方法与我有两个方面的关系:第一种是表的大小(到目前为止,每个表可能有 20k+ 条记录,并且只有一个特定的“软件”安装有 7 个位置)。我知道由于 MySQL 的工作方式和处理方式,这一点可能没有实际意义。第二个问题是合并现有数据。我认为这是一场噩梦,因为每个表都有一个 1-20k 的客户 ID,我必须有一些方法来更改其他表中成千上万的现有记录以匹配该表的新编号。

有没有更好的方法,或更合适的方法来实现这一点?如果这个问题看起来很主观,我很抱歉,但它确实归结为数据库问题以及如何以合理的方式处理数据。

4

1 回答 1

0

将所有数据合并到一个大表中。这就是数据库的设计方式。

对于数据迁移,您最终会得到新的密钥,这是没有办法的。但是,您可以添加一个新列来存储“旧版”ID。这只是与规范化数据库相关的一些痛苦。与其坚持使用次优的数据库设计,不如忍受现在的痛苦。

客户类型将是 cusotmer 表中的另一列,可能(但取决于您的要求)这将是CustomerType表的 FK。

于 2013-09-05T19:10:39.567 回答