【问题标题】:Why is there no definition or syntax for the concept of "Database" in the SQL standard?为什么 SQL 标准中没有“数据库”概念的定义或语法?
【发布时间】:2018-02-26 04:51:37
【问题描述】:

我浏览了ISO/IEC 9075:1992,和ISO/IEC 9075-4:2011,发现没有讨论“数据库”这个词。比如“数据库”的定义,也没有为create databaseuse database等操作指定标准语法。

CREATE DATABASE 的文档在这里解释

SQL 语言的 ANSI/ISO 标准没有指定任何语法 对于数据库的构建,数据库出现的过程 存在并宣布其名称。

我不明白标准中的这种遗漏,谁能解释一下?

【问题讨论】:

  • 不知道为什么人们投票这个不清楚。对我来说清楚。
  • Postgres 文档说“SQL 标准中没有 CREATE DATABASE 语句。数据库相当于目录,其创建是由实现定义的。”
  • @MartinSmith 因为你完全改写了它:)。对我来说不是,我不确定你是否达到了 OP 的意图。但我愿意掷骰子。
  • 我非常有信心这是他们在revision 1 中提出的问题。虽然我对其进行了重组以使其更清晰。
  • SQL标准中对应的概念是“目录”

标签: sql ansi iso ansi-sql


【解决方案1】:

术语“数据库”是不同 RDBMS 实现者的发明,他们以非标准方式使用该术语。不要期望供应商之间使用相同的术语数据库。

ANSI/ISO SQL 标准定义了目录模式。并非所有供应商都根据 SQL 标准实现这些,有些供应商随着时间的推移改变了他们的实现。

https://mariadb.com/kb/en/library/sql-99/catalog/ 部分表示:

一个集群可能包含零个或多个目录。 SQL 目录是一个命名的 一组 Schema,其中一个必须是 Ur-Schema,名为 INFORMATION_SCHEMA。 (INFORMATION_SCHEMA Schema 是一组视图 和包含所有 SQL 数据描述的域 属于那个目录。)目录依赖于一些集群—— 目录名称在集群目录中必须是唯一的 属于 - 并使用实现定义的创建和删除 方法。

模式被称为目录对象,如前所述,一个目录 可能由一个或多个模式组成。目录的名称符合 属于它的模式的名称,并且可以显式 声明,否则您的 DBMS 将提供默认名称。

https://mariadb.com/kb/en/library/sql-99/17-sql-schemas-schema/ 部分表示:

一个目录可能包含一个或多个模式。 SQL Schema 是一个命名的 由特定 AuthorizationID 拥有的一组 SQL 数据。 Schema 依赖于某个 Catalog — Schema name 必须是 在 Schema 所属的 Catalog 中是唯一的 - 并且是 使用 SQL-Schema 语句创建、更改和删除。这 可能属于 Schema 的对象称为 Schema Objects;那 是,它们依赖于一些模式。每个模式对象都有一个名称 在 Schema 中必须是唯一的(在其名称类的对象中) 它属于哪个。架构对象名称类是:

  • 基表和视图。
  • 域和 UDT。
  • 约束和断言。
  • 字符集。
  • 排序规则。
  • 翻译。
  • 触发器。
  • SQL 服务器模块。
  • SQL 调用例程。

一个模式可能由零个或多个这些模式对象组成。这 Schema 的名称限定了属于它的对象的名称, 并且可以明确说明,或者默认名称为 由您的 DBMS 提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2020-08-23
    相关资源
    最近更新 更多