IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Gestion cdthèque à partir de fichiers excel


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 80
    Points : 33
    Points
    33
    Par défaut Gestion cdthèque à partir de fichiers excel
    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

  2. #2
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Voici ma réponse, sous réserve de l'avis des grands sages de MySQL.

    Pour la requête d'insertion, je pense qu'il n'y a pas le choix : il faut utiliser Insert To.
    D'ailleurs, pour être honnête je ne vois pas pourquoi vous opposer les 2? Les jointure permettent la manipulation des données, et mais l'insertion, sauf si je me trompe.

    Pour l'index unique, je pense que là non plus on n'a pas le choix, et que ça rien à voir avec votre import. Pour moi, mettre un index unique est une garantie pour l'avenir, pour éviter les confusions.

    Pour la table import, voilà comment j'imagine les choses :
    - soit votre fichier à importer correspond pile poil à une table, et il suffit de l'importer directement dans la table en question;
    - soit votre fichier à importer contient des informations qui devront être insérées dans des tables différentes (c'est, je crois ce que vous voulez faire). Dans ce cas, il me semble qu'il faut importer le fichier dans une table ayant la même structure que les infos de votre fichiers, et ensuite insérer chaque information de cette table import dans les bonnes tables. Ca me semble normal que la table import ne soit pas liée aux autres. Quelque part, elle ne fait pas vraiment partie de la base de données.

    Par contre, comment allez-vous alimenter les tables de liaisons?
    Si vous avez comme ligne de la table import "The Beatles" - "Let it be", dans un premier temps vous allez importer "The beatles" dans la table interprète avec le numéro 1, puis "Let it be" dans la table "Titre" avec le numéro 1. Comment allez-vous faire pour dire que le titre 1 va avec l'interprète 1?

    Pour votre dernière question, si vous êtes sûr que jamais on ne pourra avoir le même couple `id_album`, `id_interprete`, je pense que ce n'est pas utilise d'ajouter un numéro auto-incrémenté dans cette table de liaison. Personnellement, je le fais quand même, plus par peur qu'autre chose.

    Pierre


    Il

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 80
    Points : 33
    Points
    33
    Par défaut
    Bonsoir Pierre,
    Merci pour la réponse.
    Je me suis mal exprimé, en fait je voulais savoir s'il est préférable de faire un INSERT INTO en utilisant une sous-requête de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO interpretes (interprete)
    SELECT DISTINCT interprete FROM imports 
    WHERE interprete NOT IN (SELECT interprete FROM interpretes)
    ou de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO interpretes (interprete)
    SELECT DISTINCT imports.interprete FROM imports
    LEFT JOIN interpretes
    ON imports.interprete=interpretes.interprete
    WHERE interpretes.interprete IS NULL

    Par ailleurs, on m'a conseillé plutôt d'utiliser plutôt : WHERE NOT EXISTS


    En fait j'alimente les tables interpretes, albums...
    et ensuite j'alimente la table liste_titres où je fais une liaison entre le fichier import, dans lequel j'aurais par exemple
    interprete The Beatles
    titre Let it be
    et je vais récupérer les id dans les tables interpretes et albums

    Je pense enfin que je vais quand même utiliser un id auto icrémenté dans la table couples interprete, album, au cas où...

    Cordialement

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 462
    Points : 19 449
    Points
    19 449
    Par défaut
    Salut MistyMan.

    Citation Envoyé par MistyMan
    Je souhaite gérer ma collection de fichiers musique qui sont déjà sous excel
    La première des choses à faire est de concevoir le modèle conceptuel des données (MCD).

    Je ne dis pas que vos questions sont hors de propos, mais les réponses que l'on peut vous fournir dépendent essentiellement du MCD.

    Le mieux est de vous adresser au forum merise et de formuler votre besoin.
    Ensuite, nous pourrons bien aborder vos problèmes car nous aurons une base de discussion formalisée.

    @+

Discussions similaires

  1. [V5] Création d'un univers BO à partir de fichiers Excel
    Par pressdell dans le forum Designer
    Réponses: 12
    Dernier message: 15/07/2010, 14h10
  2. Problème de création de table à partir de fichier Excel
    Par Jibi64 dans le forum Modélisation
    Réponses: 17
    Dernier message: 05/08/2008, 16h03
  3. Pb gestion erreur lors ouverture fichier excel
    Par titeelo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/08/2007, 16h47
  4. recupration des donnees a partir de fichier EXCEL
    Par inessahal dans le forum Documents
    Réponses: 1
    Dernier message: 29/05/2007, 13h03
  5. Gestion en vba des fichiers excel en mode multiutilisateurs
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/12/2005, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo