Реляционные базы данных: понятие таблиц, строк, столбцов и отношений

📊 Что такое реляционные базы данных?

Реляционные базы данных (РБД) — это основа современного хранения данных. Они упорядочивают информацию в таблицацах, которые связаны между собой. Представьте библиотеку: книги (таблицы) стоят на полках (база данных), а карточки каталога (связи) помогают быстро найти нужное.

🔥 Главные плюсы:

  • Чёткая структура — данные не превращаются в "кашу"
  • Надёжность — минимизация дублирования
  • Гибкость — сложные запросы за секунды

🧩 Ключевые компоненты РБД

Таблицы (Сущности)

Таблица — это "лист Excel на стероидах". Например, таблица users хранит данные о пользователях:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100) UNIQUE
);

Столбцы (Атрибуты)

Это характеристики сущности. В таблице users:

  • id — уникальный идентификатор
  • name — имя пользователя
  • email — электронная почта

📌 Типы данных важны! VARCHAR(50) означает строку до 50 символов, INT — целое число.

Строки (Записи)

Конкретные экземпляры данных:

INSERT INTO users (id, name, email)
VALUES (1, 'Данила Бежин', 'danila@example.com');

Теперь таблица содержит одну запись — это как строка в Excel.


🔗 Отношения между таблицами

Магия реляционных баз — в связях между таблицами. Есть три основных типа:

1. Один к одному (1:1)

Пример: пользователь и его паспортные данные. У одного пользователя только один паспорт.

CREATE TABLE passports (
    user_id INT PRIMARY KEY,
    number VARCHAR(20),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

2. Один ко многим (1:M)

Самый распространённый тип! Например, пользователь и его заказы:

CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    amount DECIMAL(10,2),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

Один пользователь может иметь много заказов — отсюда и название.

3. Многие ко многим (M:M)

Студенты и курсы: один студент посещает много курсов, один курс включает много студентов. Реализуется через промежуточную таблицу:

CREATE TABLE student_courses (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

🏆 Практический пример: интернет-магазин

Давайте смоделируем простую базу для магазина:

-- Таблица продуктов
CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    price DECIMAL(10,2)
);

-- Таблица заказов
CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- Связь многих-ко-многим между заказами и продуктами
CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id),
    FOREIGN KEY (order_id) REFERENCES orders(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

💡 Обратите внимание:

  • order_items — это промежуточная таблица для связи M:M
  • FOREIGN KEY гарантирует, что нельзя добавить несуществующий продукт в заказ

🧠 Важные концепции

Первичные ключи (PRIMARY KEY)

Уникальный идентификатор записи:

CREATE TABLE students (
    student_id INT PRIMARY KEY,  -- Вот он!
    name VARCHAR(50)
);

Внешние ключи (FOREIGN KEY)

Связывают таблицы, обеспечивая целостность данных:

CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY,
    student_id INT,
    course_id INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

Нормализация

Процесс организации данных для минимизации дублирования. Например, вместо хранения имени клиента в каждом заказе (что приводит к дублированию), мы ссылаемся на таблицу клиентов через user_id.


🚀 Как это работает в реальности?

При запросе "показать все заказы пользователя Данила" SQL делает:

  1. Находит ID Данилы в users
  2. Ищет все заказы с этим user_id в orders
  3. Возможно, соединяет с другими таблицами для деталей

Вот этот запрос:

SELECT o.id, o.order_date, p.name, oi.quantity
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN order_items oi ON o.id = oi.order_id
JOIN products p ON oi.product_id = p.id
WHERE u.name = 'Данила Бежин';

Это и есть сила реляционных баз — сложные вопросы получают простые ответы!


💡 Проверь себя

Попробуй смоделировать базу данных для: 1. Библиотеки (книги, авторы, читатели) 2. Больницы (врачи, пациенты, назначения) 3. Соцсети (пользователи, посты, лайки)

Подсказка: начинай с выявления сущностей (таблиц), их атрибутов (столбцов) и отношений между ними.

Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео