Answers:
从关系的角度来看:
目录是保存所有各种模式(外部,概念,内部)和所有对应映射(外部/概念,概念/内部)的地方。
换句话说,目录包含有关系统本身感兴趣的各种对象的详细信息(有时称为描述符信息或元数据)。
例如,优化器使用有关索引和其他物理存储结构的目录信息以及许多其他信息来帮助它决定如何实现用户请求。同样,安全子系统首先使用有关用户和安全约束的目录信息来授予或拒绝此类请求。
数据库系统简介,第7版,CJ Date,第69-70页。
目录是在SQL环境中命名为架构的集合。一个SQL环境包含零个或多个目录。目录包含一个或多个模式,但始终包含一个名为INFORMATION_SCHEMA的模式,该模式包含信息模式的视图和域。
数据库语言SQL,(DIS 9075的建议修订文本),第45页
目录通常是数据库的同义词。在大多数SQL dbms中,如果查询information_schema视图,则会发现“ table_catalog”列中的值映射到数据库的名称。
如果您发现使用目录的平台比这三个定义中的任何一个都更广泛,则它可能是指比数据库更广泛的东西-数据库集群,服务器或服务器集群。但我对此表示怀疑,因为您会在平台的文档中轻松找到这一点。
迈克·谢里尔(Mike Sherrill)的“猫召回”(Cat Recall)给出了一个很好的答案。我将仅添加一个示例:Postgres。
在机器上安装Postgres时,该安装称为cluster。这里的“集群”并不是从多台计算机协同工作的硬件意义上说的。在Postgres中,集群是指您可以使用同一个Postgres服务器引擎来建立并运行多个不相关的数据库。
SQL 标准也以与Postgres中相同的方式定义了簇这个词。严格遵循SQL标准是Postgres项目的主要目标。
在SQL-92规范说:
集群是实现定义的目录集合。
和
一个集群与一个SQL会话相关联
这是一种说法,群集是数据库服务器(每个目录都是数据库)的一种愚蠢的方式。
因此,在Postgres和SQL Standard中,我们都具有以下包含层次结构:
此图表示单个群集。对于Postgres,每个主机(或虚拟OS)可以有多个群集。多个集群的通常做法,测试和部署的Postgres的新版本(例如:9.0,9.1,9.2,9.3,9.4,9.5)。
如果您确实有多个群集,请想象上面的图表是重复的。
不同的端口号允许多个群集并排运行并同时运行。每个群集将分配有其自己的端口号。通常5432
仅是默认设置,可以由您设置。每个群集都在为其分配的端口上侦听传入的数据库连接。
例如,一家公司可能有两个不同的软件开发团队。一个团队编写软件来管理仓库,而另一个团队编写软件来管理销售和市场。每个开发团队都有自己的数据库,很高兴没有意识到对方的数据库。
但是IT运营团队决定在单个计算机上运行两个数据库(Linux,Mac,等等)。因此,他们在该盒子上安装了Postgres。因此,一个数据库服务器(数据库集群)。在该集群中,他们创建了两个目录,每个开发团队的目录:一个名为“仓库”和一个名为“销售”。
每个开发团队使用数十个具有不同用途和访问角色的表。因此,每个开发团队都将其表组织成架构。碰巧的是,两个开发团队都对会计数据进行了一些跟踪,因此每个团队碰巧都有一个名为“会计”的架构。使用相同的架构名称不是问题,因为每个目录都有自己的名称空间,因此不会发生冲突。
此外,每个团队最终都会为会计目的创建一个名为“分类帐”的表。同样,没有命名冲突。
您可以将此示例视为层次结构…
Postgres 9.2
集群(安装)
warehouse
目录(数据库)
inventory
图式
accounting
图式
ledger
表sales
目录(数据库)
selling
图式
accounting
模式(与上述名称相同)
ledger
表格(与上述名称相同)Postgres 9.3
簇
每个开发团队的软件都与集群建立连接。这样做时,他们必须指定属于他们的目录(数据库)。Postgres要求您连接到一个目录,但您不仅限于该目录。该初始目录仅是默认目录,在您的SQL语句省略目录名称时使用。
因此,如果开发团队曾经需要访问其他球队的表,他们可以这样做,如果数据库管理员已经给他们的权限这样做。使用以下模式中的显式命名进行访问:catalog.schema.table。因此,如果“仓库”团队需要查看其他团队(“销售”团队)的分类帐,则可以使用编写SQL语句sales.accounting.ledger
。要访问自己的分类帐,他们只需写accounting.ledger
。如果他们在同一段源代码中访问两个分类帐,则可以选择通过包含自己的(可选)目录名称warehouse.accounting.ledger
vs 来避免混淆sales.accounting.ledger
。
顺便说说…
您可能会听到更笼统的含义使用“ 架构 ”一词,即特定数据库表结构的整个设计。相比之下,在SQL标准中,该词专门表示Cluster > Catalog > Schema > Table
层次结构中的特定层。
Postgres 在多个地方(例如CREATE DATABASE命令)使用数据库和目录一词。
并非所有的数据库系统都提供的完整层次结构Cluster > Catalog > Schema > Table
。有些只有一个目录(数据库)。有些没有架构,只有一组表。Postgres是一款功能强大的产品。
PostgreSQL (pg_catalog)
,系统目录,几十存储你的数据库的元数据定义“PG_”表,如pg_index
, pg_trigger
和pg_constraint
。(2)ANSI (information_schema)
,是由SQL标准定义为的同一系统目录的只读视图 information_schema
。pgAdmin中“目录”节点的一个更好的名字可能是“系统”或“系统表”。
...Catalog > Schema...
,有人可以告诉我为什么pgAdmin(PostgreSQL UI)中的“ Catalog”和“ Schema”节点是同级节点,而不是将Schema节点作为Catalog的子节点吗?