如何比较不同厂商的数据库(如Oracle、SQL Server、DB2、MySQL和PostgreSQL)中的对象并确定是否需要目录?例如,在Java的DatabaseMetadata中,我至少应该指定目录和模式fooPattern。
目录只是数据存储的抽象吗?
如何比较不同厂商的数据库(如Oracle、SQL Server、DB2、MySQL和PostgreSQL)中的对象并确定是否需要目录?例如,在Java的DatabaseMetadata中,我至少应该指定目录和模式fooPattern。
目录只是数据存储的抽象吗?
public
。dbo
。取决于具体实现,是否需要目录名称来标识对象。在不同的实现中,“目录”、“模式”和“数据库”的含义各不相同。
是的,目录是数据存储的一个抽象。我认为它也应该被定义为一个自包含的隔离命名空间,但并非所有的SQL引擎都这样做。
所有的供应商都对“数据库”和“模式”有很好的定义。“目录”有时是“数据库”的同义词(至少在Oracle和Postgres中),有时是“模式”的同义词,有时同时是两者的同义词。术语“目录”通常还指元数据收集(也称系统表)。
“模式”是程序员在SQL数据库中组织工件时应使用的内容,因为它代表带有访问控制层的逻辑命名空间。
TABLE_CAT:iserver, TABLE_SCHEM:null, TABLE_NAME:accountgroups, TABLE_TYPE:TABLE, REMARKS:
。TABLE_SCHEM字段为空。根据此输出,我希望在模式字段中看到与目录字段相同的内容。JDBC定义可能有误,或者MYSQL目录与模式相同吗? - Sam Goldbergdb2 -x“select count (*) from syscat.schemata”
返回33069
。 - Paul Vernon我正在以客户端(驱动程序)的视角分享我的结果。
product
:调用getProductName()
的结果c_term
:调用getCataglogTerm()
的结果s_term
:调用getSchemaTerm()
的结果T_CAT
:调用getTables(null, null, "%", null)
后,TABLE_CAT
的不同值T_SCHEM
:调用getTables(null, null, "%", null)
后,TABLE_SCHEM
的不同值产品 | c_term | s_term | T_CAT |
T_SCHEM |
---|---|---|---|---|
Apache Derby | CATALOG |
SCHEMA |
<empty> | SYS SYSIBM |
H2 | catalog |
schema |
TEST |
INFORMATION_SCHEMA |
HSQL Database Engine | CATALOG |
SCHEMA |
PUBLIC |
INFORMATION_SCHEMA , SYSTEM_LOBS |
SQLite | catalog |
schema |
null | null |
MySQL | database |
<empty> | performance_schema , information_schema |
null |
MariaDB | database |
schema |
information_schema |
null |
PostgreSQL | database |
schema |
pg_catalog , information_schema |
pg_toast |