Joywork/sql/complexes_add_media.sql
2026-05-22 21:21:54 +03:00

70 lines
5.3 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CREATE TABLE `complex_house_media` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'Уникальный идентификатор медиаматериала',
`complex_house_id` BIGINT UNSIGNED NOT NULL COMMENT 'FK → complex_houses.id. Ссылка на дом, к которому загружен файл. Медиаматериал всегда принадлежит одному дому.',
`file_path` VARCHAR(512) NOT NULL COMMENT 'Относительный путь к оригинальному файлу в S3 хранилище. Генерируется при загрузке (UUID + расширение).',
`original_name` VARCHAR(255) NOT NULL COMMENT 'Имя файла, которое пользователь видел при загрузке (напр. render_3k_east.jpg). Используется для отображения в таблице.',
`file_size` INT UNSIGNED NOT NULL COMMENT 'Размер файла в байтах. Для валидации (макс. 10 МБ) и отображения в UI.',
`thumbnail_path` VARCHAR(512) DEFAULT NULL COMMENT 'Относительный путь к миниатюре (300×300 px). Генерируется асинхронно после загрузки.',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_complex_house_id` (`complex_house_id`),
CONSTRAINT `fk_complex_house_media_house` FOREIGN KEY (`complex_house_id`) REFERENCES `complex_houses` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
CREATE TABLE `complex_house_media_set` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'Уникальный идентификатор набора',
`complex_house_id` BIGINT UNSIGNED NOT NULL COMMENT 'FK → complex_houses.id. Набор принадлежит дому',
`name` VARCHAR(255) NOT NULL COMMENT 'Название набора (например «Для студий восток», «Для 2К»)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата создания набора',
`color` VARCHAR(7) NOT NULL DEFAULT '#2196F3' COMMENT 'Цвет набора в формате HEX (например, #2196F3). Используется для отображения на плане.',
PRIMARY KEY (`id`),
INDEX `idx_complex_house_id` (`complex_house_id`),
CONSTRAINT `fk_complex_house_media_set_house` FOREIGN KEY (`complex_house_id`) REFERENCES `complex_houses` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'Наборы (медиа-сеты) — именованные упорядоченные подборки файлов, привязываемые к помещениям';
CREATE TABLE `complex_house_media_set_item` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'Первичный ключ',
`set_id` INT NOT NULL COMMENT 'ID набора (FK → complex_house_media_sets.id)',
`media_id` INT NOT NULL COMMENT 'ID медиафайла (FK → complex_house_media.id)',
`sort_order` SMALLINT NOT NULL DEFAULT 0 COMMENT 'Позиция файла в наборе (0, 1, 2...)',
PRIMARY KEY (`id`),
-- Индекс для быстрого получения всех элементов набора
INDEX `idx_set_id` (`set_id`),
-- Индекс для поиска, в каких наборах используется файл
INDEX `idx_media_id` (`media_id`),
-- Один и тот же файл не может повторяться в одном наборе
UNIQUE KEY `uniq_set_media` (`set_id`, `media_id`),
-- Связь с таблицей наборов (при удалении набора — удаляются элементы)
CONSTRAINT `fk_set_item_set` FOREIGN KEY (`set_id`) REFERENCES `complex_house_media_set` (`id`) ON DELETE CASCADE,
-- Связь с таблицей медиа (при удалении файла — удаляется из всех наборов)
CONSTRAINT `fk_set_item_media`
FOREIGN KEY (`media_id`)
REFERENCES `complex_house_media`(`id`)
ON DELETE CASCADE
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COMMENT='Состав набора: какие файлы входят и в каком порядке';
CREATE TABLE `complex_house_media_set_room` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'Первичный ключ',
`set_id` INT NOT NULL COMMENT 'ID набора (FK → complex_house_media_set.id)',
`complex_room_id` BIGINT UNSIGNED NOT NULL COMMENT 'ID помещения (FK → complex_rooms.id). Уникально — одно помещение = один набор',
PRIMARY KEY (`id`),
INDEX `idx_set_id` (`set_id`),
UNIQUE KEY `uniq_room` (`complex_room_id`),
CONSTRAINT `fk_set_room_set` FOREIGN KEY (`set_id`) REFERENCES `complex_house_media_set` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_set_room_room` FOREIGN KEY (`complex_room_id`) REFERENCES `complex_rooms` (`id`) ON DELETE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'Привязка набора медиа к помещениям (одно помещение = один набор)';