Что такое schema в БД?

Что такое schema в postgreSQL? Её надо создавать сразу после создания БД? Это логическое устройство таблиц, наполнения, прав и т.д. И тогда может быть много схем и они могут использовать общие таблицы?


Ответы (1 шт):

Автор решения: Мелкий

Schemas are analogous to directories at the operating system level, except that schemas cannot be nested.

Схемы - это дополнительный уровень структурирования объектов базы. Похоже на директории в файловой системе или пространства имён (namespace) в программировании. Но не могут быть вложенными.

Пользуясь аналогией с файловой системой и вебом: есть файлы стилей CSS, какие-то JS. Ничто не мешает их все размещать в корневой директории веб-сервера. Но обычно их размещают всё-таки в поддиректориях для собственного удобства.

После создания новой базы у вас будет предопределённая схема public с правами для создания новых объектов для всех пользователей. Что делать дальше - решение разработчика схемы этой базы, проигнорировать схемы и размещать всё в public, структурировать как-либо по схемам, можно удалить public схему даже.

Делать таблицы:

  • users
  • user_settings
  • user_favorites
  • blog_posts
  • blog_comments

Или же:

  • users
  • users.settings
  • users.favorites
  • blog.posts
  • blog.comments

Самой базе без разницы. Схемы - это логический уровень, как названия таблиц.

Большинство проектов схемы не используют.


Права: у схем есть права create - кто может создавать новые объекты, и usage - кто может обращаться к объектам в той схеме. Поэтому может быть удобно для разработчиков сделать отдельную схему user_tmp и исключить её из бекапов, а в остальные схемы не давать прав create - тем самым форсируя, что таблицы приложения проходят через обычную принятую у вас процедуру миграций.


Для полноты картины: схемы public может и не быть, если она была удалена в базе, которая указанна в template опции create database

→ Ссылка