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

Requêtes MySQL Discussion :

Creation d'une table 'sources'


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut Creation d'une table 'sources'
    Bonjour a tous.

    je seche depuis qlq semaines sur la creation d'une table qui me paret un peu compliquee mais surement pas pour vous...

    il s'agit d'une table 'sources':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    table sources:
    id, titre, date_publi, disponibilite, isbn, issn, cote, inventaire, num_pages, num_tomes, ...
    une source peut avoir plusieurs auteurs et etre en plusieurs langues, donc je cree d'autres tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    table sources_auteurs :
    id_source, id_auteur
     
    table sources_lang :
    id_source, id_langue
    Mais mon probleme c'est le 'support', une source peut etre dispo en plusieurs support (cd, papier), sachant qu'un cd et papier ont des isbn differents...

    comment gerer cela??

    Merci beaucoup de votre aide.
    Reda

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Bonjour,

    Tu fais une table des supports (CD, livre...), puis une table qui croise source et support, avec un champ ISBN dedans .
    En effet, un support peut correspondre à plusieurs sources (le CD est un support pour plusieurs sources), et une source peut avoir plusieurs support. Tu est donc dans une relation de type N-N, qui se gère par une table de passage. Et cette table contient le numéro ISBN, propre au croisement source/support.

    ced

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    merci Ced pour ta reponse.
    c'est bien ce que je me disais, mais je vais devoir virer tous les champs de la table 'sources' sauf le champ 'titre'
    ca ne sera pas bizarre d'avoir la table 'sources' avec 2 ou 3 champs??

    la langue posera aussi un probleme car un suport peut etre en une ou plusieurs langues...

    quelle est la meilleure structure que tu me recommandes?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Apres reflexion, j'arrive a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    table sources:
    id, titre
     
    table sources_supports:
    id_source, support, langue, date_publi, disponibilite, isbn, issn, cote, inventaire, num_pages, num_tomes
     
    table sources_auteurs :
    id_source, id_auteur
    qu'en penses tu?

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Conceptuellement, la solution la plus efficace et qui évite les redondances voudrait que tu aies 4 tables :
    Source(id, titre, id_auteur)
    Support(id, nom_support)
    Langue(id, nom_langue)
    Ouvrage(id_source, id_support, id_langue, ISBN)

    Plus une table Auteur, sur laquelle pointerait Source par id_auteur.

    ced

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    c'est a peu pres ce que j'ai prevu, mais il y a un tout ptit probleme:

    concernant : Ouvrage(id_source, id_support, id_langue, ISBN, prix, nbr_pages, ...)

    1- j'ai parfois une source qui est editee en anglais et francais dans le meme ouvrage, que devrais je faire dans ce cas??

    2- est ce que nbr_pages est bien place? car lorsqu'il s'agit d'un support CD, il y a pas de pages!!

    Merci encore une fois

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Pour le 2, tu peux très bien avoir un champ à NULL dans Ouvrage quand il s'agit d'un CD. Ca me paraît correct.

    Pour le 1, c'est un peu plus compliqué. Tu peux avoir plus de 2 langues dans un même ouvrage ?
    La première solution, c'est d'avoir 2 champs langue si tu as 2 langues au maximum par ouvrage. Sinon, il te faut une table de passage entre Ouvrage et Langue pour enregistrer de 1 à n langues...

    ced

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    OK, merci pour le 2

    Pour le 1, oui, il peut y avoir plus de 2 langues (je pense 4 maxi)

    Sinon, il te faut une table de passage entre Ouvrage et Langue pour enregistrer de 1 à n langues...
    que devient alors le champ id_langue de la table 'ouvrages'?
    je ne suis pas sur de pouvoir le supprimer car une langue suplementaire peut avir son propre support, prix, isbn, ...

  9. #9
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Ouh là... A mon avis, il ne faut pas confondre la langue principale d'un ouvrage, et les langues utilisées dans l'ouvrage...
    Un ouvrage, je pense, est édité dans une seule langue, avec un ISBN donné, non ?
    Maintenant, il peut ponctuellement y avoir plusieurs langues dans l'ouvrage, même si celui-ci est rédigé en principalement en français... Non ?

    La langue principale peut alors être stockée dans un champ id_langue de Ouvrage. Si tu veux ensuite toutes les langues utilisées dans l'ouvrage, il te faut une table Ouvrage_langues(id_ouvrage, id_langue) entre la table Ouvrage et la table langue. Mais dans ce cas, je parle d'un ouvrage multi-lingue sur un même support.

    Si ça ne convient pas (je ne suis pas sûr d'avoir tout suivi), peux-tu donner un exemple ?

    ced

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Un ouvrage, je pense, est édité dans une seule langue, avec un ISBN donné, non ?
    justement non, un ouvrage ou revue peut etre edite en 1 ou plusieurs langues.
    je te donne un exemple, ca sera mieux pour tout comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sources:
    id | titre
    1   Science et Vie
    2   Harry Poter
    'Science et Vie' existe uniquement au format papier (livre) et est en francais et anglais sur le meme support par exemple

    'Harry poter' existe en papier en anglais et a ete edite en 2006.
    en 2007, 'Harry poter' a ete traduit en francais et reste au format papier
    en 2008, 'Harry poter' a ete edite au format CD ROM avec un prix et isbn, ... differents

    ce qui me pose probleme c'est que 'Science et Vie' est en anglais et francais tout simplement
    'Harry poter' est en anglais et francais aussi mais parcontre chaque langue peut avoir un support different, un prix different et un isbn different...

    j'espere que tu vois mieux mon probleme

  11. #11
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    C'est plus clair .
    Alors dans ce cas, c'est une table de passage entre ouvrage et langue. Et si, dans cette table, le même ouvrage a plusieurs langues (comme sciences et vies dans ton exemple), alors, il a plusieurs lignes pour le même id. Si ce sont des ouvrages "différents" (comme Harry Potter), il n'y aura qu'une ligne avec une langue.

    Il te faut "sortir" la langue de la table ouvrage...

    ced

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    si j'ai bien compris, il faut faire ceci ?

    table 'sources':
    id, titre, id_auteur

    table 'sources_lang':
    id, id_source, langue

    table 'sources_info':
    id_langue, support, isbn, date_publi, prix, ...

    merci infiniment, tu me sauves

  13. #13
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Ci-joint un schéma tel que j'ai compris les choses .

    ced
    Images attachées Images attachées  

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Ah ouais, c'est PARFAIT merci beacoup

    2 derniere petite question stp, et ca sera fini!!

    1- concernant les titres j'ai pas ete trop en details et la g un ptit soucis: j'ai mis en place une table speciale pour les titres:
    titres(id, titre, titre_abrege, nom, langue)
    et dans la table 'sources' je mets l'identifiant du titre.
    je fais ainsi car lorsqu'un livre ou revue sort en francais, on traduit automatiquement le titre en anglais. et si ce livre est traduit 1 an plus tard en anglais, on aura pas a retraduire le titre...
    une autre contrainte se presente, je peux avoir des titres du genre: Froid magnetique 2006, Froid magnetique 2008. c'est les meme bouquins mais des editions differentes!!
    comment vois tu les choses?


    2- quand j'ai une source en plusieurs langues et/ou supports, l'article tiré de cette source doit etre relie a la table 'ouvrages' ??

    Merci merci merci mille fois

  15. #15
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Pour la première question, personnellement, je mettrais un champ Titre dans la table Langue_Ouvrage. Comme ça, quand un ouvrage est traduit dans une langue, on a le titre de cet ouvrage dans cette langue .

    Pour les éditions, tu n'as pas vraiment le choix... il faut une table Edition attachée à la table Ouvrage. Mais comme une édition, j'imagine, peut être traduite alors que la précédente non, ça change un peu le modèle... Il faut mettre une liaison entre Edition et Langue de la même façon qu'entre Ouvrage et Langue. Tu as plusieurs solutions de modélisation : remplir systématiquement la table Edition pour tous les ouvrages, ou alors ne remplir Edition que quand c'est nécessaire, auquel cas la traduction de l'édition est gérée par la table Edition_Langue et pas par Ouvrage_langue.

    Pour le deuxième point, tu veux individualiser les articles ? Si oui, il faut revoir un peu le modèle en conséquence... Parce que ce coup-là, il va y avoir une table Article, qu'il faudra, éventuellement, relier elle-aussi à la langue...

    ced

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Pour la première question, personnellement, je mettrais un champ Titre dans la table Langue_Ouvrage. Comme ça, quand un ouvrage est traduit dans une langue, on a le titre de cet ouvrage dans cette langue .
    Bien vu, mais du coup la table 'source' ne contiendra que l'identifiant??? il n'y aura pas 'id_auteur' car une source peut avoir plusieurs auteurs!!

    concernant les editions, je suis un peu perdu!!
    oh lalaaaaa, je croyais avoir fini avec cette table

    Pour le deuxième point, tu veux individualiser les articles ?
    je vois pas trop ce que tu entends par individualiser, mais quelle est la meilleure maniere pour toi de gerer tout cela?
    une derniere chose au sujet des titres: j'aurai de temps en temps des titres du genre: Xeme congres international de ..., Xeme salon de ...
    quelle est la meilleure facon de gere ce genre de titre où il y a que le numero qui change?

    Franchement ced, merci beaucoup du temps que tu me consacre et de ton precieuse aide!!

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Alors, j'ai trouve une solution assez simple qui couvre tous les cas, et j'espere qu'elle est bonne, tu me diras

    sources(id, titre_saga_org, titre_saga_en, titre_saga_fr)
    ouvrages(id_ouvrage, id_source, id_support, isbn, date_publi, prix, ...)
    ouvrages_lang(id_ouvrage, titre, titre_abrege, nom, id_langue)
    sources_auteurs(id_source, id_auteur)
    + tables contenu de supports et langues

    exemple
    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
    sources:
    id | titre_saga_org | titre_saga_en | titre_saga_fr
    -----------------------------------------------------
    1       Calor              Heat            Chaleur
    2                          Harry Potter     Harry Potter
     
    ouvrages:
    id_ouvrage | id_source | id_support | isbn | prix ...
    ------------------------------------------------------
    1               1          livre       X      20
    2               2          livre       Z      25
    3               1          CD         V      35
     
    ouvrages_lang:
    id_ouvrage | id_langue | titre   
    1             en         Heat 2006
    1             en         Heat 2008
    1             fr         Chaleur
    2             fr         Harry Potter à l école des sorciers
    2             en         Harry Potter and the Philosopher s Stone
    3             fr         Chaleur  
    ...
    un petit bemol, lorsqu'une source est bilingue, il y aura donc 2 enregistrements ds la table 'ouvrages_lang', dois je repete le titre ou le laisser vide??

  18. #18
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Ca ne pose pas de problème, à mon avis. Tu peux avoir 2 fois le même titre. Mais si il ne change pas, il faut le mettre dans ouvrage.
    Sinon, ton modèle ne prévoit en dur que la gestion de 2 langues : l'anglais et le français, pour les titres d'ouvrages.

    ced

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    le titre peut changer comme tu peux le voir ds la table 'ouvrages_lang'.
    titre_saga_org, titre_saga_en et titre_saga_fr me serviront a afficher qlq chose du genre: cet article/livre fait parti de la collection '$titre_saga_en'.
    j'affiche le titre en anglais sur le site anglais, le titre fr sur le site francais, et eventuellement entre parentheses le titre original s'il est en espagnol par ex

    le seul cas où le titre ne change pas c'est quand la source a ete edite ds plusieurs support differents (papier et CD par ex)

    c'est toujours OK?


    une petite precision stp, lorsque je rentre un article tiré de la source 'Harry potter' par ex, dois je lier cet article a 'id_ouvrage' de la table 'ouvrages' ou plutot 'id' de la table 'sources' ??
    si c'est 'id', comment reconnaitre la langue et/ou le support???

  20. #20
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Oui, comme ça ça doit fonctionner .
    Pour la question subsidiaire, il faut le lier à l'id de l'ouvrage. Tu peux retrouver, par l'ouvrage, toutes les infos sur la source et le support, puisque ouvrage est le croisement de ces deux tables et contient les id des deux...

    ced

Discussions similaires

  1. creation d'une table avec une clé primaire multiple
    Par oursquetaire dans le forum Oracle
    Réponses: 2
    Dernier message: 23/12/2005, 13h29
  2. Creation d'une table avec un TSQLQuery
    Par richard038 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/12/2005, 09h08
  3. [MySQL] Creation d'une table ?
    Par artotal dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/10/2005, 17h04
  4. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 11h17
  5. Réponses: 2
    Dernier message: 02/11/2004, 12h38

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