puj-course / fis_2024_g2

Other
1 stars 1 forks source link

Diagramar la base de datos #3

Closed Vante52 closed 1 month ago

Vante52 commented 2 months ago

Image

Vante52 commented 1 month ago

-- Eliminar tablas si existen previamente DROP TABLE IF EXISTS album CASCADE; DROP TABLE IF EXISTS artista CASCADE; DROP TABLE IF EXISTS artistasxalbum CASCADE; DROP TABLE IF EXISTS artistasxcancion CASCADE; DROP TABLE IF EXISTS cancion CASCADE; DROP TABLE IF EXISTS cancionesxalbum CASCADE; DROP TABLE IF EXISTS cancionesxlistareproduccion CASCADE; DROP TABLE IF EXISTS empresadiscografica CASCADE; DROP TABLE IF EXISTS genero CASCADE; DROP TABLE IF EXISTS generosxcancion CASCADE; DROP TABLE IF EXISTS idioma CASCADE; DROP TABLE IF EXISTS idiomasxcancion CASCADE; DROP TABLE IF EXISTS listareproduccion CASCADE; DROP TABLE IF EXISTS listasreproduccionxusuario CASCADE; DROP TABLE IF EXISTS suscripcion CASCADE; DROP TABLE IF EXISTS suscripcionesxusuario CASCADE; DROP TABLE IF EXISTS pais CASCADE; DROP TABLE IF EXISTS usuario CASCADE;

-- Tabla de álbumes CREATE TABLE album ( id_album VARCHAR(30) PRIMARY KEY, nombre VARCHAR(30) NOT NULL, fecha_lanzamiento DATE NOT NULL, imagenurl VARCHAR(255) );

-- Tabla de países CREATE TABLE pais ( id_pais VARCHAR(30) PRIMARY KEY, nombre VARCHAR(255) NOT NULL );

-- Tabla de artistas CREATE TABLE artista ( id_artista VARCHAR(30) PRIMARY KEY, nombres VARCHAR(255) NOT NULL, apellidos VARCHAR(20) NOT NULL, nombre_artistico VARCHAR(255) NOT NULL, fecha_registro DATE NOT NULL, email VARCHAR(50) NOT NULL, fecha_nacimiento DATE NOT NULL, biografia VARCHAR(100), fotoperfilurl VARCHAR(255), pais_id_pais VARCHAR(30) NOT NULL, FOREIGN KEY (pais_id_pais) REFERENCES pais(id_pais) );

-- Tabla intermedia artistas por álbum CREATE TABLE artistasxalbum ( artista_id_artista VARCHAR(30) NOT NULL, album_id_album VARCHAR(30) NOT NULL, PRIMARY KEY (artista_id_artista, album_id_album), FOREIGN KEY (artista_id_artista) REFERENCES artista(id_artista), FOREIGN KEY (album_id_album) REFERENCES album(id_album) );

-- Tabla de empresas discográficas CREATE TABLE empresadiscografica ( id_empresa_discografica VARCHAR(30) PRIMARY KEY, nombre VARCHAR(30) NOT NULL, fecha_registro DATE NOT NULL );

-- Tabla de canciones CREATE TABLE cancion ( id_cancion VARCHAR(30), nombre VARCHAR(255) NOT NULL, duracion INTEGER NOT NULL, fecha_lanzamiento DATE NOT NULL, letra TEXT, audio_url VARCHAR(255) NOT NULL, imagen_url VARCHAR(255), empresadiscografica_id_empresa_discografica VARCHAR(30) NOT NULL, PRIMARY KEY (id_cancion, empresadiscografica_id_empresa_discografica), FOREIGN KEY (empresadiscografica_id_empresa_discografica) REFERENCES empresadiscografica(id_empresa_discografica) );

-- Tabla intermedia artistas por canción CREATE TABLE artistasxcancion ( artista_id_artista VARCHAR(30) NOT NULL, cancion_id_cancion VARCHAR(30) NOT NULL, cancion_id_empresa_discografica VARCHAR(30) NOT NULL, PRIMARY KEY (artista_id_artista, cancion_id_cancion, cancion_id_empresa_discografica), FOREIGN KEY (artista_id_artista) REFERENCES artista(id_artista), FOREIGN KEY (cancion_id_cancion, cancion_id_empresa_discografica) REFERENCES cancion(id_cancion, empresadiscografica_id_empresa_discografica) );

-- Tabla intermedia canciones por álbum CREATE TABLE cancionesxalbum ( cancion_id_cancion VARCHAR(30) NOT NULL, cancion_id_empresa_discografica VARCHAR(30) NOT NULL, album_id_album VARCHAR(30) NOT NULL, PRIMARY KEY (cancion_id_cancion, cancion_id_empresa_discografica, album_id_album), FOREIGN KEY (cancion_id_cancion, cancion_id_empresa_discografica) REFERENCES cancion(id_cancion, empresadiscografica_id_empresa_discografica), FOREIGN KEY (album_id_album) REFERENCES album(id_album) );

