/
Askoline
/
Homework_DB
Обзор
Документация
Войти
/
Askoline
/
Homework_DB
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
create_tables.sql
84 строки
3 KB
Askoline
Add music database schema, data, and queries
01 авг 2026, 20:49
01 авг 2026, 20:49
a62a964
Код
Авторство
О чём код?
-- ===================================================== -- СОЗДАНИЕ БАЗЫ ДАННЫХ ДЛЯ МУЗЫКАЛЬНОГО СЕРВИСА -- ===================================================== -- Удаление таблиц, если они существуют DROP TABLE IF EXISTS compilation_track CASCADE; DROP TABLE IF EXISTS compilation CASCADE; DROP TABLE IF EXISTS track CASCADE; DROP TABLE IF EXISTS album_artist CASCADE; DROP TABLE IF EXISTS album CASCADE; DROP TABLE IF EXISTS artist_genre CASCADE; DROP TABLE IF EXISTS artist CASCADE; DROP TABLE IF EXISTS genre CASCADE; -- ===================================================== -- 1. СОЗДАНИЕ ТАБЛИЦ -- ===================================================== -- Таблица жанров CREATE TABLE genre ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); -- Таблица исполнителей CREATE TABLE artist ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); -- Таблица альбомов CREATE TABLE album ( id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, year INTEGER ); -- Связь исполнителей с жанрами (многие ко многим) CREATE TABLE artist_genre ( artist_id INTEGER REFERENCES artist(id) ON DELETE CASCADE, genre_id INTEGER REFERENCES genre(id) ON DELETE CASCADE, PRIMARY KEY (artist_id, genre_id) ); -- Связь альбомов с исполнителями (многие ко многим) CREATE TABLE album_artist ( album_id INTEGER REFERENCES album(id) ON DELETE CASCADE, artist_id INTEGER REFERENCES artist(id) ON DELETE CASCADE, PRIMARY KEY (album_id, artist_id) ); -- Таблица треков CREATE TABLE track ( id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, duration INTEGER, album_id INTEGER REFERENCES album(id) ON DELETE CASCADE ); -- Таблица сборников CREATE TABLE compilation ( id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, year INTEGER ); -- Связь сборников с треками (многие ко многим) CREATE TABLE compilation_track ( compilation_id INTEGER REFERENCES compilation(id) ON DELETE CASCADE, track_id INTEGER REFERENCES track(id) ON DELETE CASCADE, PRIMARY KEY (compilation_id, track_id) ); -- ===================================================== -- 2. СОЗДАНИЕ ИНДЕКСОВ ДЛЯ УЛУЧШЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ -- ===================================================== CREATE INDEX idx_album_artist_album_id ON album_artist(album_id); CREATE INDEX idx_album_artist_artist_id ON album_artist(artist_id); CREATE INDEX idx_artist_genre_artist_id ON artist_genre(artist_id); CREATE INDEX idx_artist_genre_genre_id ON artist_genre(genre_id); CREATE INDEX idx_track_album_id ON track(album_id); CREATE INDEX idx_compilation_track_compilation_id ON compilation_track(compilation_id); CREATE INDEX idx_compilation_track_track_id ON compilation_track(track_id);