【问题标题】:How do I store data that is shared between databases?如何存储数据库之间共享的数据?
【发布时间】:2011-11-06 12:14:26
【问题描述】:

如何存储数据库之间共享的数据?

假设一个联系人管理系统的数据库。每个用户都有一个单独的数据库。用户可以存储他/她的联系人的教育信息。

目前,每个数据库中都有一个名为School 的表,其中存储了该国每所学校的名称。 School 表被 Contact 表引用为 FK。

随着新学校的增加或现有学校的更名,每年左右都会更新学校表。

由于学校信息在所有用户数据库中都是通用的,因此将其移动到单独的通用数据库中似乎是一个更好的主意。但是当它被移动到一个单独的数据库时,你不能在SchoolContact之间创建一个FK约束。

这种情况的最佳做法是什么?

(如果相关的话,我正在使用 SQL Server)

【问题讨论】:

  • 为什么要给每个用户一个单独的数据库?
  • 我给每个用户一个单独的数据库,因为每个用户都是一个使用该软件的整个组织,拥有大量数据。
  • 针对应该 FKed 到 Schools 表的表的查询有多常见?
  • 当用户查找该联系人的教育信息时,这种情况并不常见。或者存在用户搜索从某个学校毕业的所有联系人的情况。
  • 作为旁注,我找到了为每个用户使用单独数据库的答案。 stackoverflow.com/questions/13348/…

标签: sql-server database database-design schema foreign-keys


【解决方案1】:

需要考虑的事项

  • 数据库是备份/恢复的单位。
  • 可能无法将两个数据库恢复到同一时间点。
  • 数据库不支持外键。

因此,我建议在一个参考数据库中管理 School 和任何其他公用表,然后将这些表复制到其他数据库。

【讨论】:

    【解决方案2】:

    开箱即用,外键约束对您没有帮助。您可以考虑复制各个学校表。

    【讨论】:

      【解决方案3】:

      基于您不会经常查询带有SchoolID 列的表这一事实,我认为对这些表的插入/更新将非常罕见......在这种情况下,您可以在您需要在其中检查 SchoolID 是否存在于 Schools 表中的 FK。

      请注意,对具有SchoolID 列的表的每次插入/更新都会对另一个数据库执行查询,因此,数据库之间的距离、它们相互连接的方式以及许多其他因素可能会影响插入的性能/update 语句。

      不过,如果它们在同一台服务器上,并且您已设置好索引和主键,则查询应该相当快。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-28
        • 1970-01-01
        相关资源
        最近更新 更多