Связь между каталогом, схемой, пользователем и экземпляром базы данных - PullRequest
54 голосов
/ 30 октября 2011

Для сравнения баз данных разных поставщиков (Oracle, SQL Server, DB2, MySQL и PostgreSQL), как я могу однозначно идентифицировать любой объект и нужен ли мне каталог? Например, в Java DatabaseMetadata я должен по крайней мере указать каталог и схему fooPattern.

Правда ли, что каталог - это просто абстракция хранилища данных?

Ответы [ 3 ]

107 голосов
/ 30 октября 2011

В Oracle:

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

В PostgreSQL:

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

В MySQL:

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

В Microsoft SQL Server:

  • экземпляр сервера == набор управляемых баз данных
  • database == квалификатор пространства имен на сервере, редко называемый каталогом
  • схема == владелец == пространство имен в базе данных, привязанное к ролям базы данных, по умолчанию используется только dbo
  • user == именованная учетная запись, которая может подключаться к серверу и использовать (но не может собственный - схема работает как владелец) объекты в одной или нескольких базах данных
  • для идентификации любого объекта на работающем сервере вам нужно (имя базы данных + владелец + имя объекта)

Поэтому я думаю, что ответ на ваши вопросы:

  1. Это зависит от реализации, нужно ли имя каталога для идентификации объектов. Значение «каталог», «схема» и «база данных» варьируются от одной реализации к другой.

  2. Да, каталог - это абстракция хранения данных. Я думаю, что это также должно быть определено как автономное изолированное пространство имен, но не все механизмы SQL делают это.

  3. База данных и схема довольно хорошо определены всеми поставщиками. Каталог иногда синонимичен «базе данных» (по крайней мере, в Oracle и Postgres), иногда синонимичен «схеме», а иногда синонимичен обоим. Термин каталог также часто означает сбор метаданных (он же системные таблицы).

5 голосов
/ 02 ноября 2011

Для DB2 схема используется в качестве пространства имен.Поэтому, если вы хотите однозначно идентифицировать объект в базе данных, вы должны сказать * schema.object_name *.Это очень удобный способ достижения многопрофильности.Вы можете иметь отдельную схему для каждого арендатора в вашей базе данных.Это обеспечивает хорошее разделение проблем как с точки зрения безопасности, так и с точки зрения управления.В одной базе данных DB2 может быть 32 КБ.

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

DB2 также имеет другие уровни абстракции.Вы можете иметь несколько экземпляров DB2, работающих на одном компьютере.Каждый экземпляр может управлять 256 отдельными базами данных (каждая со схемами 32K).Количество экземпляров DB2 на сервере ограничено только объемом доступной памяти.В какой-то момент у нас было 120 экземпляров DB2 (каждый с одной базой данных и 10 подключениями), работающих на Amazon EC2 m1.large.Вы также можете иметь несколько установок DB2 на одном сервере.это полезно при тестировании новой версии, на которую вы планируете перейти.Меня это смущает, хотя я часто забываю переключиться на правильную установку.

4 голосов
/ 04 июля 2012

То, что упоминается здесь о mysql в посте от filiprem, кажется неверным.По следующим ссылкам в mysql каталог jdbc соответствует базе данных.Схема jdbc не поддерживается.

...