【问题标题】:What is the difference between a schema and a table and a database?模式与表和数据库之间有什么区别?
【发布时间】:2010-09-22 20:39:37
【问题描述】:

这可能是一个类似(或更糟)的问题。但我一直将模式视为数据库中的表定义。这是错误的或不完全正确的。我不太记得我的数据库课程。

【问题讨论】:

  • 在 oracle 模式中只是指一个用户。也就是说,当我们创建用户时,将创建架构,现在我们可以添加表、视图、索引包等

标签: database schema definition database-table


【解决方案1】:

架构 -> 平面图

数据库 -> 房子

桌子 -> 房间

【讨论】:

  • 有点神秘,但没有错;但你真的认为一个自称 n00b 的人会理解吗?
  • 很好的比喻。我会将“平面图”更改为“蓝图”,因为该架构不仅包含表格,而且蓝图包含布线、供暖和管道。
  • “Schema”实际上只是意味着“计划”。我见过它曾经指代整个数据库,或者只是一个表或视图。
  • @Paul:好点。我最初写的是“蓝图”,但后来改了,因为它并不真正意味着“房子”(至少对我来说不是)。
  • 是的,我倾向于将架构视为 Oracle 中的用户。所以定义甚至因数据库而异:D多么烦人。
【解决方案2】:

简而言之,架构是对整个数据库的定义,因此它包括表、视图、存储过程、索引、主键和外键等。

