Может ли таблица в реляционной базе данных быть не привязана ни к какой схеме (schema)?

«Может ли таблица в реляционной базе данных быть не привязана ни к какой схеме (schema)?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Практика в DevOps и различных СУБД:

  1. Схема по умолчанию: Если схема не указана явно, используется схема по умолчанию, определяемая параметром search_path (в PostgreSQL) или именем пользователя.

    • PostgreSQL: По умолчанию public. CREATE TABLE users (...); создаст таблицу public.users.
    • MySQL: Понятие «база данных» (CREATE DATABASE) часто используется как аналог схемы. USE mydb; CREATE TABLE users(...);.
    • Oracle: Схема обычно соответствует имени пользователя.
  2. Управление через инфраструктуру как код (IaC): В миграциях всегда явно указывайте схему для избежания неоднозначностей.

    -- Пример для PostgreSQL в миграции Liquibase/Flyway
    CREATE TABLE IF NOT EXISTS app_core.users (
        id BIGSERIAL PRIMARY KEY,
        email VARCHAR(255) NOT NULL UNIQUE
    );
    GRANT SELECT ON app_core.users TO read_user;
  3. Исключение — SQLite: SQLite не имеет полноценной концепции схем. Все таблицы находятся в основном пространстве имен базы данных файла.

Для DevOps важно: Использование схем позволяет изолировать данные разных микросервисов в одной БД (хотя это и антипаттерн), управлять правами доступа на уровне схем и организовывать структуру проекта.