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

Schéma Discussion :

Conseils Base de donnees


Sujet :

Schéma

  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 Conseils Base de donnees
    Bonjour a tous, j'espere que je poste ds la bonne rubrique!!

    j'ai une petite question qui me turlupine un peu.

    je suis entrain de concevoir une base de donnees. j'ai une table 'publications'. pour une publication il peut y avoir plusieurs auteurs. j'ai par ailleurs une table 'auteurs' qui contient tous les auteurs (a peu pres 2000 auteurs).

    j'ai eu l'idee de cree un seul champ 'auteur' ds la table 'publications' qui aura comme valeur: 'id_auteur1~id_auteur2~...'

    l'autre possibilite est de creer une autre table de jointure qui prendra l'identifiant de l'article et autant d'enregistrements que d'auteurs...

    que feriez vous et que me conseillez vous?

    merci par avance,
    Reda

  2. #2
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    j'ai eu l'idee de cree un seul champ 'auteur' ds la table 'publications' qui aura comme valeur: 'id_auteur1~id_auteur2~...'
    Très mauvais, car tu ne respecterais alors aucune forme normale, les performance seraient très pénalisées, et il y a encore plein d'autres choses qui se passent mal avec ce genre de pratiques (notamment l'ajout/suppression d'auteur à une publication)

    l'autre possibilite est de creer une autre table de jointure qui prendra l'identifiant de l'article et autant d'enregistrements que d'auteurs...
    Oui, il faut une table de jointure avec deux colonne: identifiant_auter et identifiant_publication
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  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 bp hed62 pour ta reponse rapide

    j'ai encore d'autres petites question stp si ca ne te derange pas!

    1- j'ai le meme cas mais qui concerne les langues, le meme article peut etre en 1 ou plusieurs langues, faut il utiliser une table de jointure ou je peux juste les separer puisque c du text: le champ 'langue': fr~en

    2- je connais les identifiants des articles que je veux selectionner:
    10032
    12254
    75586
    ...
    21358

    disant j'ai une centaine stoquees dans une variable de type tableau.

    est il mieux faire un SELECT * FROM articles WHERE (id = '10032' OR id = '12254' OR id = '75586' ...)

    ou bien de faire des select imbriques:
    foreach(ma_variable as $id)
    {
    SELECT * FROM article WHERE id = '$id'
    }

    en attendant ta reponse, je v commencer a creer mes tables de jointures

    merci encore une fois

  4. #4
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    1- Même question, même réponse ! C'est une notion fondamentale, tu ne pourra jamais y déroger.


    2- plutôt "SELECT * FROM articles WHERE (id in {'10032','12254', '75586' ...})

    Je ne sais plus la syntaxe de l'ensemble, mais ca marche.

    foreach(ma_variable as $id)
    {
    SELECT * FROM article WHERE id = '$id'
    }
    Ce ne sont pas des requêtes imbriquées ca... De toute manière : cette solution est moins bonne car multiplie les accès à la base de données, donc ralentit le programme.

    Mais pourquoi tu aurais une requête avec 100 id différent dans la clause where ? c'est etrange.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  5. #5
    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
    Rebonjour et merci encore, tu me sauves

    OK, j'oublie donc le foreach avec un SELECT!!
    je ne connaissais pas WHERE (id in {'10032','12254', '75586' ...} quelle est la difference entre ca et WHERE id='' OR id=''... ??

    "Mais pourquoi tu aurais une requête avec 100 id différent dans la clause where ?"
    car je les recupere d'une page precedente et je dois afficher les information de chaque identifiant

    j'ai encore 3 dernieres question et je te laisse tranquile

    1- pour les identifiant de la table de jointure, dois je utiliser les champs du type INT ou TINYINT??

    2- puisque mnt je v utiliser beaucoup de tables de jointures, si par exemple je veux afficher un article mais qui n'a pas d'auteur par ex, donc il y a aucun enregistrement ds la table de jointure. ma requete va retourner 0 resultat puisqu'il y a aucune correspondance ds la 2eme table. suis je alors oblige de toujours utiliser LEFT JOIN au lieu de INNER JOIN ???

    3- je vais devoir developper une toute petite application de mailing. je v sauvegarder tous les destinataire. je pense que la aussi je dois creer une table de jointure qui contiendra 2 champs: id_mailing et id_destinataire.
    la table mysql ne rique pas d'etre surcharge si j'inserer lors de chaque mail entre 10 et 2000 ou 3000 enregistrement?? j'ai lu qu'on peu stoquer des millions d'enregistrement, est ce correct???

    merci merci merci mille fois
    Reda

  6. #6
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    je ne connaissais pas WHERE (id in {'10032','12254', '75586' ...} quelle est la difference entre ca et WHERE id='' OR id=''... ??
    c'est juste plus simple à construire et plus 'lisible'

    car je les recupere d'une page precedente et je dois afficher les information de chaque identifiant
    Tu ne peux pas garder dans un modèle l'ensemble des infos de tous tes articles pour passer d'une page à l'autre ?

    1/ ça dépend de la quantité de champs potentiellement en base. J'utilise toujours des int, sauf si vraiment ca peut optimiser la chose...

    2/ Evite le SMS s'il te plait. Sinon, ben ca dépend de ce que tu veux obtenir dans la requête ! Fais une recherche sur les différences entre les diverses instructions JOIN

    3/ Oui, tu peux stocker des millions d'enregistrements. Attention à ne pas enregistrer des choses pour rien !
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  7. #7
    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 encore une fois pour ces reponses precises

    juste une petite correction, la syntaxe correcte est :
    WHERE id in ('10032','12254', '75586' ...)
    est ce qu'elle est plus rapide que les OR ??

    Que veux tu dire par "Evite le SMS" ??

    OK, je vais faire des recherches sur les JOINT ...

    merci pour tout

  8. #8
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    puisque mnt je v utiliser
    => puisque maintenant je vais utiliser.


    Pour la rapidité, s'il y a une différence je ne pense pas qu'elle soit sensible pour l'utilisateur.

    merci pour tout
    Mais de rien
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  9. #9
    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 vrai que c'est une tres mauvaise habitude. je m'y suis tellement habitue que je me retrouve entrain d'ecrire de la meme maniere dans des courriers officiels...

    bon, je pense que je n'ai plus de questions, et j'espere ne pas trop en avoir prochainement...

    @ bientot

  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
    encore de retour juste une derniere petite question.

    je suis entrain de creer des tables pour sauvegarder toutes les mises a jour effectuees sur un article. j'ai donc cree une table 'mises_a_jour' avec 5 champs: 'id_artice', 'titre', 'resume', 'mots_cles', 'date_maj'.

    le probleme c'est qu'il peut y avoir plusieurs mots cles, j'ai donc supprime le champs 'mots_cles' de la table 'mises_a_jour' et j'ai cree une autre table 'mises_a_jour_mc'.

    a quelle table devrais je lier 'mises_a_jour_mc' ?

    merci bien

  11. #11
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    ben, à mise à jour pardi ! mise_a_jour_mot_clef possède un champs id_mise_a_jour.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  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
    c'est ce que je me suis dit. je dois donc rajouter un champ 'id' dans la table de jointure 'mises_a_jour' ??

    lorsque je fais une selection sur 2 tables et qui contiennent des chmaps qui ont le meme nom, comme pourrais je le differencier???

  13. #13
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    En préfixant par le nom de la table :

    select Table1.champs , Table2.champs
    from Table1, Table2

    Il faut lire les cours/FAQ/tuto SQL du site
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  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
    j'ai alors mal formule ma question
    je prends un exemple : SELECT table1.*, table2.* FROM ...

    dans table1 et table2, j'ai 2 champs qui ont le meme nom : 'id' par exemple.

    pour afficher les resulats:
    while($res = mysql_fetch_array(...)
    {
    echo "comment afficher l'id de table1 ?";
    echo "comment afficher l'id de table2 ?";
    }

  15. #15
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Bonne question, à poser dans le forum php
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  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
    je t'es coince...

    oh lalaaa, ca n'en finit jamais!! encore une autre petite question

    toujours concernant ma table articles. j'ai plusieurs types de sources : ouvrage, revue, congres, pour chaque type de source, j'ai environ 1000 sources...
    les differents types de sources ont plus ou moins les memes champs. est t il mieux d'avoir une seule table avec un champ 'type' ou de mettre 3 tables, 1 pour chaque type ???

    ex:

    table 'sources'
    id | type | nom | pays | num | volume ...

    ou plutot creer une table pour chaque type de source avec les champs appropries ??

    merci infiniment

  17. #17
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    je t'es coince...
    "je t'ai coincé" :-p Oui, je ne connais que très peu php

    Pour ton histoire de type de source, ca dépend. Ca dépend de ce qui est factorisable ou pas, ca dépend de l'évolutivité que tu veux donner à ton appli : 3 tables = + évolutif, 1 table = + factorisé.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  18. #18
    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
    a ma place, qu'est ce que tu ferais? qu'est ce qui serait le plus propre ???

    dans le cas où je mets une seule table, c'est mieux de creer une autre table qui contiendra les differents types ou je peux juste mettre un variable php de type tableau qui contient ces types... ?

    et lorsqu'il y a pas beaucoup de types, c'est mieux d'utiliser des identifiants de types ou plutot 'o' pour ouvrage, 'p' pour publication, 'c' pour congre ... ???

  19. #19
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    variable php de type tableau
    Ne pas penser à l'implementation lors de la conception ! C'est mal :grin:


    dans le cas où je mets une seule table, c'est mieux de creer une autre table qui contiendra les differents types
    Oui.

    et lorsqu'il y a pas beaucoup de types, c'est mieux d'utiliser des identifiants de types ou plutot 'o' pour ouvrage, 'p' pour publication, 'c' pour congre ... ???
    Ce serait des economies de bout de chandelles : garde des libellés clairs. Si tu veux, si ca a un interêt, tu peut avoir un Libelle_Long et un LibelleCourt en champs.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  20. #20
    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

    je v continuer mon travail et j'espere ne pas avoir encore d'autres questions...

    @ bientot

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/05/2013, 14h45
  2. Conseils conception base de donnees
    Par redah75 dans le forum Débuter
    Réponses: 14
    Dernier message: 23/09/2010, 14h08
  3. conseils conception d'une base de donnees
    Par redah75 dans le forum Requêtes
    Réponses: 26
    Dernier message: 12/05/2009, 11h09
  4. Conseil Base De Donnees
    Par lenrok dans le forum C++Builder
    Réponses: 5
    Dernier message: 27/01/2007, 08h40
  5. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39

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