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 :

Plusieurs entrées dans la colonne d'une table


Sujet :

MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Plusieurs entrées dans la colonne d'une table
    Bonjour,

    Je débute avec SQL. Je suis en train de créer ma table etc etc et je m'en sors plutôt bien depuis que j'ai compris les jointures

    Par contre là j'ai une petite question, "best-practice". Comment faites vous quand un objet d'une de vos tables doit être liés à plusieurs objets d'une autre table ?

    Je m'explique, admettons que j'ai :

    table_objets:
    id | objet
    1 | truc
    2 | machin
    3 | bidule

    table_users:
    id | user
    1 | foo
    2 | bar
    3 | tom

    Si on considère que :
    foo a truc et machin
    bar à machin et bidule
    tom a truc machin et bidule

    Comment vous y prendriez vous ?

    Je voulais faire un truc de ce genre mais est ce possible ?

    table_users:
    id | user | table_objets_id
    1 | foo | 1,2
    2 | bar | 2,3
    3 | tom | 1,2,3

    ou l'inverse:
    table_objets:
    id | objet | table_users_id
    1 | truc | 1,3
    2 | machin | 1,2,3
    3 | bidule | 2,3

    Si oui quel type de colonne faut il créer quelle est la syntaxe de ces "multi-entrées" (j'ai mis des virgules par habitude dans mon exemple), comment cela s'appelle t'il afin que je trouve la documentation qui va bien pour faire ce genre de choses ?

    Si ce n'est pas possible comment feriez vous ?

    Merci pour votre aide !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Il vous faut créer une table associative, avec deux colonnes :
    id_object et id_user

    cette table contiendra une ligne par association :

    dans votre exemple :
    1 | foo | 1,2
    2 | bar | 2,3
    3 | tom | 1,2,3
    Votre table contiendra :
    1|1
    1|2
    2|2
    2|3
    3|1
    3|2
    3|3

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour votre réponse, on me parlait de table temporaire ? c'est pas mieux ? Où ça n'a rien à voir

    Je ne voies pas trop comment faire mon select ensuite mais je vais tester tout de suite

    [Edit] : Autre point, si j'ai 1000 users et 10000 objets ça va faire un sacré paquet de lignes tout ça, c'est aps trop grave ?

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par hemaskjoe Voir le message
    on me parlait de table temporaire ? c'est pas mieux ? Où ça n'a rien à voir
    Rien à voir !

    Citation Envoyé par hemaskjoe Voir le message
    Je ne voies pas trop comment faire mon select ensuite mais je vais tester tout de suite
    Avec des simples jointures entre les trois tables.
    Tout dépend ensuite de votre besoin pour les requetes, mais dans la plupart des cas, elles seront bien plus simples à ecrire, et surtout plus performantes

    Citation Envoyé par hemaskjoe Voir le message
    Autre point, si j'ai 1000 users et 10000 objets ça va faire un sacré paquet de lignes tout ça, c'est pas trop grave ?
    un paquet de lignes, mais peu de colonnes .
    Vous pourrez aussi facilement indexer un tel modèle pour améliorer les performances.

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Rien à voir !
    Il me semblait que cette personne me disait n'importe quoi


    Citation Envoyé par aieeeuuuuu Voir le message
    Avec des simples jointures entre les trois tables.
    Tout dépend ensuite de votre besoin pour les requetes, mais dans la plupart des cas, elles seront bien plus simples à ecrire, et surtout plus performantes
    En effet, requète très simple à écrire

    Citation Envoyé par aieeeuuuuu Voir le message
    un paquet de lignes, mais peu de colonnes .
    Vous pourrez aussi facilement indexer un tel modèle pour améliorer les performances.
    Ah ben voilà, je commence à comprendre la "technique" générale mais j'ai dû mal à comprendre l'optimisation et les bonnes pratique. Chacun de mes objet de la table objet est joint à de nombreuses autres tables comportant très peu de colonnes (ex: table_cat id|categorie table_an id|annee table_color id|couleur etc etc...) ce qui me fait forcément des requètes avec de nombreuses jointures. par exemple pour récupérer tout les objets avec leurs "détails", aujourd'hui je dois faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT c_gamme,c_marque,c_serie,c_annee,c_objet,c_tof,c_cat,c_sscat
    FROM t_gamme,t_marque,t_serie,t_annee,t_objet,t_cat,t_sscat
    WHERE t_gamme.t_marque_id=t_marque.id
    AND t_objet.t_gamme_id=t_gamme.id
    AND t_objet.t_serie_id=t_serie.id
    AND t_objet.t_sscat_id=t_sscat.id
    AND t_sscat.t_cat_id=t_cat.id
    AND t_serie.t_annee_id=t_annee.id
    ORDER BY c_gamme, c_annee, c_objet
    De sa longueur je me demandais si je ne pouvais pas améliorer cela (bien que la requête s'exécute très rapidement (0.0005 sec) mais pour le moment ma base ne contient qu'une dizaine d'objets j'avais peur que les colonnes et les jointures alourdissent les traitements mais visiblement ce n'est pas le cas, à terme je vise plusieurs milliers d'objets pour qq centaines de users... d'où mon inquiétude à choisir un design correcte et robuste des le début.

    Si vous avez des liens qui expliquent simplement comment veiller à suivre des bonnes pratique afin d'optimiser les performances, les considérations à prendre en compte, je suis preneur, c'est comme pour le moteur ou le type de colonne, j'ai lu quelques articles de si de là mais pour le moment ma conf est très proche du "par défaut". Par la suite aussi comme je requète cette DB via PHP je me pose de nombreuses questions en terme de sécurité... bref... pleins de choses à voir, se lancer dans SQL pour un besoin c'est bien mais j'aimerais le faire au mieux et comme le net regorge de tout en quantité, ce n'est aps tout le temps facile de trouver la bonne info... surtout quand on pas vraiment la bonne question

    Si vous avez le temps de me donner mon avis sur la structure de ma base se serait super sympa, le voici:

    t_user
    id|user

    t_marque
    id|c_marque

    t_marque
    id|c_annee

    t_marque
    id|c_color

    t_marque
    id|c_cat

    t_marque
    id|c_serie

    t_marque
    id|c_status

    t_gamme
    id|c_gamme|t_marque_id

    t_sscat
    id|c_sscat|t_cat_id

    t_acc
    id|c_accessoire|t_toy_id|t_sscat_id|t_color_id|t_status_id

    t_objet
    id|c_objet|t_gamme_id|t_serie_id|t_sscat_id|t_color_id|t_status_id

    et la nouvelle (merci !):
    t_asso
    id_objet|id_user

    Merci de ne pas vous moquer au niveau de la nomenclature encore un fois je débute alors j'aime bien préfixer mes tables et colonnes pour m'y retrouver facilement.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/06/2015, 11h23
  2. Réponses: 11
    Dernier message: 11/07/2014, 11h47
  3. Réponses: 2
    Dernier message: 29/04/2010, 16h14
  4. Réponses: 2
    Dernier message: 20/10/2007, 02h24
  5. Recherche dans plusiuers colonnes d'une table
    Par yoline dans le forum Access
    Réponses: 3
    Dernier message: 25/07/2006, 13h00

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