【问题标题】:MySQL: Designing a application with primary and secondary Databases [closed]MySQL:设计具有主数据库和辅助数据库的应用程序 [关闭]
【发布时间】:2016-06-17 16:19:41
【问题描述】:

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

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

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

然后,每个特许经营商将有一个二级数据库,其中包含他们的库存盘点、销售、客户等。所有特许经营商都将拥有自己的数据库。

这样,应用程序将按如下方式运行:

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

我的问题是:

  1. 假设所有数据库都将托管在同一台服务器上,那么为每个特许经营权拥有单独的数据库是否是一种好习惯?最好为每个数据库分配不同的用户,还是只有一个用户就足够了?

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

【问题讨论】:

    标签: php mysql database codeigniter


    【解决方案1】:

    1) 这将是不好的做法。

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

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

    【讨论】:

    • 我明白了。我也考虑过这一点,但我不确定我是否会遇到性能问题。 250 个特许经营商共享同一个数据库,让我们考虑一个有 10k 行的表。如果数据库构建良好,这是否会成为未来的问题?
    • 如果数据库建得很好,你就很好。正确的索引将有助于大型表的性能。如果使用量超过了良好的数据库服务器,请查看replication。负载平衡到多台服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2011-09-09
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多