Bonjour à tous,

Je souhaite gérer ma collection de fichiers musique qui sont déjà sous excel
J'ai convertir le fichier en csv et fait un :
LOAD DATA LOCAL INFILE
pour obtenir la table import de structure :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
idimport int(10) unsigned NOT NULL
titrevar char(100) NULL
interprete varchar(50) NULL
album varchar(50) NULL
annee year(4) NULL
ensuite j'envois les données dans diverses tables

par exemple table interpretes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
CREATE TABLE IF NOT EXISTS `mp3`.`interpretes` (
  `id_interprete` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `interprete` VARCHAR(50) NULL,
  PRIMARY KEY (`id_interprete`))
ENGINE = INNODB;
 
CREATE UNIQUE INDEX `id_interprete_UNIQUE` ON `mp3`.`interpretes` (`id_interprete` ASC);
CREATE UNIQUE INDEX `interprete_UNIQUE` ON `mp3`.`interpretes` (`interprete` ASC);
avec la requête suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
INSERT INTO interpretes (interprete) (SELECT interprete FROM IMPORT GROUP BY interprete)
Je me pose les questions suivantes :
est-ce correct de faire une requête imbriquée avec INSERT INTO, serait-il mieux de le faire avec une jointure de type LEFT OUTER JOIN

est-ce que j'ai raison de mettre une contrainte unique sur interprete dans le sens ou ma requête ne permettra pas les doublons, c'est pas redondant ?

Une fois que les tables de liaisons sont alimentées j'alimente une table_liste_titres

Une chose qui me choque aussi, c'est que la table import n'est liée à aucune autre, n'est-ce pas contraires à la philosophie des SGBDD ?

Une dernière chose, j'ai créé une table album_interprete en partant du principe que plusieurs interprétés peuvent avoir un même nom d'album :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Table `mp3`.`album_interprete`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mp3`.`album_interprete` (
  `id_album` SMALLINT UNSIGNED NOT NULL,
  `id_interprete` SMALLINT UNSIGNED NOT NULL,
  PRIMARY KEY (`id_album`, `id_interprete`),
  CONSTRAINT `fk_albums_has_interpretes_albums1`
    FOREIGN KEY (`id_album`)
    REFERENCES `mp3`.`albums` (`id_album`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_albums_has_interpretes_interpretes1`
    FOREIGN KEY (`id_interprete`)
    REFERENCES `mp3`.`interpretes` (`id_interprete`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = INNODB;
 
CREATE INDEX `fk_albums_has_interpretes_interpretes1_idx` ON `mp3`.`album_interprete` (`id_interprete` ASC);
 
CREATE INDEX `fk_albums_has_interpretes_albums1_idx` ON `mp3`.`album_interprete` (`id_album` ASC);
est-ce que dans ce cas de figure je dois créer un champ auto incrémenté id_album_interprete pour rester cohérent ?





Merci d'avances pour vos réponses et commentaires