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 :

Comment créer une table avec clé primaire


Sujet :

MySQL

  1. #1
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut Comment créer une table avec clé primaire
    Bonjour,
    Comment créer sous Mysql les 3 tables issues du MCD et MLD ci-dessous ?




    Je bloque sur la création des tables operation, mais surtout OperationSansVentil et DetailOper. Je bloque sur la création des clés primaires.

    question qui fait suite à un sujet plus large : sujet sur la Spécialisation, réflexivité et vues

    Par avance merci,

    Bien à vous Tavar

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    Bonjour,

    Peux-tu nous montrer ton script de création des tables et le message d'erreur associé ?
    Sinon, tout est décrit dans la documentation de MySQL : http://dev.mysql.com/doc/refman/5.0/...ate-table.html

    ced

  3. #3
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Voici ce que je souhaite mettre en place :


    Voici ci-après ce que j'ai fait pour le moment.
    Précisions sur le renommage des tables :
    Compte-> compte_bancaire
    Operation-> t_operation
    OperSansVentil->operation_sans_ventillation
    DetailOper->t_detail_operation
    CategorieNoeud->categorie
    SousCategorie->sous_categorie

    J'ai pour habitude (bonne ou mauvaise ) de nommer id_XYZ la clé primaire de la table XYZ. Lorsque cette clé est utilisé dans une autre table (clé étrangère) je nomme le champ XYZ_id.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    CREATE TABLE `compte_bancaire` (
      `id_cb` tinyint(3) unsigned NOT NULL auto_increment,
      `nom_complet_cb` varchar(150) NOT NULL default '',
      `nom_abrege_cb` varchar(20) NOT NULL default '',
      `solde_initial_cb` decimal(10,2) NOT NULL default '0.00',
      `device_cb` tinyint(1) NOT NULL default '0',
      `swift_code` varchar(20) NOT NULL default '',
      `iban` varchar(50) NOT NULL default '',
      `aba` varchar(9) NOT NULL default '',
      `numero_compte` varchar(15) NOT NULL default '',
      `rib` varchar(50) NOT NULL default '',
      `booking_affichage` enum('Y','N') NOT NULL default 'N',
      `banque_id` tinyint(2) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_cb`),
      KEY `device_cb` (`device_cb`)
    ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
     
    -- 
    -- Structure de la table `t_operation`
    -- 
     
    CREATE TABLE `t_operation` (
      `id_operation` int(11) unsigned NOT NULL auto_increment,
      `OperLibelle` varchar(50) NOT NULL,
      `OperationDateValeur` date NOT NULL,
      `cb_id` tinyint(3) unsigned NOT NULL,
      PRIMARY KEY  (`id_operation`),
      KEY `cb_id` (`cb_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
     
    -- 
    -- Contraintes pour les tables exportées
    -- 
     
    -- 
    -- Contraintes pour la table `t_operation`
    -- 
    ALTER TABLE `t_operation`
      ADD CONSTRAINT `t_operation_ibfk_1` FOREIGN KEY (`cb_id`) REFERENCES `compte_bancaire` (`id_cb`) ON DELETE CASCADE ON UPDATE CASCADE;
     
     
    -- 
    -- Structure de la table `operation_sans_ventillation`
    -- 
     
    CREATE TABLE `operation_sans_ventillation` (
      `id_operation` int(11) unsigned NOT NULL,
      `operation_montant` decimal(10,2) NOT NULL,
      `categorie_id` smallint(5) unsigned NOT NULL,
      KEY `categorie_id` (`categorie_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    -- 
    -- Structure de la table `t_detail_operation`
    -- 
     
    CREATE TABLE `t_detail_operation` (
      `id_detail_operation` int(11) unsigned NOT NULL,
      `operation_id` int(10) unsigned NOT NULL,
      `do_montant` decimal(10,2) NOT NULL,
      `do_note` varchar(100) NOT NULL,
      `categorie_id` smallint(5) unsigned NOT NULL,
      PRIMARY KEY  (`id_detail_operation`),
      KEY `operation_id` (`operation_id`,`categorie_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    -- 
    -- Structure de la table `categorie`
    -- 
     
    CREATE TABLE `categorie` (
      `id_categorie` smallint(6) NOT NULL,
      `nom_categorie` varchar(100) NOT NULL,
      PRIMARY KEY  (`id_categorie`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
     
    -- 
    -- Structure de la table `sous_categorie`
    -- 
     
    CREATE TABLE `sous_categorie` (
      `id_sous_categorie` smallint(6) NOT NULL,
      `categorie_id` smallint(6) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Je bloque parce que le mld ne m'est pas familié et je n'ai pas (encore!) l'habitude de définir les clés étrangères sous Mysql.

    Donc si vous pouviez m'aider, ce serait très sympa.

  4. #4
    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
    Après un examen rapide, il me semble que tes tables sont correctement déclarées. Il manque les clés étrangères et tu as très bien su en déclarer une donc il suffit de faire pareil.

    Tu n'es pas loin de la solution.

  5. #5
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    Bonjour,
    Je fais un blocage sur ce schéma !
    Je n'arrive pas à créer correctement la table "Operation_sans_ventilation".

    Si je comprends bien, cette table a une clé primaire "OperId" (que j'appelle id_operation) qui est en même temps une clé étrangère qui fait référence à la clé primaire de la table "operation" (t_operation sur ma base).
    Pour ce faire, j'ai créé tous les tables en innoDB. Afin de pouvoir créer des relations, je fais attention à créer les champs clé primaire et clé étrangère de la même manière. En suite, j'indexe les champs servant de clé primaire. Ok.

    Malheureusement, j'ai du louper une étape concernant la Table Operation_sans_ventillation. Si a priori le système a accepter la clé primaire sur id_operation et le fait que cette clé est aussi une clé étrangère, je n'arrive pas à définir categorie_id comme étant une clé étrangère (relative à id_categorie - clé primaire de la table categorie (categorieNoeud sur le schema). J'utilise phpmyadmin (relation).

    Le système me dit :Aucune clef n'est définie ! (categorie_id)

    voilà où j'en suis :
    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
     
    -- 
    -- Structure de la table `operation_sans_ventillation`
    -- 
     
    CREATE TABLE `operation_sans_ventillation` (
      `id_operation` int(11) unsigned NOT NULL,
      `operation_montant` decimal(10,2) NOT NULL,
      `categorie_id` smallint(6) unsigned NOT NULL,
      PRIMARY KEY  (`id_operation`),
      KEY `categorie_id` (`categorie_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    -- 
    -- Contraintes pour les tables exportées
    -- 
     
    -- 
    -- Contraintes pour la table `operation_sans_ventillation`
    -- 
    ALTER TABLE `operation_sans_ventillation`
      ADD CONSTRAINT `operation_sans_ventillation_ibfk_1` FOREIGN KEY (`id_operation`) REFERENCES `t_operation` (`id_operation`) ON DELETE CASCADE ON UPDATE CASCADE;

  6. #6
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    Finalement, petit à petit, j'avance.
    Seul point où je bloque : la création de la table sous_categorie

    je ne vois pas comment définir le champ SousCategId <pk, fk2>.

    Voici où j'en suis

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    CREATE TABLE `compte_bancaire` (
      `id_cb` tinyint(3) unsigned NOT NULL auto_increment,
      `nom_complet_cb` varchar(150) NOT NULL default '',
      `nom_abrege_cb` varchar(20) NOT NULL default '',
      `solde_initial_cb` decimal(10,2) NOT NULL default '0.00',
      `device_cb` tinyint(1) NOT NULL default '0',
      `swift_code` varchar(20) NOT NULL default '',
      `iban` varchar(50) NOT NULL default '',
      `aba` varchar(9) NOT NULL default '',
      `numero_compte` varchar(15) NOT NULL default '',
      `rib` varchar(50) NOT NULL default '',
      `booking_affichage` enum('Y','N') NOT NULL default 'N',
      `banque_id` tinyint(2) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_cb`),
      KEY `device_cb` (`device_cb`)
    ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
     
    -- 
    -- Structure de la table `t_operation`
    -- 
     
    CREATE TABLE `t_operation` (
      `id_operation` int(11) unsigned NOT NULL auto_increment,
      `OperLibelle` varchar(50) NOT NULL,
      `OperationDateValeur` date NOT NULL,
      `cb_id` tinyint(3) unsigned NOT NULL,
      PRIMARY KEY  (`id_operation`),
      KEY `cb_id` (`cb_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
     
    -- 
    -- Contraintes pour les tables exportees
    -- 
     
    -- 
    -- Contraintes pour la table `t_operation`
    -- 
    ALTER TABLE `t_operation`
      ADD CONSTRAINT `t_operation_ibfk_1` FOREIGN KEY (`cb_id`) REFERENCES `compte_bancaire` (`id_cb`) ON DELETE CASCADE ON UPDATE CASCADE;
     
    -- 
    -- Structure de la table `operation_sans_ventillation`
    -- 
     
    CREATE TABLE `operation_sans_ventillation` (
      `id_operation` int(11) unsigned NOT NULL auto_increment,
      `categorie_id` smallint(6) unsigned NOT NULL,
      `operation_montant` decimal(10,2) NOT NULL,
      PRIMARY KEY  (`id_operation`),
      KEY `categorie_id` (`categorie_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
     
    -- 
    -- Contraintes pour les tables exportees
    -- 
     
    -- 
    -- Contraintes pour la table `operation_sans_ventillation`
    -- 
    ALTER TABLE `operation_sans_ventillation`
      ADD CONSTRAINT `operation_sans_ventillation_ibfk_1` FOREIGN KEY (`id_operation`) REFERENCES `t_operation` (`id_operation`) ON DELETE CASCADE ON UPDATE CASCADE,
      ADD CONSTRAINT `operation_sans_ventillation_ibfk_2` FOREIGN KEY (`categorie_id`) REFERENCES `categorie` (`id_categorie`) ON DELETE NO ACTION ON UPDATE CASCADE;
     
    -- 
    -- Structure de la table `t_detail_operation`
    -- 
     
    CREATE TABLE `t_detail_operation` (
      `id_detail_operation` int(11) unsigned NOT NULL auto_increment,
      `categorie_id` smallint(6) unsigned NOT NULL,
      `operation_id` int(10) unsigned NOT NULL,
      `do_montant` decimal(10,2) NOT NULL,
      `do_note` varchar(100) NOT NULL,
      PRIMARY KEY  (`id_detail_operation`),
      KEY `operation_id` (`operation_id`),
      KEY `categorie_id` (`categorie_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
     
    -- 
    -- Contraintes pour les tables exportees
    -- 
     
    -- 
    -- Contraintes pour la table `t_detail_operation`
    -- 
    ALTER TABLE `t_detail_operation`
      ADD CONSTRAINT `t_detail_operation_ibfk_1` FOREIGN KEY (`categorie_id`) REFERENCES `categorie` (`id_categorie`) ON DELETE NO ACTION ON UPDATE CASCADE,
      ADD CONSTRAINT `t_detail_operation_ibfk_2` FOREIGN KEY (`operation_id`) REFERENCES `t_operation` (`id_operation`) ON DELETE CASCADE ON UPDATE CASCADE;
     
    -- 
    -- Structure de la table `categorie`
    -- 
     
    CREATE TABLE `categorie` (
      `id_categorie` smallint(6) unsigned NOT NULL auto_increment,
      `nom_categorie` varchar(100) NOT NULL,
      PRIMARY KEY  (`id_categorie`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    Structure de la table `sous_categorie`
    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
     
    CREATE TABLE `sous_categorie` (
      `id_sous_categorie` smallint(6) NOT NULL auto_increment,
      `categorie_id` smallint(6) unsigned NOT NULL,
      PRIMARY KEY  (`id_sous_categorie`),
      KEY `categorie_id` (`categorie_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
     
    -- 
    -- Contraintes pour les tables exportees
    -- 
     
    -- 
    -- Contraintes pour la table `sous_categorie`
    -- 
    ALTER TABLE `sous_categorie`
      ADD CONSTRAINT `sous_categorie_ibfk_1` FOREIGN KEY (`categorie_id`) REFERENCES `categorie` (`id_categorie`) ON DELETE CASCADE ON UPDATE CASCADE;

  7. #7
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    C'est résolu.

    Réponse dans ce
    Sujet

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

Discussions similaires

  1. [DATA] Comment créer une table avec une ligne pour chaque individu
    Par andrea0 dans le forum SAS Base
    Réponses: 7
    Dernier message: 10/10/2013, 13h18
  2. comment créer une table avec une clé etrangère?
    Par nassimanocus dans le forum Bases de données
    Réponses: 10
    Dernier message: 13/12/2012, 10h19
  3. comment créer une table avec un nom variable ( le mois actuel)
    Par sarah_insat dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/02/2011, 18h00
  4. [D6] Comment créer une table Access en SQL avec ADO ?
    Par Lung dans le forum Bases de données
    Réponses: 7
    Dernier message: 18/09/2007, 15h27
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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