/* \i 'H:\\Linguaggi_1\\PostgreSQL\\Musiche-1_Create.sql' */

DROP DATABASE IF EXISTS musiche;

CREATE DATABASE musiche; /* Creazione del db */

\c musiche

CREATE TABLE PERSONE (
    NomePersona VARCHAR(20) PRIMARY KEY,
    AnnoNascita INTEGER NOT NULL
);

CREATE TABLE ALBUM (
    IdeAlbum INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
    TitoloAlbum VARCHAR(50) NOT NULL,
    AnnoAlbum INTEGER NOT NULL
);

CREATE TABLE CANZONI (
    IdeCanzone INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
    TitoloCanzone VARCHAR(50) NOT NULL,
    AnnoCanzone INTEGER
);

CREATE TABLE ALBUM_CANZO (
    IdeAlbum INTEGER REFERENCES ALBUM(IdeAlbum) ON DELETE CASCADE ON UPDATE CASCADE,
    IdeTraccia INTEGER,
    IdeCanzone INTEGER NOT NULL REFERENCES CANZONI(IdeCanzone) ON DELETE CASCADE ON UPDATE CASCADE,
    PRIMARY KEY(IdeAlbum, IdeTraccia),
    UNIQUE(IdeAlbum, IdeCanzone)
);

CREATE TABLE AUTORI_CANZO (
    NomePersona VARCHAR(20) REFERENCES PERSONE(NomePersona) ON DELETE CASCADE ON UPDATE CASCADE,
    IdeCanzone INTEGER REFERENCES CANZONI(IdeCanzone) ON DELETE CASCADE ON UPDATE CASCADE,
    PRIMARY KEY(NomePersona, IdeCanzone)
);

CREATE TABLE CANTANTI_CANZO (
    NomePersona VARCHAR(20) REFERENCES PERSONE(NomePersona) ON DELETE CASCADE ON UPDATE CASCADE,
    IdeCanzone INTEGER REFERENCES CANZONI(IdeCanzone) ON DELETE CASCADE ON UPDATE CASCADE,
    PRIMARY KEY(NomePersona, IdeCanzone)
);
