要比较不同供应商(Oracle,SQL Server,DB2,MySQL和PostgreSQL)的数据库,如何唯一地识别任何对象,我是否需要目录?例如,在Java的DatabaseMetadata中,我应该至少指定目录和模式fooPattern。
目录只是数据存储的抽象是真的吗?
答案 0 :(得分:105)
在Oracle中:
在PostgreSQL中:
在MySQL中:
在Microsoft SQL Server中:
dbo
所以我认为回答你的问题是:
这取决于实现,是否需要目录名来标识对象。 “目录”,“架构”和“数据库”的含义因实现而异。
是的,目录是数据存储的抽象。我认为它也应该被定义为一个自包含的孤立命名空间,但不是所有的SQL引擎都这样做。
数据库和架构。 目录有时是“数据库”的同义词(至少在Oracle和Postgres中),有时与“schema”同义,有时也是两者的同义词。术语目录通常也意味着元数据收集(也称为系统表)。
答案 1 :(得分:5)
对于DB2,架构用作命名空间。因此,如果您想要唯一地标识数据库中的对象,您可以说* schema.object_name *。这是实现多租户的一种非常方便的方式。您可以为数据库中的每个租户设置单独的架构。这提供了安全性和管理方面的关注点的良好分离。您可以在单个DB2数据库中拥有32K模式。
DB2中的目录只是包含有关数据库元数据的系统表的集合。通常,直接访问目录对象被认为是一种不好的做法。最好使用API提供的工具(例如JDBC)来浏览目录及其包含的元数据。
DB2还有其他抽象层。您可以在同一台计算机上运行多个DB2实例。每个实例可以管理256个单独的数据库(每个数据库具有32K模式)。服务器上的DB2实例数仅受可用内存量的限制。在某个时间点,我们在Amazon EC2 m1.large上运行了120个DB2实例(每个实例有一个数据库和10个连接)。 您还可以在单个服务器上安装多个DB2。在测试您计划迁移到的新版本时,它非常有用。虽然经常忘记切换到正确的安装,但我确实感到困惑。
答案 2 :(得分:4)
这里提到的有关mysip in post by filiprem的内容似乎不正确。根据以下链接,在mysql中jdbc目录对应于数据库。不支持jdbc架构。