database - 使用多个数据库和每个数据库一个模式更好,还是一个数据库有多个模式更好?

标签 database database-design postgresql database-permissions

this comment对于我的一个问题,我在想使用具有 X 模式的数据库是否更好,反之亦然。
我正在开发一个 Web 应用程序,当人们注册时,我会创建(实际上)一个数据库(不,它不是社交网络:每个人都必须有权访问自己的数据,而不能看到其他用户的数据)。这就是我用于我的应用程序的先前版本(仍在 MySQL 上运行)的方式:通过 Plesk API,对于每次注册,我执行以下操作:

  • 创建一个权限有限的数据库用户;
  • 创建一个只能由之前创建的用户和 super 用户访问的数据库(用于维护)
  • 填充数据库

  • 现在,我需要对 PostgreSQL 做同样的事情(项目越来越成熟,MySQL 不能满足所有需求)。我需要独立的所有数据库/模式备份:pg_dump两种方式都可以完美运行,对于可以配置为仅访问一个模式或一个数据库的用户也是如此。
    因此,假设您是比我更有经验的 PostgreSQL 用户,您认为最适合我的情况的解决方案是什么,为什么?使用 $x 数据库而不是 $x 模式会有性能差异吗?将来维护什么解决方案会更好(可靠性)?我所有的数据库/模式将始终具有相同的结构!
    对于备份问题(使用 pg_dump),使用一个数据库和多个模式可能会更好,一次转储所有模式:恢复将非常简单,在开发机器中加载主转储,然后转储和恢复所需的模式:有是一个额外的步骤,但转储所有模式似乎比一一转储它们更快。
    2012 年更新
    嗯,在过去的两年中,应用程序的结构和设计发生了很大的变化。我仍在使用“一个数据库有多个模式”的方法,但是,我的应用程序的每个版本都有一个数据库:
    Db myapp_01
        \_ my_customer_foo_schema
        \_ my_customer_bar_schema
    Db myapp_02
        \_ my_customer_foo_schema
        \_ my_customer_bar_schema
    
    对于备份,我定期转储每个数据库,然后在开发服务器上移动备份。我也在使用 PITR/WAL 备份,但正如我之前所说,我不太可能必须一次恢复所有数据库。所以它今年可能会被驳回(在我的情况下不是最好的方法)。
    从现在起,一个数据库多模式方法对我来说非常有效,即使应用程序结构完全改变。我几乎忘记了:我所有的数据库/模式将始终具有相同的结构!现在,每个模式都有自己的结构,可以根据用户数据流动态变化。

    最佳答案

    PostgreSQL“模式”与 MySQL“数据库”大致相同。在 PostgreSQL 安装上有许多数据库可能会出现问题;拥有许多模式将毫无问题地工作。因此,您肯定希望在该数据库中使用一个数据库和多个模式。

    关于database - 使用多个数据库和每个数据库一个模式更好,还是一个数据库有多个模式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152405/

    相关文章:

    mysql - 数据库建模 : Shipping Rules

    Postgresql 编号行组

    database - 反单调性和单调性约束是什么意思?

    java - NoSql 数据库是否有任何 JDBC 实现?

    android - 来自 Android 设备的远程 MySQL 数据库连接

    python - 在 cron 中引用 ini 文件失败

    asp.net-mvc - 如何从多个模型中设置一个 Viewmodel?

    mysql - 如何为多个用户设计数据库表(MySQL)?

    Angular 通用连接的postgresql问题

    sql - PostgreSQL - 使用大小写将带引号的字符串转换为不同的字符串?