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 :

du schéma relationnel à la requete sql


Sujet :

MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut du schéma relationnel à la requete sql
    Bonjour ,

    En faisant un petit test pour savoir ce que j'ai compris du passage du mcd à la requete sql.Je me suis rendu compte que je n'avais pas compris grand chose.
    Voilà mon problème :
    je veux faire une sorte de dictionnaire.
    J'ai des mots et chaque mot peut avoir plusieurs sens,mais un sens peut
    également correspondre à plusieurs mots.
    Donc entre les entités mot et sens j'ai une relation de type M-N :
    J'ai donc selon la règle de passage des mcd au schéma relationnelle :

    mot (idMot,genre,...)
    sens (idSens,attribut...)
    et une troisième table correpondant à la relation :
    son identifiant est consituté par la concaténation des identifiants des 2 tables
    précédentes :
    sensMot(idMot_idSens...)
    Et une contrainte d'intégrité référentielle doit être déclarée.
    Mais quand doit être déclaré cette table lors de la création de la table sens ,ou bien mot ou bien de la table sensMot.

    Volià ce que j'ai fait mais ça ne prend pas en compte les contraintes entre tables.
    create table mot (idMot int primary key,genre varchar 25)
    create table sens (idSens int primary key,attribut1 type1)
    create table sensMot (id_sensMot int PRIMARY KEY , id_mot int , id_sens int, foreign key id_mot references mot (id_mot) , foreign key id_sens references sens (id_sens))
    Y a t il des choses qui m'ont échappées et comment et surtout où exprimer la contrainte ?

    Merci d'avance

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Pour commencer, tu as compris le passage du MCD aux tables dans le cas d'une association M,N ; il faut bien une table associative.

    Par contre, tu dis toi-même :
    son identifiant est consituté par la concaténation des identifiants des 2 tables
    précédentes
    Mais tu ajoutes un identifiant clé primaire à la table associative !

    Donc il faudrait plutôt un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table sensMot (
      id_mot int , id_sens int, 
      primary key (id_mot, id_sens) 
      foreign key (id_mot) references mot (id_mot) , 
      foreign key (id_sens) references sens (id_sens)
    )

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    Merci de la réponse rapide.
    Je fais le test et je reviens

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut

    Par contre, tu dis toi-même :

    Citation:
    son identifiant est consituté par la concaténation des identifiants des 2 tables
    précédentes

    Mais tu ajoutes un identifiant clé primaire à la table associative !
    J'avais mal compris le mot concaténation,je pensais qu'il fallait mettre les identifiants bout à bout pour en créer un nouveau.Merci c'est déjà plus clair.

    Par contre une chose n'est pas clair. Comment doit se faire l'insertion d'un nouveau mot et comment faire le lien avec son sens.

    Pour l'instant je fais :
    insert into mot (mot,genre) values ("le mot","son genre");
    Puis pour son sens je fais
    insert into sens (sens) values ("le sens du mot");
    Pour faire le lien je dois sureemnt utiliser la table sensMot mais je ne vois pas trop comment.
    Merci de m'éclairer.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Si le mot "le mot" a pour sens "le sens du mot", alors pour alimenter la table de jointure on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO sensMot(id_mot, id_sens)
    VALUES (
      (SELECT idMot
      FROM mot
      WHERE mot = 'le mot'),
      (SELECT idSens
      FROM sens
      WHERE sens = 'le sens du mot')
    )
    Bien entendu, il faut alimenter la table de jointure après avoir alimenté les deux autres tables pour respecter les contraintes de clé étrangère.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    Merci beaucoup CinePhil
    Tout est clair maintenant il ne me reste plus qu'à appliquer.
    Encore merci

  7. #7
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Juste pour t'asticoter, tu as bien pensé à gérer la polysémie mais pas la synonymie (pardon pour l'éventuel néologisme), entre les mots.

    Quoique, tous les mots qui auront un lien vers un des sens de ce mot seront des synonymes.
    Donc je n'ai rien écrit, enfin je poste quand même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertion SQL en schéma relationnel
    Par delma dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2007, 15h22
  2. Générer le schéma relationnel de scripts SQL
    Par webspeak dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/03/2006, 15h14
  3. [9i] schéma relationnel en SQL
    Par BugFactory dans le forum Oracle
    Réponses: 15
    Dernier message: 22/12/2005, 14h31
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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