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

SQL Procédural MySQL Discussion :

[cardinalité]Spécification de la cardinalité en langage SQL


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 49
    Par défaut [cardinalité]Spécification de la cardinalité en langage SQL
    Bonsoir,

    Je n'arrive pas à trouver comment spécifier en langage SQL le type un-à-plusieurs (1:n), (1:1) et (n:m) d'une relation parent/enfant entre deux tables?

    Question subsidiaire: Est-ce utile pour assurer une intégrité référentielle correcte?

    J'ai passé un temps fou à farfouiller sur le net mais rien de concret...

    Merci.

  2. #2
    Membre éclairé Avatar de Ryan Sheckler
    Homme Profil pro
    Moine
    Inscrit en
    Novembre 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Moine

    Informations forums :
    Inscription : Novembre 2005
    Messages : 196
    Par défaut
    Bonsoir,

    d'abord le CREATE TABLE, ou tu spécifie la clé étrangère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE TABLE1 (
      ...
      KEY FK_TABLE1_ACHETER (T2_ID)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    puis le ALTER TABLE avec ADD CONSTRAINT pour les contraintes sur la clé étrangère, et le CASCADE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE TABLE1  ADD CONSTRAINT [...] FOREIGN KEY [...]  ON DELETE CASCADE ON UPDATE CASCADE.




    Voici l'exemple d'une table complète :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    CREATE TABLE `formateur` (
      `FOR_ID` int(11) NOT NULL,
      `PER_ID` int(11) NOT NULL,
      `FOR_NO` int(11) NOT NULL default '0',
      `FOR_CODE_CATEGORIE` int(11) NOT NULL,
      `FOR_LIEU_ENSEIGNEMENT` varchar(100) default NULL,
      `FOR_BRANCHE` varchar(100) default NULL,
      `FOR_NB_JOUR_MIN` int(11) default NULL,
      `FOR_COMMENTAIRE` varchar(2000) default NULL,
      `FOR_CODE_STATUT` int(11) NOT NULL,
      `FOR_TIMESTAMP` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      `FOR_AUTEUR_MAJ` varchar(20) NOT NULL,
      `FOR_SECU` int(11) NOT NULL,
      PRIMARY KEY  (`FOR_ID`),
      KEY `FK_FORMATEU_EST_PERSONNE` (`PER_ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    -- 
    -- Dumping data for table `formateur`
    -- 
     
    INSERT INTO `formateur` VALUES (3, 3, 1, 16, 'Genève', 'Mindmanager', 50, NULL, 18, '2006-01-11 11:19:25', 'anonymous', 0);
     
    -- 
    -- Constraints for dumped tables
    -- 
     
    -- 
    -- Constraints for table `formateur`
    -- 
    ALTER TABLE `formateur`
      ADD CONSTRAINT `formateur_ibfk_1` FOREIGN KEY (`PER_ID`) REFERENCES `personne` (`PER_ID`) ON DELETE CASCADE ON UPDATE CASCADE;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 49
    Par défaut
    Merci pour ta promptitude.

    Il y a encore deux petits trucs que je n'ai pas bien capté:

    1) dans la creation de la table formateur, l'instruction: KEY `FK_FORMATEU_EST_PERSONNE` (`PER_ID`), c'est bien pour spécifier la clé étrangère, je présume.

    2) Après test, j'ai seulement réussi à exécuter l'instruction INSERT INTO `formateur`...

    Après il y a eu erreur pour ALTER TABLE `formateur`...

    MySQL a répondu:

    #1005 - Ne peut cr饲 la table '.\copie_de_resultats_db\#sql-81c_b8.frm' (Errcode: 150)


    ???

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 49
    Par défaut
    Question supplémentaire: Qu'est-ce qui stipule le type de relation un-à-plusieurs, (1:1) ou (n:m) dans tout ça?

    Encore merci.

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Citation Envoyé par lazare
    Question supplémentaire: Qu'est-ce qui stipule le type de relation un-à-plusieurs, (1:1) ou (n:m) dans tout ça?
    Faudrait réviser les cours de modélisation (ex: MERISE). Tu ne sais plus comment passer du MCD au MLD ou alors tu essayes de passer directement du MCD au MPD sans passer par le MLD?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 49
    Par défaut
    Citation Envoyé par pcaboche
    Faudrait réviser les cours de modélisation (ex: MERISE). Tu ne sais plus comment passer du MCD au MLD ou alors tu essayes de passer directement du MCD au MPD sans passer par le MLD?
    En effet... J'ai fait un raccourci dangeureux. Pour ceux qui ont quelques réticences ou difficultés par rapport à ce sujet - la méthode merise (MCD -> MLDR -> MPD) - j'ai dégoté un excellent cours d'une clarté comme l'eau de roche et très agréable à lire. Vous m'en direz des nouvelles !

    http://www.sam-mag.com/P53,53,5,43,,,default.aspx

    Merci pcaboche .

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

Discussions similaires

  1. Logiciel de mise en forme du langage SQL
    Par macben dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/01/2006, 15h21
  2. Langage SQL propore à chaque SGBD
    Par Pascal Jankowski dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 09h16
  3. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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