Подтвердить что ты не робот

Взаимосвязь между экземпляром каталога, схемы, пользователя и базы данных

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

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

4b9b3361

Ответ 1

В Oracle:

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

В PostgreSQL:

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

В MySQL:

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

В Microsoft SQL Server:

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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