要比较不同供应商(Oracle、SQL Server、DB2、MySQL和PostgreSQL)的数据库,我如何唯一地识别任何对象,以及我是否需要一个目录?例如,在Java的DatabaseMetadata中,我至少应该指定catalog和schema模式.
目录只是数据存储的抽象,这是真的吗?
要比较不同供应商(Oracle、SQL Server、DB2、MySQL和PostgreSQL)的数据库,我如何唯一地识别任何对象,以及我是否需要一个目录?例如,在Java的DatabaseMetadata中,我至少应该指定catalog和schema模式.
目录只是数据存储的抽象,这是真的吗?
In Oracle:
In PostgreSQL:
public
In MySQL:
In Microsoft SQL Server:
dbo
所以我认为对你们问题的答案是:
这取决于实现,也取决于是否需要目录名来标识对象.catalog、schema和database的含义在不同的实现中有所不同.
是的,目录是数据存储的抽象.我认为它也应该被定义为一个独立的命名空间,但并不是所有的SQL引擎都这样做.
Database和schema在所有供应商中都有很好的定义.Catalog有时是"数据库"的同义词(至少在Oracle和Postgres中是如此),有时是"模式"的同义词,有时是两者的同义词.术语catalog通常还表示元数据收集(也称为系统表).
程序员应该使用Schema来组织SQL数据库中的工件,因为它代表一个带有访问控制层的逻辑名称空间.