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