【讨论】:

    【解决方案3】:

    关系模式是表的逻辑定义——它定义了表的名称,以及每列的名称和类型。这就像一个计划或蓝图。 数据库模式是整个数据库的关系模式的集合。

    table 是一个包含一堆行(又名“元组”)的结构,每个行都具有模式定义的属性。表上可能还有索引,以帮助查找某些列上的值。

    数据库正式地是任何数据的集合。在这种情况下,数据库将是表的集合。 DBMS(数据库管理系统)是管理和运行数据库的软件(如 MySQL、SQL Server、Oracle 等)。

    【讨论】:

    • 一个数据库模式还包括索引、视图等
    • 这肯定是不正确的。数据库本身不是表的集合。例如,您可以拥有 30 个数据库而无需一张表。
    • @Robert - 拥有一个没有任何表的数据库有什么意义?
    • 即使你没有任何表格,那仍然是表格的集合——它是一个表格集合。
    • 没什么我能想到的,但是数据库的定义不会因为那里有/没有表而改变。我必须同意我希望在数据库中找到表:)
    【解决方案4】:

    已显示此特定帖子仅与 Oracle 相关,并且在另一个数据库的上下文中,Schema 的定义会发生变化。

    可能只是用谷歌搜索一下,但仅供参考的术语的定义似乎确实有所不同,这是最烦人的事情 :)

    在 Oracle 中,数据库就是数据库。在您的脑海中,将其视为数据文件和重做日志以及数据库本身(即不是实例)磁盘上的实际物理存在

    架构实际上是一个用户。更具体地说,它是用户拥有的一组表/过程/索引等。另一个用户有不同的架构(他/她拥有的表),但是用户也可以看到他们拥有选择权限的任何架构。所以一个数据库可以包含数百个模式,每个模式有数百个表。您可以在同一个数据库中的不同模式中拥有同名的表。

    表是一个表,一组包含数据的行和列,并且包含在架构中。

    例如,SQL Server 中的定义可能不同。我不知道这一点。

    【讨论】:

      【解决方案5】:

      有关架构的更多信息:

      在 SQL 2005 中,模式是一种对对象进行分组的方法。它是一个可以放入对象的容器。人们可以拥有这个对象。您可以授予对架构的权限。

      在 2000 年,架构相当于一个用户。现在它已经摆脱了束缚并且非常有用。您可以将所有用户 procs 放入某个架构中,并将您的 admin procs 放入另一个架构中。将 EXECUTE 授予适当的用户/角色,您就可以在特定过程上授予 EXECUTE。好的。

      点符号是这样的:

      Server.Database.Schema.Object

      myserver01.Adventureworks.Accounting.Beans

      【讨论】:

        【解决方案6】:

        oracle中的Schema是一个数据库下的一个用户,例如scott是数据库orcl中的一个schema。 在一个数据库中,我们可能有许多类似 scott 的模式

        【讨论】:

          【解决方案7】:

          架构包含数据库。

          数据库是架构的一部分。

          所以,架构 > 数据库。

          架构包含视图、存储过程、数据库、触发器等。

          【讨论】:

            【解决方案8】:

            Schema 的行为看起来就像在 OOP 世界中看到的父对象。所以它不是数据库本身。也许this link 有用。

            但是,在 MySQL 中,两者是等价的。关键字 DATABASE 或 DATABASES 无论出现在哪里,都可以用 SCHEMA 或 SCHEMAS 替换。例子:

            • 创建数据库创建模式
            • 显示数据库显示架构

            Documentation of MySQL

            SCHEMA 和 DATABASE 术语依赖于 DBMS。

            表格是一组数据元素(值),使用垂直列(由其名称标识)和水平行组成的模型进行组织。一个数据库包含一个或多个(通常)Tables。您将数据存储在这些表中。这些表可能相互关联(See here)。

            【讨论】:

            • 有价值的答案
            【解决方案9】:

            Schema 是包含逻辑结构的数据库对象的集合。 它具有拥有它的用户的名称。 database 可以有任意数量的模式。 数据库中的一个表可以出现在两个不同的同名模式中。 用户可以查看为其分配了选择权限的任何架构。

            【讨论】:

              【解决方案10】:

              架构不是针对整个数据库的计划。它是数据库内对象子集(例如表)的计划/容器。

              这就是说,您可以在一个数据库中拥有多个对象(例如表),这些对象不一定属于同一功能类别。因此,您可以将它们分组到各种架构下,并赋予它们不同的用户访问权限。

              也就是说,我不确定您是否可以在多个模式下拥有一个表。 Management Studio UI 提供了一个下拉菜单以将架构分配给表,因此可以只选择一个架构。我猜如果你用 TSQL 来做,它可能会创建 2 个(或多个)具有不同对象 ID 的不同对象。

              【讨论】:

                【解决方案11】:

                数据库模式是一种逻辑分组对象(如表、视图、存储过程等)的方法。将模式视为对象的容器。 表格是行和列的集合。 所有表的组合构成一个数据库。

                【讨论】:

                【解决方案12】:

                正如 MusiGenesis 所说,在大多数数据库中:

                模式:数据库:表::平面图:房子:房间

                但是,在 Oracle 中可能更容易想到:

                模式:数据库:表::所有者:房子:房间

                【讨论】:

                  【解决方案13】:

                  与上面的一些答案相反,这是我根据每个人的经验得出的理解:

                  • MySQL:database/schema :: table
                  • SQL 服务器:database :: (schema/namespace ::) table
                  • 甲骨文:database/schema/user :: (tablespace ::) table

                  请纠正我在 Oracle 中表空间是否是可选的,我已经很久没有使用它们了。

                  【讨论】:

                  • 这个不错!谢谢。虽然缺少 PostgreSQL :)
                  【解决方案14】:

                  来自PostgreSQL documentation

                  数据库包含一个或多个命名模式,而这些模式又包含表。模式还包含其他类型的命名对象,包括数据类型、函数和运算符。相同的对象名可以在不同的模式中使用而不会冲突;例如,schema1myschema 都可以包含名为 mytable 的表。与数据库不同,模式不是严格分开的:用户可以访问他所连接的数据库中任何模式中的对象,如果他有权限这样做的话。

                  人们可能想要使用模式有几个原因:

                  • 允许多个用户使用一个数据库而不互相干扰。

                  • 将数据库对象组织成逻辑组以使其更易于管理。

                  • 可以将第三方应用程序放入单独的架构中,这样它们就不会与其他对象的名称发生冲突。

                  架构类似于操作系统级别的目录,只是架构不能嵌套。

                  【讨论】:

                    【解决方案15】:

                    根据https://www.informit.com/articles/article.aspx?p=30669

                    所有对象的名称在某个范围内必须是唯一的。每一个 数据库必须有一个唯一的名称;模式的名称必须是唯一的 在单个数据库范围内,表的名称必须是 在单个模式的范围内是唯一的,并且列名必须是 表中唯一。索引的名称在一个索引中必须是唯一的 数据库。

                    【讨论】:

                      【解决方案16】:

                      我尝试根据我对以下类比的理解来回答:

                      • 数据库就像房子
                      • 房子里有几种类型的房间。假设你住在一个非常大的房子里。你真的不希望你的客厅、卧室、浴室、夹层楼、树屋等看起来一样。他们每个人都需要一个蓝图来说明如何构建/使用它们。换句话说,例如,他们每个人都需要一个模式来说明如何建造/使用浴室。
                      • 当然,您可能有几间卧室,每间看起来都略有不同。您和您妻子/丈夫的卧室与您孩子的卧室略有不同。每间卧室都类似于您数据库中的一张桌子
                      • DBMS 就像家中的管家。他几乎可以管理所有事情。

                      【讨论】:

                        猜你喜欢
                        • 2011-07-16
                        • 2010-10-14
                        • 2013-07-12
                        • 2023-03-22
                        • 2013-12-22
                        • 1970-01-01
                        • 2012-07-22
                        • 1970-01-01
                        • 2023-03-11
                        相关资源
                        最近更新 更多