架构和目录是什么意思?

Tim*_*Tim 1 database

来自 Silberschatz 等人的数据库系统概念:

\n
\n

4.5.7 模式、目录和环境

\n

与早期的 \xef\xac\x81le 系统一样,早期的数据库系统也为所有关​​系提供一个名称空间。用户必须协调以确保他们不会尝试对不同的关系使用相同的名称。现代数据库系统为命名关系提供了三级层次结构。层次结构的顶层由目录组成,每个目录都可以包含架构。SQL 对象(例如关系和视图)包含\n在架构内。(某些数据库实现使用术语\n \xe2\x80\x9cdatabase"代替术语目录。)

\n

为了对数据库执行任何操作,用户(或程序)\n必须\xef\xac\x81首先连接到数据库。用户必须提供用户名\n并且通常还需要提供密码以验证用户的身份。每个用户都有一个默认的目录架构,并且该组合对于该用户来说是唯一的。当用户连接到数据库系统时,将为该连接设置默认\n目录和架构;这对应于当用户登录操作系统时\n当前目录被设置为用户\xe2\x80\x99 的主目录。

\n

为了唯一地标识关系,可以使用由三部分组成的名称,例如\ncatalog5.univ schema.course 我们可以省略\n目录组件,在这种情况下,名称的目录部分被视为\n默认目录用于连接。因此,如果catalog5是默认目录,我们可以使用univ schema.course来唯一地标识相同的关系。

\n
\n
    \n
  1. 关系有一个模式,它是关系的所有\n属性的集合。上面引用中的“模式”似乎对应于多个关系。上面引用中的“模式”是否与关系的模式相同?
  2. \n
  3. 目录和数据库之间有什么关系?目录和数据库之间的关系是一对一的吗?
  4. \n
  5. mysql、postgresql 或\nSQL Server 中的目录和架构是什么样的?
  6. \n
\n

谢谢。

\n

Bas*_*que 5

你的第一句话毫无意义。

\n\n

像 \xe2\x80\x9cperson\xe2\x80\x9d 这样的表/关系具有像 \xe2\x80\x9cname\xe2\x80\x9d、\xe2\x80\x9cphone\xe2\x80\x9d 和 \ 这样的属性/列xe2\x80\x9cemail\xe2\x80\x9d。

\n\n

表在称为模式的名称空间中分组在一起。因此,诸如 \xe2\x80\x9cwarehouse\xe2\x80\x9d 之类的模式可以有一个名为 \xe2\x80\x9cperson\xe2\x80\x9d 的表,而另一个模式如 \xe2\x80\x9csales\xe2\x80\ x9d 还可以有一个名为 \xe2\x80\x9cperson\xe2\x80\x9d 的表。每个目录都有一个或多个模式,每个模式都带有一个名称,例如此处所示的 \xe2\x80\x9cwarehouse\xe2\x80\x9d 和 \xe2\x80\x9csales\xe2\x80\x9d 。

\n\n

除了作为命名空间之外,模式通常还充当安全边界。据我所知,这是一个实现细节,SQL 标准并不要求。

\n\n

\xe2\x80\x9cschema\xe2\x80\x9d 一词也通常以不同的、更随意和通用的方式使用,来描述为满足应用程序的需求而做出的表和列设计选择。请参阅下面 IMSoP 的第一条评论。非正式意义上的模式可能涉及正式 SQL 标准意义上的任意数量的目录、模式、表和列。

\n\n

至于#2,你的引文解释了这一点。\xe2\x80\x9cCatalog\xe2\x80\x9d 和 \xe2\x80\x9cdatabase\xe2\x80\x9d 是同义词。SQL 标准正式使用单词 \xe2\x80\x9ccatalog\xe2\x80\x9d。

\n\n

对于#3,努力实现 SQL 标准的高级数据库通常支持标准定义的所有级别:集群 > 目录 > 架构 > 表。这包括 Postgres 和 Microsoft SQL Server。

\n\n

H2 数据库引擎支持单独的数据库,每个数据库都是具有架构的目录,但没有将目录/数据库分组在一起的集群。

\n\n

从我对 MySQL 文档的有限搜索中可以看出,MySQL 的局限性更大,并且不支持完整的层次结构。

\n\n
\n\n

有关详细信息,请参阅此相关问题:关系数据库中的目录和架构有何区别?

\n