-- ============================================================
-- Часть 1. Создание базы данных и таблицы components
-- ============================================================
-- Создаём новую базу данных (имя можно изменить)
CREATE DATABASE IF NOT EXISTS components_db;
USE components_db;
-- Таблица с полями name, category, specs (BLOB для динамических столбцов)
CREATE TABLE components (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category VARCHAR(50) NOT NULL,
specs BLOB -- хранилище динамических атрибутов
);
-- ============================================================
-- Наполнение таблицы тестовыми данными (для выполнения запросов)
-- ============================================================
INSERT INTO components (name, category, specs) VALUES
('Intel Core i7-12700K', 'CPU', COLUMN_CREATE('tdp', 125, 'base_clock', 3.6, 'cores', 12)),
('AMD Ryzen 5 5600X', 'CPU', COLUMN_CREATE('tdp', 65, 'base_clock', 3.7, 'cores', 6)),
('NVIDIA GeForce RTX 3080', 'GPU', COLUMN_CREATE('tdp', 320, 'video_memory', 10, 'base_clock', 1440)),
('AMD Radeon RX 6800 XT', 'GPU', COLUMN_CREATE('tdp', 300, 'video_memory', 16, 'base_clock', 2015)),
('Corsair Vengeance LPX 16GB', 'RAM', COLUMN_CREATE('type', 'DDR4', 'capacity', 16, 'speed', 3200)),
('G.Skill Trident Z 32GB', 'RAM', COLUMN_CREATE('type', 'DDR5', 'capacity', 32, 'speed', 6000));
-- ============================================================
-- 3. Извлечение данных при помощи COLUMN_GET
-- ============================================================
-- 3.1 Выведите название, категорию и значение атрибута tdp
SELECT name, category, COLUMN_GET(specs, 'tdp' AS INT) AS tdp
FROM components
WHERE COLUMN_EXISTS(specs, 'tdp');
-- 3.2 Выведите данные о названии, категории у продуктов,
-- чей объем видеопамяти больше или равен 12
SELECT name, category
FROM components
WHERE COLUMN_GET(specs, 'video_memory' AS INT) >= 12;
-- 3.3 Выведите список компонентов, у которых задан атрибут base_clock
SELECT name
FROM components
WHERE COLUMN_EXISTS(specs, 'base_clock');
-- ============================================================
-- 4. Модификация атрибутов
-- ============================================================
-- 4.1 Добавьте атрибут price для процессора
UPDATE components
SET specs = COLUMN_ADD(specs, 'price', 350.00 AS DECIMAL(8,2))
WHERE category = 'CPU';
-- 4.2 Удалите атрибут type у оперативной памяти
UPDATE components
SET specs = COLUMN_DELETE(specs, 'type')
WHERE category = 'RAM';
-- 4.3 Измените параметр tdp у видеокарты (например, увеличим на 10 Вт)
UPDATE components
SET specs = COLUMN_ADD(specs, 'tdp', COLUMN_GET(specs, 'tdp' AS INT) + 10)
WHERE category = 'GPU';
-- ============================================================
-- 5. Добавьте виртуальный столбец, который будет извлекать данные о tdp
-- ============================================================
ALTER TABLE components
ADD COLUMN tdp_virtual INT AS (COLUMN_GET(specs, 'tdp' AS INT)) VIRTUAL;
-- Проверка работы виртуального столбца (опционально)
SELECT name, category, tdp_virtual
FROM components
WHERE tdp_virtual IS NOT NULL;