0

我正在开发一个网络平台来管理我所在地区学校的学生注册。为此,我在 MySQL (5.7.19) 上运行了 17 个数据库,其中一个是主数据库,另外 16 个代表学校。学校数据库(必须)具有完全相同的模式,每个模式都包含对应于相关学校的数据。我以这种方式分开以避免延迟,因为每所学校可以注册许多应用程序(平均 16k),因此请求可能会随着时间的推移而变得更重。

现在我有一个严重的问题:当我更改学校数据库的架构时,我必须手动为其他学校的数据库做,以保持架构的一致性,因为我的 sql 请求是独立于学校发出的。例如,如果我在 database_school5 的 table_b 中添加一个新字段,我必须在所有剩余数据库的 table_b 上手动执行相同的操作。

我可以做些什么来有效地管理这些变化?有自动解决方案吗?是否有适合此问题的 DBMS?

有人告诉我,PostgreSQL 可以通过 INHERITANCE 轻松实现这一点,但这仅涉及表,除非我做了一些糟糕的研究。

我希望每次对数据库模式进行更改时,无论是添加表、添加字段、删除字段、添加约束等,更改都会自动传输到其他数据库。

提前致谢。

4

1 回答 1

0
SELECT ... FROM information_schema.tables
    WHERE schema_name LIKE 'database_school%'
      AND table_name != 'the 17th table'
      AND schema_name != 'database_school5'  -- since they have already done it.

这将找到 16 个名称。你投入...的是CONCAT(...)构建ALTER TABLE ...语句。

然后您执行以下操作之一:

计划 A:手动将它们复制/粘贴ALTERs到 mysql 命令行工具中以执行它们。

计划 B:将所有内容包装在一个存储过程中,该过程将循环遍历结果SELECT并准备+执行每个结果。

于 2019-01-26T16:40:10.147 回答