Какие типы таблиц существуют в реляционных базах данных (например, в MySQL)?

«Какие типы таблиц существуют в реляционных базах данных (например, в MySQL)?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте реляционных СУБД, таких как MySQL, «типы таблиц» (или движки хранения) определяют внутреннюю структуру хранения данных, поддерживаемые функции и производительность. Основные движки, с которыми я работал:

  1. InnoDB (движок по умолчанию с MySQL 5.5+)

    • Ключевые особенности: Поддержка транзакций (ACID), внешних ключей (FOREIGN KEY), row-level locking.
    • Когда использовать: Практически для всех таблиц в production. Если нужна надежность, целостность данных и конкурентный доступ. Например, для таблиц users, orders, transactions.
      CREATE TABLE orders (
      id INT PRIMARY KEY AUTO_INCREMENT,
      user_id INT,
      amount DECIMAL(10,2),
      FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
      ) ENGINE=InnoDB;
  2. MyISAM (устаревший)

    • Особенности: Table-level locking, нет транзакций и внешних ключей, быстрее чтение.
    • Когда использовать: В современных проектах почти не применяется. Раньше использовался для таблиц, предназначенных только для чтения (логи, справочники).
  3. MEMORY (HEAP)

    • Особенности: Хранит данные в оперативной памяти. Очень быстрый, но данные теряются при перезагрузке сервера. Использует hash-индексы.
    • Когда использовать: Для временных данных, сессий, кэширования промежуточных результатов ETL-процессов.
  4. ARCHIVE

    • Особенности: Оптимизирован для хранения больших объемов исторических данных, которые редко запрашиваются. Отличное сжатие.
    • Когда использовать: Для логов аудита, архивных записей, которые нужны только для редких выборок.
  5. CSV

    • Особенности: Хранит данные в текстовом файле в формате CSV. Нет индексов.
    • Когда использовать: Для обмена данными с внешними системами, которые работают с CSV-файлами.

Выбор движка — это компромисс. Для 99% таблиц в OLTP-системах (онлайн-транзакции) я выбираю InnoDB из-за надежности. Специализированные движки (MEMORY, ARCHIVE) применяю точечно под конкретные задачи, где их преимущества критичны.