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

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

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

Ответы [ 2 ]

146 голосов
/ 30 июля 2013

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

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

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

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

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

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

и

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

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

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

Итак, как в Postgres, так и в стандарте SQL мы имеем следующую иерархию содержимого:

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

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. Итак, один сервер баз данных (кластер баз данных). В этом кластере они создают два каталога, каталог для каждой команды разработчиков: один с именем «склад» и один с именем «продажи».

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

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

Вы можете думать об этом примере как об иерархии ...

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

62 голосов
/ 11 августа 2011

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

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

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

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

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


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

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

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


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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...