← К оглавлению занятия

Занятие 15. Практикум 4

📁 Блок: SQL / MySQL / DDL / Views ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#create #drop #view #auto_increment #null #default #check #insert #update #delete #select #set #where

⚡ Кратко: суть темы

Практическое закрепление DDL и Views. Создаём таблицу products, наполняем её, обновляем остатки и строим View для анализа запасов.

  • CREATE TABLE с ограничениями качества данных.
  • INSERT INTO для наполнения таблицы.
  • UPDATE ... WHERE для точечных изменений.
  • CREATE VIEW с вычисляемыми полями.

Частая ошибка: забыть WHERE в UPDATE.

📖 Создание таблицы products

Таблица товаров объединяет несколько типов ограничений:

  • product_id — автоинкрементный первичный ключ.
  • product_name — обязательное строковое поле.
  • category — значение по умолчанию 'General'.
  • price — неотрицательное число через CHECK.
  • stock_quantity — неотрицательное целое.
  • supplier_id — внешний ключ-предшественник, может быть NULL.
CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    category VARCHAR(50) DEFAULT 'General',
    price DECIMAL(8, 2) CHECK (price >= 0),
    stock_quantity INT CHECK (stock_quantity >= 0),
    supplier_id INT
);

📖 Наполнение данными

Используем INSERT INTO с явным перечислением столбцов:

INSERT INTO products (product_name, category, price, stock_quantity, supplier_id)
VALUES ('Laptop', 'Electronics', 1200.00, 10, 1),
       ('Office Chair', 'Furniture', 150.00, 25, 2),
       ('Pen', 'Stationery', 1.50, 100, 3),
       ('Desk Lamp', 'Furniture', 45.00, 15, 2),
       ('Notebook', 'Stationery', 3.00, 200, 3);

📖 Обновление остатков

Уменьшим складской запас для товара с product_id = 1:

UPDATE products
SET stock_quantity = stock_quantity - 3
WHERE product_id = 1;

📖 Представление product_overview

Представление помогает анализировать запасы, не дублируя расчёты в каждом запросе:

CREATE VIEW product_overview AS
SELECT
    product_name,
    category,
    price * stock_quantity AS stock_value,
    CASE
        WHEN stock_quantity < 20 THEN 'Low Stock'
        ELSE 'In Stock'
    END AS stock_status
FROM products;

📖 Таблица мониторинга здоровья

Задание на проектирование. Пример структуры:

CREATE TABLE health_metrics (
    metric_id INT AUTO_INCREMENT PRIMARY KEY,
    person_name VARCHAR(100) NOT NULL,
    measurement_date DATE NOT NULL,
    heart_rate INT CHECK (heart_rate BETWEEN 30 AND 220),
    systolic_bp INT CHECK (systolic_bp BETWEEN 70 AND 250),
    diastolic_bp INT CHECK (diastolic_bp BETWEEN 40 AND 150),
    weight_kg DECIMAL(5, 2) CHECK (weight_kg > 0),
    notes TEXT
);

Проверить по документации: диапазоны нормальных значений для показателей здоровья зависят от возраста, пола и медицинских рекомендаций. В учебной таблице они выбраны условно.