为了比较不同供应商的数据库(Oracle、SQL Server、DB2、MySQL和PostgreSQL),我如何唯一地标识任何对象,我需要目录吗?例如,在Java的DatabaseMetadata中,我至少应该指定目录和模式fooPattern。目录只是数据存储的一个抽象概念,这是真的吗?
zysjyyx41#
在Oracle中:
public
dbo
所以我想对你们问题的回答是:1.这取决于实现,即是否需要目录名称来标识对象。catalog、schema 和 database 的含义随实现的不同而不同。1.是的,目录是数据存储的一个抽象。我认为它也应该被定义为一个独立的命名空间,但不是所有的SQL引擎都这样做。1.Database 和 schema 被所有供应商定义得相当好。Catalog 有时与“database”同义(至少在Oracle和Postgres中是这样),有时与“schema”同义,有时两者都是同义。术语 Catalog 还经常表示元数据集合(又称系统表)。1.Schema 是程序员在SQL数据库中组织工件时应该使用的,因为它表示具有访问控制层的逻辑命名空间。
vxf3dgd42#
对于DB2,模式被用作名称空间。因此,如果您想唯一地标识数据库中的对象,您可以说 schema.object_name。这是实现多租户的一种非常方便的方法。您可以为数据库中的每个承租者使用一个单独的模式。这可以很好地将安全性和管理方面的问题分离开来。在一个DB2数据库中可以有32K个模式。DB2中的目录只是一个系统表的集合,其中包含有关数据库的元数据。通常,直接访问目录对象被认为是一种不好的做法。最好使用API提供的工具(例如JDBC)来浏览目录及其包含的元数据。DB2还有其他的抽象层,您可以在同一台机器上运行多个DB2示例,每个示例可以管理256个独立的数据库服务器上DB2示例的数量只受可用内存量的限制。(每个DB2都有一个数据库和10个连接)。您还可以在一台服务器上安装多个DB2。在测试您计划迁移到的新版本时,这很有用。我确实觉得这很混乱,尽管经常忘记切换到正确的安装。
acruukt93#
filiprem在这里提到的mysql似乎是不正确的。根据下面的链接,在mysql中jdbc目录对应于数据库。jdbc模式不受支持。
3条答案
按热度按时间zysjyyx41#
在Oracle中:
在PostgreSQL中:
public
在MySQL中:
在Microsoft SQL服务器中:
dbo
所以我想对你们问题的回答是:
1.这取决于实现,即是否需要目录名称来标识对象。catalog、schema 和 database 的含义随实现的不同而不同。
1.是的,目录是数据存储的一个抽象。我认为它也应该被定义为一个独立的命名空间,但不是所有的SQL引擎都这样做。
1.Database 和 schema 被所有供应商定义得相当好。Catalog 有时与“database”同义(至少在Oracle和Postgres中是这样),有时与“schema”同义,有时两者都是同义。术语 Catalog 还经常表示元数据集合(又称系统表)。
1.Schema 是程序员在SQL数据库中组织工件时应该使用的,因为它表示具有访问控制层的逻辑命名空间。
vxf3dgd42#
对于DB2,模式被用作名称空间。因此,如果您想唯一地标识数据库中的对象,您可以说 schema.object_name。这是实现多租户的一种非常方便的方法。您可以为数据库中的每个承租者使用一个单独的模式。这可以很好地将安全性和管理方面的问题分离开来。在一个DB2数据库中可以有32K个模式。
DB2中的目录只是一个系统表的集合,其中包含有关数据库的元数据。通常,直接访问目录对象被认为是一种不好的做法。最好使用API提供的工具(例如JDBC)来浏览目录及其包含的元数据。
DB2还有其他的抽象层,您可以在同一台机器上运行多个DB2示例,每个示例可以管理256个独立的数据库服务器上DB2示例的数量只受可用内存量的限制。(每个DB2都有一个数据库和10个连接)。您还可以在一台服务器上安装多个DB2。在测试您计划迁移到的新版本时,这很有用。我确实觉得这很混乱,尽管经常忘记切换到正确的安装。
acruukt93#
filiprem在这里提到的mysql似乎是不正确的。根据下面的链接,在mysql中jdbc目录对应于数据库。jdbc模式不受支持。