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


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

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

2 61

2 ответа:

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

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

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

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


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

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

язык базы данных SQL, (предлагаемый пересмотренный текст Дис 9075), p 45


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

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

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

Mike Sherrill 'Cat Recall' дал отличный ответ!--19-->. Я добавлю просто один пример:Postgres.

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

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

слово кластер определяется SQLстандартный точно так же, как и в Постгресе. Пристальное следование стандарту SQL является основной целью проекта Postgres.

The SQL-92 спецификация говорит:

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

и

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

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

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

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

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

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

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

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

вы можете думать о этот пример, как иерархия...

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

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

поэтому, если команде разработчиков когда-либо понадобится доступ к таблицам другой команды, они могут это сделать так что если администратор базы данных дал им льготы чтобы сделать так. Доступ осуществляется с явным именованием в шаблоне:каталог.схема.таблица. Поэтому, если команде "склад" нужно увидеть книгу другой команды ("продажи"), они пишут инструкции SQL с sales.accounting.ledger. Чтобы получить доступ к своей собственной книге, Они просто пишут accounting.ledger. Если они обращаются к обоим бухгалтерским книгам в одном и том же фрагменте исходного кода, они могут решить избежать путаницы, включив свои собственные (необязательно) имя каталога, warehouse.accounting.ledger и sales.accounting.ledger.


кстати...

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

Postgres использует оба слова база данных а также каталог в различных такие места, как СОЗДАТЬ БАЗУ ДАННЫХ.

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