В чем разница между каталогом и схемы в реляционной базе данных?
раньше я думал, что схема была объектом "верхняя оболочка" перед самой базой данных.
Я имею в виду DB.schema.<what_ever_object_name_under_schema>.
Ну, каталог "обертка" теперь довольно запутанный. Зачем нам нужен каталог? Для каких именно целей следует использовать каталог?
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 = пространство имен таблицы и границы безопасности)
 - - схемы таблицы.
 - таблицы строки.
 - строк есть значения, определено колонки.
 
эти значения-это бизнес-данные, которые ваши приложения и пользователи заботятся о таких, как имя человека, срок оплаты счета, цена продукта, высокий балл геймера. Столбец определяет тип данных значений (текст, дата, число, и так далее).
Несколько Кластеров
эта диаграмма представляет собой единый кластер. В случае 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-это исключительно мощный продукт.
