Database 什么';关系数据库中的目录和模式有什么区别?
我曾经认为模式是数据库本身之前的“上层包装器”对象。 我的意思是Database 什么';关系数据库中的目录和模式有什么区别?,database,schema,catalog,Database,Schema,Catalog,我曾经认为模式是数据库本身之前的“上层包装器”对象。 我的意思是DB.schema. 嗯,目录“包装器”现在相当混乱。我们为什么需要目录?为了什么目的,应该使用目录?从关系的角度来看: 目录是保存所有各种模式(外部、概念、内部)和所有对应映射(外部/概念、概念/内部)的地方 换句话说,目录包含有关系统本身感兴趣的各种对象的详细信息(有时称为描述符信息或元数据) 例如,优化器使用有关索引和其他物理存储结构的目录信息以及许多其他信息来帮助它决定如何实现用户请求。同样,安全子系统首先使用有关用户和安全
DB.schema.
嗯,目录“包装器”现在相当混乱。我们为什么需要目录?为了什么目的,应该使用目录?从关系的角度来看: 目录是保存所有各种模式(外部、概念、内部)和所有对应映射(外部/概念、概念/内部)的地方 换句话说,目录包含有关系统本身感兴趣的各种对象的详细信息(有时称为描述符信息或元数据) 例如,优化器使用有关索引和其他物理存储结构的目录信息以及许多其他信息来帮助它决定如何实现用户请求。同样,安全子系统首先使用有关用户和安全约束的目录信息来批准或拒绝此类请求 《数据库系统导论》,第7版,C.J.日期,第69-70页。
从SQL标准的角度来看: 目录是SQL环境中模式的命名集合。一 SQL环境包含零个或多个目录。目录包含 一个或多个架构,但始终包含名为 包含的视图和域的信息\u架构 信息模式 ,(DIS 9075的拟议修订文本),第45页
从SQL的角度来看: 目录通常是数据库的同义词。在大多数SQL dbms中,如果查询信息\u模式视图,您会发现“table\u catalog”列中的值映射到数据库的名称 如果您发现您的平台使用catalog的方式比这三个定义中的任何一个都要广泛,那么它可能指的是比数据库更广泛的东西——数据库集群、服务器或服务器集群。但我有点怀疑,因为你很容易在你的平台文档中发现这一点 给。我将只添加一个示例: 集群=Postgres安装 在计算机上安装Postgres时,该安装称为群集这里的“群集”并不是指多台计算机一起工作。在Postgres中,集群指的是可以使用同一个Postgres服务器引擎启动并运行多个不相关的数据库 词组的定义也与Postgres中的定义相同。严格遵循SQL标准是Postgres项目的主要目标 说明书上说: 集群是实现定义的目录集合 及 只有一个集群与SQL会话关联 这是一种直截了当的说法,表示集群是一个数据库服务器(每个目录都是一个数据库) 集群>目录>架构>表>列和行 因此,在Postgres和SQL标准中,我们都有这个包含层次结构:
- 一台计算机可以有一个群集或多个群集
- 数据库服务器是一个集群李>
- 一个集群已经存在。(目录=数据库)
- 目录已经更新。(架构=表的数量和安全边界)
- 模式已经存在
- 桌子上有很多
- 行中有由定义的值。
这些值是应用程序和用户关心的业务数据,例如人名、发票到期日、产品价格、玩家高分。该列定义了值的类型(文本、日期、数字等)
5432
仅为默认值,可由您设置。每个集群都在自己分配的端口上侦听传入的数据库连接
示例场景
例如,一家公司可以有两个不同的软件开发团队。一个团队编写软件来管理仓库,而另一个团队构建软件来管理销售和营销。每个开发团队都有自己的数据库,幸好不知道其他团队的数据库
但IT运营团队决定在一台计算机上运行这两个数据库(Linux、Mac等)。所以他们在那个盒子上安装了Postgres。所以只有一个数据库服务器(数据库集群)。在该集群中,他们创建了两个目录,每个开发团队都有一个目录:一个名为“warehouse”,另一个名为“sales”
每个开发团队使用几十个具有不同用途和访问角色的表。因此,每个开发团队都将他们的表组织到模式中。巧合的是,两个开发团队都对记帐数据进行了一些跟踪,所以每个团队都有一个名为“accounting”的模式。使用相同的模式名不是问题,因为每个目录都有自己的名称,因此不会发生冲突
此外,每个团队最终会创建一个名为“分类账”的会计表。同样,没有命名冲突
您可以将此示例视为层次结构
- 计算机(硬件盒或虚拟化服务器)
cluster(安装)Postgres 9.2
目录(数据库)仓库
schemainventory
- […一些桌子]
模式会计
表分类账
- […其他一些表格]
目录(数据库)销售
模式销售
- […]…