代码之家  ›  专栏  ›  技术社区  ›  Stefano Borini

数据库表名称空间是否存在?

  •  5
  • Stefano Borini  · 技术社区  · 15 年前

    我一直在想,我使用的所有关系数据库都有一个相关(对我来说)但不存在的特性:不可能使用名称空间表。

    例如,在MySQL中,可以使用数据库名称完全限定表,例如 dbname.tablename ,数据库充当“前缀”或“名称空间”。但是,此功能仅限于此,不会带您走多远。名称空间支持将使您可以使用如下语法 dbname.namespace.table 。您可以将相关表分组到不同的命名空间中,例如(对于博客)

    db.userdata.logininfo
    db.userdata.preferences
    db.postdata.content
    db.postdata.acls
    

    db.blog.whatever
    db.wiki.whatever
    db.common.auth
    

    这将允许保持在同一个数据库中(利用这种设置的所有优点),同时提供一个更灵活和自我记录的环境。然而,大多数时候,我发现表名中的下划线被用作一种明显的解决方法。

    我的问题是:是否存在具有这种功能的DBMS(可能有不同的名称)?在数据库设计实践中,它是否被认为不够重要而无法获得支持?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Community Mohan Dere    10 年前

    我相信这就是所谓的 SQL Server中的模式 。它是在SQL Server 2005中引入的。表属于模式,通过点表示法引用,例如 owner.schema.tablename 例如 dbo.HumanResources.Employee .

    Here is one of many explanations AdventureWorks中的模式,这是SQL Server常用的示例数据库。

    现在,您知道了SQL Server使用的名称,可以找到大量有关它的信息。以下是几篇文章,让我们深入了解此功能的好处:

    Benefit from SQL Server 2005's new schema convention

    Security Enhancements in SQL Server 2005: Schema

        2
  •  0
  •   devio    15 年前

    MS SQL Server(2005+)具有可以解释为名称空间的模式(请参阅AdventureWorks示例)。

    在Oracle中,表始终由用户所有,但表访问权限可以授予其他用户,因此您可以实现类似的功能。

    您还可以使用带引号的标识符(MS[],Oracle“”)来使用“namespace.name”命名模式。

        3
  •  0
  •   ConcernedOfTunbridgeWells    15 年前

    我从未在数据库表上看到过分层名称空间,但可以使用SQLServer2005+中的模式来实现这一点。其他DBMS平台中也存在类似的结构。

    Oracle有一个存储过程代码(称为包)的模块作用域,它为代码提供模块级的名称空间。虽然存储过程可以存在于模式中,但T-SQL中不存在任何等价物。