Занятие 15. Практикум 4
⚡ Кратко: суть темы
Практическое закрепление 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
);
Проверить по документации: диапазоны нормальных значений для показателей здоровья зависят от возраста, пола и медицинских рекомендаций. В учебной таблице они выбраны условно.