0Pricing
MongoDB Academy · Урок

Коллекции и таблицы SQL

Вы сопоставите коллекции MongoDB с реляционными таблицами и поймёте, как гибкая схема меняет проектирование данных.

«Коллекции и таблицы SQL» — бесплатный урок MongoDB Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения MongoDB Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс MongoDB Academy содержит 4 уроков всего.

Tables vs Collections at a Glance

Основной единицей в SQL является таблица, где каждая строка имеет одинаковые столбцы. В MongoDB это коллекция — группа документов, каждый из которых может отличаться от других.

Fixed Schema: The SQL Way

Для SQL требуется фиксированная схема, определяемая до внесения каких-либо данных, и её последующее изменение может привести к пересборке всей таблицы. Это жесткий, но предсказуемый и эффективный с точки зрения хранения данных подход.

-- SQL table: schema defined upfront, rigid
CREATE TABLE users (
  id         SERIAL PRIMARY KEY,
  name       VARCHAR(100) NOT NULL,
  email      VARCHAR(200) UNIQUE NOT NULL,
  age        INT,
  created_at TIMESTAMP DEFAULT NOW()
);
-- Every row must have exactly these columns

Flexible Schema: The MongoDB Way

Коллекция MongoDB появляется в тот момент, когда вы вставляете в нее данные — схема не требуется. Эта гибкая схема отлично подходит для прототипирования, но ваш код должен уметь обрабатывать отсутствующие поля.

// No schema definition needed - collection created on first insert
db.users.insertOne({ name: 'Alice', email: 'alice@test.com', age: 30 });

// Next insert can have completely different fields
db.users.insertOne({ name: 'Bob', email: 'bob@test.com', company: 'Acme', role: 'admin' });

// Both documents live in the same 'users' collection

Schema vs Schema-Less: The Trade-Off

Ни один из вариантов не является безусловным победителем. Фиксированные схемы защищают от некорректных данных, а гибкие позволяют действовать быстро. Валидация JSON-схемы в MongoDB предлагает вам оптимальный компромисс.

Normalization vs Denormalization

SQL отдает предпочтение нормализации — разделению данных по таблицам. MongoDB отдает предпочтение денормализации — встраиванию связанных данных, чтобы считывать их все за один раз без использования JOIN.

// SQL normalized: address in separate table
// SELECT u.name, a.city FROM users u JOIN addresses a ON a.user_id = u.id

// MongoDB denormalized: address embedded in user document
{
  _id: ObjectId('...'),
  name: 'Alice',
  address: { city: 'London', zip: 'EC1A' }   // no JOIN needed
}

Creating Collections Explicitly

Коллекции создаются автоматически, но createCollection позволяет задать параметры заранее — например, ограничение размера (capped collection) для логов или валидатор. В коде приведен пример.

// Create a capped collection explicitly
db.createCollection('appLogs', {
  capped: true,
  size: 10485760,   // 10 MB maximum size
  max: 50000        // optional: max 50,000 documents
});
// When full, oldest documents are automatically removed

Listing and Dropping Collections

Несколько удобных команд позволяют выводить список, подсчитывать количество и удалять коллекции. Чтобы очистить коллекцию, не удаляя её, используйте deleteMany — в MongoDB нет команды TRUNCATE. В коде они показаны.

// Useful collection management commands in mongosh
db.getCollectionNames();
// ['users', 'orders', 'products']

db.users.countDocuments({});
// 4823

db.users.stats().storageSize;
// 2097152 (bytes)

// Delete all documents but keep the collection:
db.users.deleteMany({});
// { acknowledged: true, deletedCount: 4823 }

The _id Field and Primary Keys

В каждой коллекции в качестве первичного ключа используется _id, для которого автоматически создается уникальный индекс. Вы можете указать собственный _id — например, артикул товара (SKU), — при условии, что он будет уникальным.

// Custom _id values
db.products.insertOne({
  _id: 'SKU-HEADPHONES-BLK-42',   // string _id
  name: 'Wireless Headphones Black',
  price: 79.99
});

// Lookup by custom _id is O(log n) via the _id index
db.products.findOne({ _id: 'SKU-HEADPHONES-BLK-42' });

Index Structure Differences

Как SQL, так и MongoDB используют B-дерево индексов, однако MongoDB также позволяет индексировать вложенные поля и элементы массивов. Таким образом, гибкие схемы не снижают скорость выполнения запросов.

// Index a nested field and an array field
db.users.createIndex({ 'address.city': 1 });
// Now queries on city use an index:
db.users.find({ 'address.city': 'Chicago' });

// Multikey index on array field - indexes each element
db.products.createIndex({ tags: 1 });
db.products.find({ tags: 'electronics' }); // uses multikey index

Transactions: Tables vs Collections

Начиная с версии 4.0, MongoDB поддерживает многодокументные транзакции. Однако за счет внедрения связанных данных в один документ часто можно добиться атомарных обновлений, вовсе не прибегая к ним.

// Single-document atomicity (always available)
// Updating order status and adding a tracking number
db.orders.updateOne(
  { _id: orderId },
  { $set: { status: 'shipped', trackingNumber: 'UPS123456' } }
);
// These two field updates happen atomically - no transaction needed

When to Choose Tables Over Collections

Иногда SQL-таблицы — лучший выбор: стабильные схемы, сложные JOIN-запросы или строгая ссылочная целостность. Выбирайте подходящий инструмент, а не самый модный.

Quick Check

Проверьте свое понимание концепций MongoDB и баз данных NoSQL из этого урока.

Lesson Recap

Вы узнали, что коллекции не требуют строгой схемы, MongoDB встраивает связанные данные, чтобы избежать JOIN-запросов, а каждая коллекция автоматически индексирует _id. Далее: базы данных и пространства имен.

Часто задаваемые вопросы

Урок «Коллекции и таблицы SQL» бесплатный?

Да — полный текст урока «Коллекции и таблицы SQL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс MongoDB Academy, подпишись на CoddyKit PRO. Курс MongoDB Academy содержит 4 уроков всего.

Чему я научусь в уроке «Коллекции и таблицы SQL»?

Вы сопоставите коллекции MongoDB с реляционными таблицами и поймёте, как гибкая схема меняет проектирование данных. Ты практикуешь MongoDB Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать MongoDB Academy?

Предыдущий опыт не требуется. MongoDB Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Коллекции и таблицы SQL»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке MongoDB Academy?

Да. Каждый урок MongoDB Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Что такое документ BSON?
  2. Коллекции и таблицы SQL
  3. Базы данных, коллекции и пространства имён
  4. Основы оболочки mongosh
← Назад к MongoDB Academy