-- Tabla de listas de reproducción CREATE TABLE listareproduccion ( id VARCHAR(30) PRIMARY KEY, nombre VARCHAR(30) NOT NULL, descripcion VARCHAR(100), imagen_url VARCHAR(255) );

-- Tabla intermedia canciones por lista de reproducción CREATE TABLE cancionesxlistareproduccion ( listareproduccion_id VARCHAR(30) NOT NULL, cancion_id_cancion VARCHAR(30) NOT NULL, cancion_id_empresa_discografica VARCHAR(30) NOT NULL, PRIMARY KEY (listareproduccion_id, cancion_id_cancion, cancion_id_empresa_discografica), FOREIGN KEY (cancion_id_cancion, cancion_id_empresa_discografica) REFERENCES cancion(id_cancion, empresadiscografica_id_empresa_discografica), FOREIGN KEY (listareproduccion_id) REFERENCES listareproduccion(id) );

-- Tabla de géneros musicales CREATE TABLE genero ( id VARCHAR(30) PRIMARY KEY, nombre VARCHAR(20) NOT NULL );

-- Tabla intermedia géneros por canción CREATE TABLE generosxcancion ( genero_id VARCHAR(30) NOT NULL, cancion_id_cancion VARCHAR(30) NOT NULL, cancion_id_empresa_discografica VARCHAR(30) NOT NULL, PRIMARY KEY (genero_id, cancion_id_cancion, cancion_id_empresa_discografica), FOREIGN KEY (genero_id) REFERENCES genero(id), FOREIGN KEY (cancion_id_cancion, cancion_id_empresa_discografica) REFERENCES cancion(id_cancion, empresadiscografica_id_empresa_discografica) );

-- Tabla de idiomas CREATE TABLE idioma ( id_idioma VARCHAR(30) PRIMARY KEY, nombre VARCHAR(20) NOT NULL );

-- Tabla intermedia idiomas por canción CREATE TABLE idiomasxcancion ( idioma_id_idioma VARCHAR(30) NOT NULL, cancion_id_cancion VARCHAR(30) NOT NULL, cancion_empresadiscografica_id_empresa_discografica VARCHAR(30) NOT NULL, PRIMARY KEY (idioma_id_idioma, cancion_id_cancion, cancion_empresadiscografica_id_empresa_discografica), FOREIGN KEY (idioma_id_idioma) REFERENCES idioma(id_idioma), FOREIGN KEY (cancion_id_cancion, cancion_empresadiscografica_id_empresa_discografica) REFERENCES cancion(id_cancion, empresadiscografica_id_empresa_discografica) );

-- Tabla de usuarios CREATE TABLE usuario ( id_usuario VARCHAR(30) PRIMARY KEY, nombres VARCHAR(20) NOT NULL, apellidos VARCHAR(20) NOT NULL, nickname VARCHAR(20) NOT NULL, contra VARCHAR(20) NOT NULL, email VARCHAR(50) NOT NULL, fecha_nacimiento DATE NOT NULL, fecha_registro DATE NOT NULL, rol VARCHAR(10) NOT NULL, estado VARCHAR(15) NOT NULL, pais_id_pais VARCHAR(30) NOT NULL, idioma_id_idioma VARCHAR(30) NOT NULL, foto_perfil_url VARCHAR(255), FOREIGN KEY (pais_id_pais) REFERENCES pais(id_pais), FOREIGN KEY (idioma_id_idioma) REFERENCES idioma(id_idioma) );

-- Tabla intermedia listas de reproducción por usuario CREATE TABLE listasreproduccionxusuario ( usuario_id_usuario VARCHAR(30) NOT NULL, listareproduccion_id VARCHAR(30) NOT NULL, PRIMARY KEY (usuario_id_usuario, listareproduccion_id), FOREIGN KEY (usuario_id_usuario) REFERENCES usuario(id_usuario), FOREIGN KEY (listareproduccion_id) REFERENCES listareproduccion(id) );

-- Tabla de suscripciones CREATE TABLE suscripcion ( id_suscripcion VARCHAR(30) PRIMARY KEY, nombre VARCHAR(15) NOT NULL, max_personas INTEGER NOT NULL );

-- Tabla intermedia suscripciones por usuario CREATE TABLE suscripcionesxusuario ( suscripcion_id_suscripcion VARCHAR(30) NOT NULL, usuario_id_usuario VARCHAR(30) NOT NULL, fecha_inicio DATE NOT NULL, fecha_fin DATE NOT NULL, PRIMARY KEY (suscripcion_id_suscripcion, usuario_id_usuario), FOREIGN KEY (suscripcion_id_suscripcion) REFERENCES suscripcion(id_suscripcion), FOREIGN KEY (usuario_id_usuario) REFERENCES usuario(id_usuario) );