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

Раньше я думал, что схема была объектом «верхней оболочки» перед самой базой данных. Я имею в виду DB.schema. .

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

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

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

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

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

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


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

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

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


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

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

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

Майк Шеррилл «Cat Recall» дал отличный ответ . Я добавлю просто один пример: Postgres .

Кластер = установка Postgres

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

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

Спецификация SQL-92 гласит:

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

а также

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

Это тупой способ сказать, что кластер – это сервер базы данных (каждый каталог – это firebase database).

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

Таким образом, в Postgres и SQL Standard у нас есть эта иерархия сдерживания:

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

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

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

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

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

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

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

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

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

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

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

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

  • Компьютер (ящик или виртуализированный сервер)
    • Кластер Postgres 9.2 (установка)
      • каталог warehouse (firebase database)
        • схема inventory
          • [… несколько таблиц]
        • схема accounting
          • таблица ledger
          • [… некоторые другие таблицы]
      • каталог sales (firebase database)
        • схема selling
          • [… несколько таблиц]
        • (совпадающее имя, указанное выше)
          • Таблица ledger (совпадающее имя, указанное выше)
          • [… некоторые другие таблицы]
    • Кластер Postgres 9.3
      • [… другие схемы и таблицы]

Программное обеспечение каждой команды разработчиков подключается к кластеру. При этом они должны указать, какой каталог (firebase database) принадлежит им. Postgres требует подключения к одному каталогу, но вы не ограничены этим каталогом. Этот начальный каталог является просто стандартным, используемым, когда ваши инструкции SQL опускают имя каталога.

Поэтому, если команде разработчиков требуется доступ к таблицам другой команды, они могут это сделать, если администратор базы данных предоставил им привилегии для этого. Доступ осуществляется с явным именованием в шаблоне: catalog.schema.table . Поэтому, если команде «склада» необходимо увидеть бухгалтерскую книгу другой команды («продаж»), они пишут инструкции SQL с sales.accounting.ledger . Чтобы получить доступ к своей собственной книге, они просто пишут accounting.ledger . Если они обращаются к обоим регистрам в одном и том же fragmentе исходного кода, они могут избегать путаницы, включив их собственное (необязательное) имя каталога, sales.accounting.ledger и sales.accounting.ledger .


Кстати…

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

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

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

Interesting Posts

Как проверить, поврежден ли файл .wmv?

Определение активного сетевого интерфейса

Элементы управления Microsoft Excel ActiveX отключены?

Свойства и аксессоры в Objective-C

Вопрос конфигурации конфигурации WCF в отношении

Может ли Console.Clear использоваться только для очистки строки вместо всей консоли?

jQuery .load () не работает в IE, но отлично работает в Firefox, Chrome и Safari

Изменение размера окна iTerm 2

Thunderbird не поднимает и не фокусируется, когда вы нажимаете «Write» или «Reply»

Проблема с привязкой DependencyProperty

«Npm install» устанавливает все зависимости в каталоге node_modules, вместо того, чтобы иметь вложенные

192.168.1.1 случайным образом переключается между доступом к модему VDSL и доступом к беспроводному маршрутизатору.

В чем разница между xsd: include и xsd: import?

Fit / Scale JComponent для печати страницы

Получение координат строки с использованием ITextExtractionStrategy и LocationTextExtractionStrategy в Itextsharp

Давайте будем гением компьютера.