/
urpdvk
/
SQL_database
Обзор
Документация
Войти
/
urpdvk
/
SQL_database
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
music_service.sql
75 строк
3 KB
urpdvk
SQL_database
22 июн 2026, 20:22
22 июн 2026, 20:22
7af4e0e
Код
Авторство
О чём код?
-- ============================================================ -- Музыкальный сервис — создание схемы БД (PostgreSQL) -- Домашняя работа: реляционная модель, связи 1:N и M:N -- ============================================================ -- На случай повторного запуска: удаляем в обратном порядке зависимостей DROP TABLE IF EXISTS compilation_track CASCADE; DROP TABLE IF EXISTS artist_album CASCADE; DROP TABLE IF EXISTS artist_genre CASCADE; DROP TABLE IF EXISTS track CASCADE; DROP TABLE IF EXISTS compilation CASCADE; DROP TABLE IF EXISTS album CASCADE; DROP TABLE IF EXISTS artist CASCADE; DROP TABLE IF EXISTS genre CASCADE; -- ---------- Основные сущности ---------- -- Жанр CREATE TABLE genre ( id SERIAL PRIMARY KEY, name VARCHAR(60) NOT NULL UNIQUE ); -- Исполнитель CREATE TABLE artist ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL -- имя / псевдоним ); -- Альбом CREATE TABLE album ( id SERIAL PRIMARY KEY, title VARCHAR(100) NOT NULL, release_year SMALLINT NOT NULL ); -- Трек: принадлежит строго одному альбому (связь 1:N) CREATE TABLE track ( id SERIAL PRIMARY KEY, title VARCHAR(100) NOT NULL, duration INTEGER NOT NULL, -- длительность в секундах album_id INTEGER NOT NULL REFERENCES album(id) ); -- Сборник: содержит треки из разных альбомов CREATE TABLE compilation ( id SERIAL PRIMARY KEY, title VARCHAR(100) NOT NULL, release_year SMALLINT NOT NULL ); -- ---------- Связующие таблицы (M:N) ---------- -- Исполнитель <-> Жанр (исполнитель поёт в нескольких жанрах, жанр имеет много исполнителей) CREATE TABLE artist_genre ( artist_id INTEGER NOT NULL REFERENCES artist(id), genre_id INTEGER NOT NULL REFERENCES genre(id), PRIMARY KEY (artist_id, genre_id) ); -- Исполнитель <-> Альбом (альбом выпускают несколько исполнителей, исполнитель участвует во многих альбомах) CREATE TABLE artist_album ( artist_id INTEGER NOT NULL REFERENCES artist(id), album_id INTEGER NOT NULL REFERENCES album(id), PRIMARY KEY (artist_id, album_id) ); -- Сборник <-> Трек (один трек может быть в разных сборниках) CREATE TABLE compilation_track ( compilation_id INTEGER NOT NULL REFERENCES compilation(id), track_id INTEGER NOT NULL REFERENCES track(id), PRIMARY KEY (compilation_id, track_id) );