<div class="page">
<div class="cover text-center">
<img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo">
# Solució DDL Música
<div class="text-end fit-content ms-auto my-3 mt-auto pt-3">
<p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p>
<p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p>
<p><strong>Curs:</strong> 2024/2025</p>
</div>
<div>
<p class="fw-bold mb-0">Llicència: BY-NC-SA</p>
<p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p>
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank">
<img class="mx-auto" src="/itb/images/license.png" alt="Licence"/>
</a>
</div><!--license-->
</div><!--cover-->
</div><!--page-->
{:toc}
## Objectius
L'objectiu d'aquest exercici és practicar en definir un model relacional en una base de dades relacional
a partir del Diagrama d'Entitat Relació i el Model Relacional.
## Enunciat
Crea la base de dades __musica__ i defineix les taules necessàries
per emmagatzemar correctament la informació.
Totes les sentències per la creacó de la base de dades i les taules han de ser
especificades en un únic fitxer anomenat __create_schema_music.sql__, que ha
de poder executar-se directament en el SGBD sense cap error.
### Diagrama Entitat Relació
{.center}
### Model Relacional
- [ARTISTA]{.blue}(++[#dni]{.red}++, nom)
- [GRUP_MUSICAL]{.blue}(++[#id]{.red}++, nom, data_fundacio, pais)
- [ARTISTA_GRUP]{.blue}(++_[#id_grup]{.red}([GRUP_MUSICAL]{.blue}:[#id]{.red})_++, ++_[#dni_artista]{.red}([ARTISTA]{.blue}:[#dni]{.red})_++, rol)
- [CLUB_FANS]{.blue}(++[#id]{.red}++, nom, direcció, nombre_membres, _id_grup([GRUP_MUSICAL]{.blue}:[#id]{.red})_)
- [COMPANYIA_PRODUCTORA]{.blue}(++[#id]{.red}++, nom, direccio, telefon, fax)
- [ALBUM]{.blue}(++[#id]{.red}++, nom, data_publicacio, _id_grup([GRUP_MUSICAL]{.blue}:[#id]{.red})_, _id_productora([COMPANYIA_PRODUCTORA]{.blue}:[#id]{.red})_)
- [CANÇO]{.blue}(++[#id]{.red}++, titol, duracio)
- [CANÇO_ALBUM]{.blue}(++_[#id_album]{.red}([ALBUM]{.blue}:[#id]{.red})_++, ++_[#id_canço]{.red}([CANÇO]{.blue}:[#id]{.red})_++)
### Taules i consideracions
Crea les següents taules en la base de dades __musica__.
| Table | Field | Type | Description | Constraints |
| --------------------- | --------------- | ----------- | ----------- | ----------- |
| grup_musical | id | int | ID del grup musical | |
| ^^ | nom | varchar(30) | Nom del grup musical | NN |
| ^^ | data_fundacio | date | Data de fundació del grup musical | |
| ^^ | pais | varchar(30) | País del grup musical | |
| companyia_productora | id | int | ID de la companyia productora | |
| ^^ | nom | varchar(30) | Nom de la companyia productora | NN |
| ^^ | direccio | varchar(30) | Direcció de la companyia productora | |
| ^^ | fax | varchar(10) | Fax de la companyia productora | |
| ^^ | telefon | varchar(10) | Telèfon de la companyia productora | |
| album | id | int | ID de l'àlbum | |
| ^^ | nom | varchar(30) | Nom de l'àlbum | NN |
| ^^ | data_publicacio | date | Data de publicació de l'àlbum | |
| ^^ | id_productora | int | ID de la companyia productora d'aquest àlbum | |
| ^^ | id_grup_musical | int | ID del grup musical al qual pertany aquest àlbum | |
| canço | id | int | ID de la cançó | |
| ^^ | titol | varchar(30) | Títol de la cançó | NN |
| ^^ | duracio | int | Duració de la cançó en minuts | |
| canço_album | id_canço | int | ID de la cançó que pertany al àlbum | |
| ^^ | id_album | int | ID de l'àlbum al que pertany la cançó | |
| artist | dni | varchar(10) | DNI de l'artista | |
| ^^ | nom | varchar(30) | Nom de l'artista | NN |
| artista_grup | dni_artista | varchar(10) | DNI de l'artista que pertany a el grup | |
| ^^ | id_grup_musical | int | ID del grup musical al qual pertany l'artista | |
| ^^ | rol | varchar(20) | Rol que té l'artista en el grup musical | |
| club_fans | id | int | ID del club de fans | |
| ^^ | nom | varchar(30) | Nom del club de fans | NN |
| ^^ | direcció | varchar(30) | Direcció del club de fans | |
| ^^ | nombre_membres | int | Nombre de membres del club de fans| NN, No pot ser negatiu, Per defecte és 0 |
| ^^ | id_grup_musical | int | Grup musical del qual el club és fan | |
::: note
- Heu de respectar el nom de les taules i el noms dels atributs.
- __NN__: `NOT NULL`
- No s'han especificat totes les restriccions que haurien d'existir.
- Heu de respectal al màxim possible les cardinalitats del model proposat.
- Podeu utilitzar `NOT NULL` o `UNIQUE` quan cregueu necessari.
:::
## Definició de la base de dades Música
```sql
drop database if exists musica;
create database musica;
use musica;
create table `canço` (
`id_canço` int primary key,
`titol` varchar(30) not null,
`duracio` int
);
create table `companyia_productora` (
`id_productora` int primary key,
`nom` varchar(30) not null,
`direccio` varchar(30),
`fax` varchar(10),
`telefon` varchar(10)
);
create table `grup_musical` (
`id_grup_musical` int primary key,
`nom` varchar(30) not null,
`data_fundacio` date,
`pais` varchar(30)
);
create table `album` (
`id_album` int primary key,
`nom` varchar(30) not null,
`data_publicacio` date,
`id_productora` int not null,
`id_grup_musical` int not null,
foreign key (`id_productora`) references `companyia_productora`(`id_productora`),
foreign key (`id_grup_musical`) references `grup_musical`(`id_grup_musical`)
);
create table `canço_album` (
`id_canço` int,
`id_album` int,
primary key(id_canço, id_album),
foreign key (`id_canço`) references `canço`(`id_canço`),
foreign key (`id_album`) references `album`(`id_album`)
);
create table `artista` (
`dni` varchar(10) primary key,
`nom` varchar(30) not null
);
create table `artista_grup` (
`dni_artista` varchar(10),
`id_grup_musical` int,
`rol` varchar(20),
primary key(dni_artista, id_grup_musical),
foreign key (`dni_artista`) references `artista`(`dni`),
foreign key (`id_grup_musical`) references `grup_musical`(`id_grup_musical`)
);
create table `club_fans` (
`id_club_fans` int primary key,
`nom` varchar(30) not null,
`direccio` varchar(30),
`nombre_membres` int unsigned,
`id_grup_musical` int not null,
foreign key (`id_grup_musical`) references `grup_musical`(`id_grup_musical`)
);
```
## Bibliografia
Aquest material és propietat del profesorat de "Bases de Dades i Sistemes d'Informació".
Escola Tècnica Superior d'Enginyeria Informàtica. Universitat Politècnica de València.
Adaptat per <a href="/about/">Joan Puigcerver</a>
## Llicència
Aquest material és propietat del profesorat de "Bases de Dades i Sistemes d'Informació".
Escola Tècnica Superior d'Enginyeria Informàtica. Universitat Politècnica de València.
© Tots els drets reservats.
No es permet la còpia ni redistribució d'aquest material.