MySQL:使用主数据库和辅助数据库设计应用程序

时间:2016-06-17 16:19:42

标签: php mysql database codeigniter

我正在使用CodeIgniter(PHP)和MySQL为面包公司构建应用程序。该公司拥有约250个特许经营权。在设计数据库时我考虑了以下几个方面:

  • 每个特许经营必须拥有自己的数据,因为它们彼此独立
  • 所有产品都在所有特许经营店之间共享,这意味着只有一个菜单
  • 每个特许经营店都有自己的库存计算
  • 应用程序将有3个不同的仪表板:每个特许经营的管理仪表板和销售仪表板,以及仅包含所有特许经营报告的主公司的仪表板。

我设计了一个主数据库,其所有产品,特许经营权和用户都可以访问该应用程序。每个用户都将被分配到特许经营权和仪表板。

然后,每个特许经营店将有一个辅助数据库,包括他们的库存,销售,客户等。所有特许经营都将拥有自己的数据库。

有了这个,应用程序将按照以下方式工作:

  • 用户将访问应用登录页面,并将被要求 输入特许经营权ID,他的登录名和密码。
  • 所有销售都将“复制”到主数据库,使公司能够跟踪其所有特许经营权。

我的问题是:

  1. 假设所有数据库都托管在同一台服务器上,为每个特许经营权建立单独的数据库是一个好习惯吗?最好是为每个数据库分配不同的用户,或者只有一个用户就够了?

  2. 我可以将所有特许经营数据库的名称存储在主数据库中,然后创建一个自定义登录模型,根据特许经营权分配给哪个数据库设置第二个数据库连接吗?

1 个答案:

答案 0 :(得分:2)

1)这是不好的做法。

  • 通过拥有多个数据库,您必须将表设计和将来的更改复制到所有这些数据库中,而不是在一个地方进行更新。如果您发现自己重复数据,则可能存在设计问题,并且会增加许多复杂性。
  • 如果将所有数据存储在单个数据库中,则可以向表中添加“store_id”字段,指定数据所属的存储。对于单个商店用户,您可以按此字段进行过滤。如果用户负责多个商店,您可以在单个登录下轻松整合他们的数据,因为数据在同一个数据库和表中可用。
  • 由于数据已合并,因此您无需复制数据,公司范围的报告和信息中心也更容易生成和维护

2)使用一个数据库,这不需要额外的工作和复杂性。并且您消除了大量问题和故障排除。