我正在开发一种(可能)大规模跟踪软件,用于跟踪客户数据,以及为与所述客户相关的任务创建的故障单。该系统完全用PHP编写,数据库是MySQL。
系统目前支持多个“位置”(例如存储),每个都有自己的客户数据表(在同一个数据库中,每个数据库可以托管一个完整的不同业务')。例如:
customer_id | customer_firstname | customer_lastname
----------------------------------------------------
1 | John | Doe
2 | Bill | Bob
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,我必须有一些方法可以在其他表中更改成千上万的现有记录,以匹配此表的新编号。
有没有更好的方法,或更正确的方法来实现这一目标?如果这个问题确实看似主观,我很抱歉,但它确实归结为数据库问题以及如何以合理的方式处理数据。
答案 0 :(得分:0)
将所有数据合并到一个大表中。这就是数据库的设计使用方式。
对于数据迁移,您最终会得到新的密钥,没有办法解决这个问题。但是,您可以添加一个新列来存储“遗留”ID。这只是规范化数据库的一些痛苦。使用次优数据库设计,比现在更痛苦。
客户类型可能是cusotmer表中的另一列,可能(但根据您的要求),这将是CustomerType
表的FK。