代码之家  ›  专栏  ›  技术社区  ›  Ryan Taylor

架构是否应始终在SQL语句中显式定义?

  •  1
  • Ryan Taylor  · 技术社区  · 16 年前

    早些时候我问过这个问题:

    Where (or how) should I define the schema in a select statement when using PostgreSQL?

    我接受的答案是修改连接用户的搜索路径,以便不需要在SQL中指定架构。但是,现在我想知道是否应该总是在SQL中指定模式,而不是允许通过搜索路径自动推断模式。这似乎是一种更安全的方法,并且更易于移植到其他数据库。

    这个问题不同于前一个问题,因为我想知道在SQL中定义模式的最佳实践是什么,而不是如何实现。

    架构是否应始终在SQL语句中显式定义?

    **注意:我不会硬编码模式名称,但会允许通过web.config文件对其进行配置,以便模式可以从一个安装更改为另一个安装。**

    2 回复  |  直到 16 年前
        1
  •  2
  •   Quassnoi    16 年前

    将模式硬编码到 SQL 声明。

    您应该将其保存在应用程序设置和问题中 SET search_path 连接到数据库后。

    如果您的应用程序由多个具有自己模式的用户使用,那么如果不将模式名称硬编码到 SQL .

    换言之,

    string query = "SELECT * FROM " + ConfigurationManager.AppSettings.Get("schema") + ".table";
    

    是一种坏的方式;

    SQLCommand("SET search_path = " + ConfigurationManager.AppSettings.Get("schema"), connection).ExecuteNonQuery();
    string query = "SELECT * FROM table";
    

    是个好办法。

        2
  •  0
  •   Milen A. Radev    16 年前

    让我们看看-在我维护的应用程序的数据库中,有大约12个模式。如果我把它们放在“搜索路径”中,顺序是什么?我会在配置中输入模式名(不是表名,也不是完全限定的表名)吗?

    正如您现在所猜测的,我不使用“搜索路径”。但是,也许您可以在配置中存储完全限定的表名,以防您对模式或表本身的名称有所更改。