Подтвердить что ты не робот

Какая разница между каталогом и схемой в реляционной базе данных?

Я думал, что схема была объектом "верхней оберткой" перед самой базой данных. Я имею в виду DB.schema.<what_ever_object_name_under_schema>.

Ну, каталог "обертка" теперь довольно запутанный. Зачем нам нужен каталог? С какой целью именно каталог должен быть использован?

4b9b3361

Ответ 1

С реляционной точки зрения:

Каталог - это место, где, между прочим, хранятся все различные схемы (внешние, концептуальные, внутренние) и все соответствующие сопоставления (внешние/концептуальные, концептуальные/внутренние).

Другими словами, каталог содержит подробную информацию (иногда называемую описательной информацией или метаданные) относительно различных объектов, которые представляют интерес для самой системы.

Например, оптимизатор использует информацию о каталогах об индексах и других физических структурах хранения, а также многое другое, чтобы помочь ему решить, как реализовать пользовательские запросы. Аналогично, подсистема безопасности использует информацию каталога о пользователях и ограничениях безопасности, чтобы предоставлять или отклонять такие запросы в первую очередь.

Введение в системы баз данных, 7-е изд., C.J. Date, стр. 69-70.


С точки зрения SQL:

Каталоги называются наборами схем в среде SQL. SQL-среда содержит нулевые или более каталоги. Каталог содержит одна или несколько схем, но всегда содержит схему с именем INFORMATION_SCHEMA, которая содержит представления и домены Информационная схема.

Язык базы данных SQL, (Предлагаемый пересмотренный текст DIS 9075), стр. 45


С точки зрения SQL:

Каталог часто является синонимом базы данных. В большинстве SQL dbms, если вы запрашиваете представления information_schema, вы найдете эти значения в таблице столбцов "table_catalog" для имени базы данных.

Если вы найдете свою платформу с использованием каталога более широким образом, чем любое из этих трех определений, это может означать нечто большее, чем база данных - кластер базы данных, сервер или кластер серверов. Но я сомневаюсь, что, поскольку вы нашли бы это легко в документации своей платформы.

Ответ 2

Отзыв Майка Шеррилла " дал отличный ответ. Я добавлю просто один пример: Postgres.

Cluster = установка Postgres

Когда вы устанавливаете Postgres на машине, эта установка называется кластером. "Кластер здесь не подразумевается в аппаратном смысле нескольких компьютеров, работающих вместе. В Postgres кластер ссылается на то, что вы можете запускать несколько несвязанных баз данных с использованием одного и того же сервера сервера Postgres.

Кластер слов также определяется SQL Стандарт таким же образом, как и в Postgres. Тесное следование стандарту SQL является основной целью проекта Postgres.

SQL-92 указывает:

Кластер представляет собой набор каталогов, определенный реализацией.

и

Точно один кластер связан с SQL-сессией

Что тупой способ сказать кластер - это сервер базы данных (каждый каталог - это база данных).

Кластеp > Каталог > Схемa > Таблицa > Столбцы и строки

Итак, в Postgres и SQL Standard у нас есть эта иерархия сдерживания:

  • На компьютере может быть один кластер или несколько.
  • Сервер базы данных - это кластер.
  • В кластере каталоги. (Каталог = База данных)
  • Каталоги schemas. (Schema = namespace таблиц и границ безопасности)
  • Схемы таблицы.
  • В таблицах rows.
  • Строки имеют значения, определенные столбцы. Эти значения являются бизнес-данными, которые ваши приложения и пользователи заботятся о таких, как человек имя, дата выставления счета, цена продукта, высокий балл геймеров. В столбце определяется тип данных значений (текст, дата, число и т.д.).

Diagram showing nesting boxes representing how connecting on a port gets you to cluster (a database server) which contains one or more Catalogs (a database) each of which contains one or more Schemas (a namespace) each of which contains tables each of which has rows.

Несколько кластеров

Эта диаграмма представляет собой один кластер. В случае Postgres вы можете иметь более одного кластера на главный компьютер (или виртуальную ОС). Обычно выполняется множество кластеров для тестирования и развертывания новых версий Postgres (например: 9.0, 9.1, 9.2, 9.3, 9.4, 9.5).

Если у вас есть несколько кластеров, представьте, что диаграмма выше дублируется.

Различные номера портов позволяют нескольким кластерам жить одновременно и одновременно. Каждому кластеру присваивается свой номер порта. Обычный 5432 является только по умолчанию и может быть установлен вами. Каждый кластер прослушивает свой собственный назначенный порт для входящих подключений к базе данных.

Пример сценария

Например, у компании могут быть две команды разработчиков программного обеспечения. Один пишет программное обеспечение для управления складами, в то время как другая команда создает программное обеспечение для управления продажами и маркетингом. Каждая команда разработчиков имеет свою собственную базу данных, блаженно не знающую других.

Но команда ИТ-операций приняла решение запустить обе базы данных на одном компьютере (Linux, Mac и т.д.). Итак, на этой коробке они установили Postgres. Таким образом, один сервер базы данных (кластер базы данных). В этом кластере они создают два каталога, каталог для каждой команды разработчиков: один - "склад" и один - "продажи".

Каждая команда разработчиков использует множество десятков таблиц с разными целями и ролями доступа. Поэтому каждая команда разработчиков организует свои таблицы в виде схем. По совпадению обе команды разработчиков выполняют некоторое отслеживание учетных данных, поэтому каждая команда имеет схему с именем "учет". Использование одного и того же имени схемы не является проблемой, потому что у каждого каталога есть свой namespace, поэтому никакого столкновения.

Кроме того, каждая команда в конечном итоге создает таблицу для целей бухгалтерского учета под названием "регистр". Опять же, никакого столкновения имен.

Вы можете представить этот пример как иерархию...

  • Компьютер (аппаратный блок или виртуализованный сервер)
    • 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 по сравнению с sales.accounting.ledger.


Кстати...

Вы можете услышать словосочетание, используемое в более общем смысле, что означает весь дизайн конкретной структуры таблицы базы данных. Напротив, в стандарте SQL слово обозначает конкретный уровень в иерархии Cluster > Catalog > Schema > Table.

Postgres использует как базу данных слова, так и каталог в разных местах, например команду CREATE DATABASE.

Не вся система баз данных обеспечивает эту полную иерархию Cluster > Catalog > Schema > Table. У некоторых есть только один каталог (база данных). У некоторых нет схемы, всего один набор таблиц. Postgres - исключительно мощный продукт.