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

时间:2010-07-01 16:58:48

标签: database

我总是想知道我使用的所有关系数据库的一个相关(对我来说)但不存在的特性:命名空间表不可能。

例如,在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 个答案:

答案 0 :(得分:3)

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

AdventureWorks中架构的

Here is one of many explanations,它是SQL Server常用的示例数据库。

现在您知道这是SQL Server使用的名称,您可以找到有关它的大量信息。以下是一些文章,介绍了此功能的优点:

Benefit from SQL Server 2005's new schema convention

Security Enhancements in SQL Server 2005: Schema

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我从未在数据库表上看到过分层命名空间,但您可以在SQL Server 2005+中使用模式来执行此操作。其他DBMS平台也存在类似的结构。

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