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

Langage SQL Discussion :

[SQL+Access] Champs à valeurs multiples


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Points : 8
    Points
    8
    Par défaut [SQL+Access] Champs à valeurs multiples
    Bonjour à tous.

    J'ai hérité d'une base de données access que je dois faire migrer sous sql server afin de protéger les données et améliorer le fonctionnement et la stabilité de la bdd.

    Le souci est que sur la bdd access, il y avait deux champs dit "multi valeurs", où les personnes renseignaient donc plusieurs critères.
    Pour vous donner une idée, il s'agit d'un champ "pour qui (en interne)" et "pour qui (en externe)".
    Sur le formulaire on a donc deux listes déroulantes avec des cases à cocher dans la liste, pour sélectionner les personnes (ces deux listes sont alimentées par deux tables "basiques" avec le nom des intervenants internes et externes).
    Les champs stockent donc les valeurs qu'on coche séparées par des points-virgules.

    Le souci est que je ne trouve pas comment "traduire" cela sous SQL server.

    Tout le reste fonctionne à part cela.

    Comment puis-je procéder ?

    Merci de votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    En faisant cela vous violez la première forme normale.... Dès lors la structure est molle et les requêtes difficile.
    Profitez de cette migration pour respecter la première forme normale en créant deux colonnes dans votre tables.

    A +

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour votre réponse rapide.

    Néanmoins, je ne l'ai pas du tout comprise

    Au cas où je me sois mal exprimé : j'ai bien deux colonnes, une pour les personnes internes, et l'autre pour les externes, mais les utilisateurs peuvent entrer plusieurs personnes internes et plusieurs personnes externes dans chacune des colonnes...

    Merci encore

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Passez par le forum modélisation si vous voulez une analyse un peu plus détaillée de votre système existant.


    Bref, pour votre cas présent.

    Je part de l’hypothèse que l'entité de départ à laquelle on rattache ces personnes sera un projet. (changer avec le bon terme)


    Donc d'un point de vue MCD :
    Projet-0,n-----Rattache_Interne-----0,n-Personne
    Projet-0,n-----Rattache_Externe-----0,n-Personne


    Quand on passe au MPD on transforme les relations Rattache_Interne / Rattache_Externe en table à cause des cardinalitées 0,N :
    Projet(proj_id, pro_desc, ....)
    Personne(prs_id, prs_nom, prs_prenom, ...)
    Rattache_Interne(#proj_id, #prs_id)
    Rattache_Externe(#proj_id, #prs_id)


    Donc il vous faudra 2 tables en plus pour gérer ceci.


    Une autre possibilité serai de rajouter le critère d'externe / interne dans cette relation de rattachement en la typant....


    MCD :
    Projet-0,n-------Rattache-------0,n-Personne
    Type_rattachement-0,n--|


    MPD :
    Projet(proj_id, pro_desc, ....)
    Personne(prs_id, prs_nom, prs_prenom, ...)
    Type_rattachement(tra_id, tra_code, tra_desc)
    Rattache(#proj_id, #prs_id, #tra_id)

    On pourrai passer l'attribut de type de rattachement dans la clef primaire selon vos règle de gestion....



    Les noms soulignés font référence à une clef primaire, ceux préfixé de # à une clef étrangère

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci pour votre réponse punkoff, très détaillée, mais malheureusement complètement incompréhensible pour moi.

    Pour être encore plus simpliste, sur l'ancienne base, j'avais :

    nom de colonne / types de données
    "sujet" / "char(10)"
    "Demandeur" / "char(50)"
    "Date" / "date"
    ... / ...

    Je voudrais savoir quel "type de données" dois-je mettre pour pouvoir entrer plusieurs valeurs séparées par des points-virgules sur ma table sur sql management studio...

    Car très sincèrement, MCD, MPD je ne sais même pas ce que c'est !... (je débute en SQL).

    Merci encore par avance, et désolé si je me suis trompé d'endroit pour poster.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Utilisez un type VARCHAR (chaine de caractère à longueur variable), mais je vous déconseille de continuer à utiliser un tel système.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Je vais tenter avec ceci.

    Je suppose que ce que vous allez me conseiller est au-dessus de mes compétences, à moins que vous n'ayez un "tutoriel" tout fait sous la main ?

    Merci encore.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Vaste sujet, mais vous pouvez commencer par ici :
    http://cyril-gruau.developpez.com/merise/

    Les notions de MCD / MPD y sont expliquées

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Pour le tutoriel sur la modélisation (MCD méthode Merise), c'est chez SQLPro ou vous trouverez également tout le nécessaire pour maîtriser le langage SQL.

    Ce que vous a détaillé Punkoff est ce qu'il faut faire pour avoir une base de données solide, cohérente et performante.

    Pour la petite histoire, j'ai travaillé à l'INRA sur une application dont une des pages mettait plusieurs secondes à s'afficher. Après avoir normalisé la BDD et supprimé justement ces colonnes multi-valeurs, la page s'affichait en une fraction de seconde.

    Ça a été du boulot pour la transformation des données mais ça a été payant en terme de confort d'utilisation par la suite.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci infiniment pour vos réponses.

    J'ai seulement peur de ne pas être à la hauteur de la tâche ! Surtout que c'est une base de données très basique avec très peu d'utilisateurs et très peu de données. Pour info c'est un plan d'action... Quelqu'un créé un ticket, puis les personnes devant intervenir remplisse un suivi...

    je ne sais pas si tout se remue-ménage (et méninge !!) est utile pour cette application.

    Une chose est sur j'ai loin d'avoir votre niveau, je risque de pas mal galérer !

    je vais quand même essayer de comprendre le truc et de faire quelque chose de bien, je vous tiens au courant

    Merci encore.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/10/2012, 09h33
  2. [AC-2007] Requêtes champs valeurs multiples
    Par hellyser13 dans le forum Modélisation
    Réponses: 1
    Dernier message: 10/03/2012, 21h26
  3. [CR XI] Commande SQL et variable à valeurs multiples
    Par tatayoyo dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 05/03/2012, 11h11
  4. champ à valeurs multiples
    Par gillou21 dans le forum Access
    Réponses: 4
    Dernier message: 28/07/2011, 16h38
  5. SQL : Nouveau Champ - valeur par défaut
    Par chim33 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/06/2006, 14h41

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