多个客户数据库和全球客户

时间:2013-09-05 18:45:12

标签: php mysql database-design

我正在开发一种(可能)大规模跟踪软件,用于跟踪客户数据,以及为与所述客户相关的任务创建的故障单。该系统完全用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必须知道是从1还是从store1_customers提取global_customers的客户ID。这似乎有点脏,我认为在尝试进行多个JOIN查询时会出现问题。

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

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

1 个答案:

答案 0 :(得分:0)

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

对于数据迁移,您最终会得到新的密钥,没有办法解决这个问题。但是,您可以添加一个新列来存储“遗留”ID。这只是规范化数据库的一些痛苦。使用次优数据库设计,比现在更痛苦。

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