Что такое СУБД (система управления базами данных)

Ответ

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

Основные функции СУБД:

  • Управление данными: Предоставление языка для определения, изменения и извлечения данных (например, SQL).
  • Целостность данных: Обеспечение соблюдения правил и ограничений (например, уникальность ключей, внешние ключи).
  • Управление транзакциями: Гарантия атомарности, согласованности, изоляции и долговечности операций (принцип ACID).
  • Контроль доступа: Управление правами пользователей на чтение и изменение данных.
  • Резервное копирование и восстановление: Создание бэкапов и восстановление данных после сбоев.

Классификация по модели данных:

  • Реляционные (SQL): Данные хранятся в виде таблиц со строгой схемой. Примеры: PostgreSQL, MySQL, SQLite, Oracle.
  • Нереляционные (NoSQL): Гибкие модели данных, оптимизированные под разные задачи.
    • Документные: MongoDB, Couchbase
    • Ключ-значение: Redis, Memcached
    • Колоночные: Cassandra, HBase

Пример работы с СУБД SQLite через Python:

import sqlite3

# 1. Подключение к файлу БД (файл будет создан, если не существует)
conn = sqlite3.connect('company.db')
cursor = conn.cursor()

# 2. Создание таблицы (DDL - Data Definition Language)
cursor.execute('''
CREATE TABLE IF NOT EXISTS employees (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    position TEXT NOT NULL
)
''')

# 3. Вставка данных (DML - Data Manipulation Language)
cursor.execute("INSERT INTO employees (name, position) VALUES (?, ?)", ('Alice', 'Developer'))
cursor.execute("INSERT INTO employees (name, position) VALUES (?, ?)", ('Bob', 'Manager'))
conn.commit() # Сохранение изменений

# 4. Выборка данных (DQL - Data Query Language)
cursor.execute("SELECT name, position FROM employees WHERE position = ?", ('Developer',))
for row in cursor.fetchall():
    print(row)

# 5. Закрытие соединения
conn.close()