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 :

Valeur de clé etrangere


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    simple étudiant
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : simple étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Par défaut Valeur de clé etrangere
    Bonjour à tous,

    je crée une BD en utilisant http://ondras.zarovi.cz/sql/demo/ (pour éviter de coder directement en dur et gagner du temps)
    voici sa representation (cf code en bas aussi )
    Nom : Capture.PNG
Affichages : 4171
Taille : 28,0 Ko

    je voudrais que table1, table...4 soient liée à la table product, j'ai donc crée des clés étrangère pour chaque table reliée a product. Cependant, je ne sais pas comment remplir leurs champ. Ca doit pas être compliqué mais sur les forum on explique juste ce que c'est et pas comment on rempli son champ ^^
    En exemple image la clé etrangere de la table4, que remplir la dedans en gros:Nom : Capture.PNG
Affichages : 2004
Taille : 39,9 Ko



    Est ce que je dois utiliser la clé primaire 'id' de product ? ou juste les mettre en auto-increment ? (j'ai laissé le champ rempli par défaut pour le moment, comme sur l'image du dessus)
    N’hésitez pas a me faire des remarques ou a me demender plus de précisions.
    d'avance merci.

    code sql actuel ci dessous:
    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    -- ---
    -- Globals
    -- ---
     
    -- SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    -- SET FOREIGN_KEY_CHECKS=0;
     
    -- ---
    -- Table 'product'
    -- 
    -- ---
     
    DROP TABLE IF EXISTS `product`;
     
    CREATE TABLE `product` (
      `id` INTEGER NOT NULL AUTO_INCREMENT,
      `id_table1` INTEGER NULL DEFAULT NULL,
      `id_table2` INTEGER NULL DEFAULT NULL,
      `id_table3` INTEGER NULL DEFAULT NULL,
      `id_table4` INTEGER NULL DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
     
    -- ---
    -- Table 'table1'
    -- 
    -- ---
     
    DROP TABLE IF EXISTS `table1`;
     
    CREATE TABLE `table1` (
      `id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
      `ch_t1` INTEGER NULL DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
     
    -- ---
    -- Table 'table2'
    -- 
    -- ---
     
    DROP TABLE IF EXISTS `table2`;
     
    CREATE TABLE `table2` (
      `id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
      `ch_t2` INTEGER NULL DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
     
    -- ---
    -- Table 'table3'
    -- 
    -- ---
     
    DROP TABLE IF EXISTS `table3`;
     
    CREATE TABLE `table3` (
      `id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
      `ch_t3` INTEGER NULL DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
     
    -- ---
    -- Table 'table4'
    -- 
    -- ---
     
    DROP TABLE IF EXISTS `table4`;
     
    CREATE TABLE `table4` (
      `id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
      `ch_t4` INTEGER NULL DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
     
    -- ---
    -- Foreign Keys 
    -- ---
     
    ALTER TABLE `product` ADD FOREIGN KEY (id_table1) REFERENCES `table1` (`id`);
    ALTER TABLE `product` ADD FOREIGN KEY (id_table2) REFERENCES `table2` (`id`);
    ALTER TABLE `product` ADD FOREIGN KEY (id_table3) REFERENCES `table3` (`id`);
    ALTER TABLE `product` ADD FOREIGN KEY (id_table4) REFERENCES `table4` (`id`);
     
    -- ---
    -- Table Properties
    -- ---
     
    -- ALTER TABLE `product` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    -- ALTER TABLE `table1` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    -- ALTER TABLE `table2` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    -- ALTER TABLE `table3` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    -- ALTER TABLE `table4` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
     
    -- ---
    -- Test Data
    -- ---
     
    -- INSERT INTO `product` (`id`,`id_table1`,`id_table2`,`id_table3`,`id_table4`) VALUES
    -- ('','','','','');
    -- INSERT INTO `table1` (`id`,`ch_t1`) VALUES
    -- ('','');
    -- INSERT INTO `table2` (`id`,`ch_t2`) VALUES
    -- ('','');
    -- INSERT INTO `table3` (`id`,`ch_t3`) VALUES
    -- ('','');
    -- INSERT INTO `table4` (`id`,`ch_t4`) VALUES
    -- ('','');
    ou en xml:
    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    <?xml version="1.0" encoding="utf-8" ?>
    <!-- SQL XML created by WWW SQL Designer, https://github.com/ondras/wwwsqldesigner/ -->
    <!-- Active URL: http://ondras.zarovi.cz/sql/demo/ -->
    <sql>
    <datatypes db="mysql">
    	<group label="Numeric" color="rgb(238,238,170)">
    		<type label="Integer" length="0" sql="INTEGER" quote=""/>
    	 	<type label="TINYINT" length="0" sql="TINYINT" quote=""/>
    	 	<type label="SMALLINT" length="0" sql="SMALLINT" quote=""/>
    	 	<type label="MEDIUMINT" length="0" sql="MEDIUMINT" quote=""/>
    	 	<type label="INT" length="0" sql="INT" quote=""/>
    		<type label="BIGINT" length="0" sql="BIGINT" quote=""/>
    		<type label="Decimal" length="1" sql="DECIMAL" re="DEC" quote=""/>
    		<type label="Single precision" length="0" sql="FLOAT" quote=""/>
    		<type label="Double precision" length="0" sql="DOUBLE" re="DOUBLE" quote=""/>
    	</group>
     
    	<group label="Character" color="rgb(255,200,200)">
    		<type label="Char" length="1" sql="CHAR" quote="'"/>
    		<type label="Varchar" length="1" sql="VARCHAR" quote="'"/>
    		<type label="Text" length="0" sql="MEDIUMTEXT" re="TEXT" quote="'"/>
    		<type label="Binary" length="1" sql="BINARY" quote="'"/>
    		<type label="Varbinary" length="1" sql="VARBINARY" quote="'"/>
    		<type label="BLOB" length="0" sql="BLOB" re="BLOB" quote="'"/>
    	</group>
     
    	<group label="Date &amp; Time" color="rgb(200,255,200)">
    		<type label="Date" length="0" sql="DATE" quote="'"/>
    		<type label="Time" length="0" sql="TIME" quote="'"/>
    		<type label="Datetime" length="0" sql="DATETIME" quote="'"/>
    		<type label="Year" length="0" sql="YEAR" quote=""/>
    		<type label="Timestamp" length="0" sql="TIMESTAMP" quote="'"/>
    	</group>
     
    	<group label="Miscellaneous" color="rgb(200,200,255)">
    		<type label="ENUM" length="1" sql="ENUM" quote=""/>
    		<type label="SET" length="1" sql="SET" quote=""/>
    		<type label="Bit" length="0" sql="bit" quote=""/>
    	</group>
    </datatypes><table x="455" y="115" name="product">
    <row name="id" null="0" autoincrement="1">
    <datatype>INTEGER</datatype>
    </row>
    <row name="id_table1" null="1" autoincrement="0">
    <datatype>INTEGER</datatype>
    <default>NULL</default><relation table="table1" row="id" />
    </row>
    <row name="id_table2" null="1" autoincrement="0">
    <datatype>INTEGER</datatype>
    <default>NULL</default><relation table="table2" row="id" />
    </row>
    <row name="id_table3" null="1" autoincrement="0">
    <datatype>INTEGER</datatype>
    <default>NULL</default><relation table="table3" row="id" />
    </row>
    <row name="id_table4" null="1" autoincrement="0">
    <datatype>INTEGER</datatype>
    <default>NULL</default><relation table="table4" row="id" />
    </row>
    <key type="PRIMARY" name="">
    <part>id</part>
    </key>
    </table>
    <table x="680" y="40" name="table1">
    <row name="id" null="1" autoincrement="1">
    <datatype>INTEGER</datatype>
    <default>NULL</default></row>
    <row name="ch_t1" null="1" autoincrement="0">
    <datatype>INTEGER</datatype>
    <default>NULL</default></row>
    <key type="PRIMARY" name="">
    <part>id</part>
    </key>
    </table>
    <table x="679" y="133" name="table2">
    <row name="id" null="1" autoincrement="1">
    <datatype>INTEGER</datatype>
    <default>NULL</default></row>
    <row name="ch_t2" null="1" autoincrement="0">
    <datatype>INTEGER</datatype>
    <default>NULL</default></row>
    <key type="PRIMARY" name="">
    <part>id</part>
    </key>
    </table>
    <table x="679" y="233" name="table3">
    <row name="id" null="1" autoincrement="1">
    <datatype>INTEGER</datatype>
    <default>NULL</default></row>
    <row name="ch_t3" null="1" autoincrement="0">
    <datatype>INTEGER</datatype>
    <default>NULL</default></row>
    <key type="PRIMARY" name="">
    <part>id</part>
    </key>
    </table>
    <table x="681" y="330" name="table4">
    <row name="id" null="1" autoincrement="1">
    <datatype>INTEGER</datatype>
    <default>NULL</default></row>
    <row name="ch_t4" null="1" autoincrement="0">
    <datatype>INTEGER</datatype>
    <default>NULL</default></row>
    <key type="PRIMARY" name="">
    <part>id</part>
    </key>
    </table>
    </sql>

  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
    Par défaut
    Bonjour,

    Le nom de vos tables n'est pas très explicite, mais il semble que vous soyez dans un cas d'héritage. voici donc un peu de lecture.

    Si cela ne correspond pas à votre besoin, revenez nous le préciser de façon un peu plus concrète.

  3. #3
    Membre averti
    Homme Profil pro
    simple étudiant
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : simple étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Par défaut infos additionnels
    Bonjour,

    Merci pour ton lien, j'ai regardé; je ne pense pas avoir de cas d'héritage ici.
    Les noms ne sont pas explicites car j'ai juste fais un exemple fictif, mon cas étant un peu trop complexe. voici plus de précision:

    Imaginons que la table product est une grande boite
    A chaque fois que je remplis cette boite avec des infos, je suis obligé de remplir les table de 1 à 4 qui sont des petites boites, puis de les placer dans la grande (product): elles sont liés avec la boite product.
    Apres, je peux revenir et construire une nouvelle boite product: cela créera alors une nouvelle ligne dans ma BD que je vais la lier avec 4 nouvelles tables (les mêmes mais avec des infos (ch_t1,2...) différentes)

    concrètement dans ma base, j'ai plusieurs ligne dans les tables 1 a 4 et je veux pouvoir dire: j'associe la ligne w de la table 1, la ligne x de la table 2, la ligne y de la table 3 et la z de la table 4 avec une ligne choisie de la table product.

    Je pensais utiliser les clés étrangère pour pouvoir retrouver quelle tables va dans le product rempli en 1er, puis en 2nd etc...

    Est ce que de cette manière c'est plus clair?

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 883
    Par défaut
    Salut Thib0ult.

    Utiliser une clef étrangère (foreign key) sert à faire en sorte que vos tables ne rencontrent pas des problèmes d'intégrités.
    Autrement dit, quand une clef étrangère est renseignée, elle pointe obligatoirement vers la table mère (vos tables "table1","table2","table3","table4").

    Il existe une contrainte dans l'usage de la clef étrangère.
    Il faut au préalable renseigner d'abord la (ou les) table(s) mère(s) avant d'insérer dans la table fille (la table association "product").

    Ensuite, tout dépend si vous autoriser ou pas le NULL dans vos clefs étrangères.

    Si vos clefs étrangères sont dans une clef primaire (voir table "product2") alors le NULL n'est pas autorisé, sinon (voir la table "product1") ne pas les mettre dans la clef priamire.
    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `utf8`
            DEFAULT COLLATE       `utf8_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `table1`
    --------------
     
    --------------
    CREATE TABLE `table1`
    ( `id`     integer unsigned NOT NULL auto_increment primary key,
      `ch_t1`  varchar(255)         NULL DEFAULT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `table1` (`ch_t1`) values
      ('un'),('deux'),('trois')
    --------------
     
    --------------
    select * from table1
    --------------
     
    +----+-------+
    | id | ch_t1 |
    +----+-------+
    |  1 | un    |
    |  2 | deux  |
    |  3 | trois |
    +----+-------+
    --------------
    DROP TABLE IF EXISTS `table2`
    --------------
     
    --------------
    CREATE TABLE `table2`
    ( `id`     integer unsigned NOT NULL auto_increment primary key,
      `ch_t2`  varchar(255)         NULL DEFAULT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `table2` (`ch_t2`) values
      ('one'),('two'),('three')
    --------------
     
    --------------
    select * from table2
    --------------
     
    +----+-------+
    | id | ch_t2 |
    +----+-------+
    |  1 | one   |
    |  2 | two   |
    |  3 | three |
    +----+-------+
    --------------
    DROP TABLE IF EXISTS `table3`
    --------------
     
    --------------
    CREATE TABLE `table3`
    ( `id`     integer unsigned NOT NULL auto_increment primary key,
      `ch_t3`  varchar(255)         NULL DEFAULT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `table3` (`ch_t3`) values
      ('eins'),('zwei'),('drei')
    --------------
     
    --------------
    select * from table3
    --------------
     
    +----+-------+
    | id | ch_t3 |
    +----+-------+
    |  1 | eins  |
    |  2 | zwei  |
    |  3 | drei  |
    +----+-------+
    --------------
    DROP TABLE IF EXISTS `table4`
    --------------
     
    --------------
    CREATE TABLE `table4`
    ( `id`     integer unsigned NOT NULL auto_increment primary key,
      `ch_t4`  varchar(255)         NULL DEFAULT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `table4` (`ch_t4`) values
      ('uno'),('due'),('tre')
    --------------
     
    --------------
    select * from table4
    --------------
     
    +----+-------+
    | id | ch_t4 |
    +----+-------+
    |  1 | uno   |
    |  2 | due   |
    |  3 | tre   |
    +----+-------+
    --------------
    DROP TABLE IF EXISTS `product1`
    --------------
     
    --------------
    CREATE TABLE `product1`
    ( `id`         integer unsigned NOT NULL auto_increment primary key,
      `id_table1`  integer unsigned     NULL DEFAULT NULL,
      `id_table2`  integer unsigned     NULL DEFAULT NULL,
      `id_table3`  integer unsigned     NULL DEFAULT NULL,
      `id_table4`  integer unsigned     NULL DEFAULT NULL,
      CONSTRAINT `FK_PRODUCT1_TABLE1` FOREIGN KEY (`id_table1`) REFERENCES `table1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_PRODUCT1_TABLE2` FOREIGN KEY (`id_table2`) REFERENCES `table2` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_PRODUCT1_TABLE3` FOREIGN KEY (`id_table3`) REFERENCES `table3` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_PRODUCT1_TABLE4` FOREIGN KEY (`id_table4`) REFERENCES `table4` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `product1` (`id_table1`,`id_table2`,`id_table3`,`id_table4`) values (1,      1,      1,      1)
    --------------
     
    --------------
    insert into `product1` (`id_table1`,`id_table2`,`id_table3`,`id_table4`) values (2,      2,      2,      2)
    --------------
     
    --------------
    insert into `product1` (`id_table1`,`id_table2`,`id_table3`,`id_table4`) values (3,      3,      3,      3)
    --------------
     
    --------------
    insert into `product1` (`id_table1`,`id_table2`,`id_table3`,`id_table4`) values (DEFAULT,DEFAULT,DEFAULT,DEFAULT)
    --------------
     
    --------------
    select * from product1
    --------------
     
    +----+-----------+-----------+-----------+-----------+
    | id | id_table1 | id_table2 | id_table3 | id_table4 |
    +----+-----------+-----------+-----------+-----------+
    |  1 |         1 |         1 |         1 |         1 |
    |  2 |         2 |         2 |         2 |         2 |
    |  3 |         3 |         3 |         3 |         3 |
    |  4 |      NULL |      NULL |      NULL |      NULL |
    +----+-----------+-----------+-----------+-----------+
    --------------
    DROP TABLE IF EXISTS `product2`
    --------------
     
    --------------
    CREATE TABLE `product2`
    ( `id_table1`  integer unsigned     NULL DEFAULT NULL,
      `id_table2`  integer unsigned     NULL DEFAULT NULL,
      `id_table3`  integer unsigned     NULL DEFAULT NULL,
      `id_table4`  integer unsigned     NULL DEFAULT NULL,
      primary key (`id_table1`,`id_table2`,`id_table3`,`id_table4`),
      CONSTRAINT `FK_PRODUCT2_TABLE1` FOREIGN KEY (`id_table1`) REFERENCES `table1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_PRODUCT2_TABLE2` FOREIGN KEY (`id_table2`) REFERENCES `table2` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_PRODUCT2_TABLE3` FOREIGN KEY (`id_table3`) REFERENCES `table3` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_PRODUCT2_TABLE4` FOREIGN KEY (`id_table4`) REFERENCES `table4` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `product2` (`id_table1`,`id_table2`,`id_table3`,`id_table4`) values (1,      1,      1,      1)
    --------------
     
    --------------
    insert into `product2` (`id_table1`,`id_table2`,`id_table3`,`id_table4`) values (2,      2,      2,      2)
    --------------
     
    --------------
    insert into `product2` (`id_table1`,`id_table2`,`id_table3`,`id_table4`) values (3,      3,      3,      3)
    --------------
     
    --------------
    insert into `product2` (`id_table1`,`id_table2`,`id_table3`,`id_table4`) values (DEFAULT,DEFAULT,DEFAULT,DEFAULT)
    --------------
     
    ERROR 1452 (23000) at line 182: Cannot add or update a child row: a foreign key constraint fails (`base`.`product2`, CONSTRAINT `FK_PRODUCT2_TABLE1` FOREIGN KEY (`id_table1`) REFERENCES `table1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
    --------------
    select * from product2
    --------------
     
    +-----------+-----------+-----------+-----------+
    | id_table1 | id_table2 | id_table3 | id_table4 |
    +-----------+-----------+-----------+-----------+
    |         1 |         1 |         1 |         1 |
    |         2 |         2 |         2 |         2 |
    |         3 |         3 |         3 |         3 |
    +-----------+-----------+-----------+-----------+
    --------------
    select *
    from       product1 as pr
     
    inner join table1   as t1
    on t1.id = pr.id_table1
     
    inner join table2   as t2
    on t2.id = pr.id_table2
     
    inner join table3   as t3
    on t3.id = pr.id_table1
     
    inner join table4   as t4
    on t4.id = pr.id_table4
    --------------
     
    +----+-----------+-----------+-----------+-----------+----+-------+----+-------+----+-------+----+-------+
    | id | id_table1 | id_table2 | id_table3 | id_table4 | id | ch_t1 | id | ch_t2 | id | ch_t3 | id | ch_t4 |
    +----+-----------+-----------+-----------+-----------+----+-------+----+-------+----+-------+----+-------+
    |  1 |         1 |         1 |         1 |         1 |  1 | un    |  1 | one   |  1 | eins  |  1 | uno   |
    |  2 |         2 |         2 |         2 |         2 |  2 | deux  |  2 | two   |  2 | zwei  |  2 | due   |
    |  3 |         3 |         3 |         3 |         3 |  3 | trois |  3 | three |  3 | drei  |  3 | tre   |
    +----+-----------+-----------+-----------+-----------+----+-------+----+-------+----+-------+----+-------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Vous remarquerez le rejet de la ligne contenant des NULL lors de l'insertion dans la table "product2".

    Citation Envoyé par Thib0ult
    (pour éviter de coder directement en dur et gagner du temps)
    Ce n'est pas une bonne idée de procéder ainsi.
    On ne s'improvise pas DBA en faisant faire le travail par un générateur de code.
    Il y a toujours des interventions à faire pour améliorer les performances ou pour dénormaliser la base de données.

    Citation Envoyé par Thib0ult
    Cependant, je ne sais pas comment remplir leurs champ.
    En effet, ce n'est pas très compliqué à faire.

    Quand vous insérez une ligne dans l'une de vos tables mères ("table1", "table2", "table3", "table4"), vous pouvez récupérez l'identifiant de la dernière insertion, en utilisant la fonction php "last_insert_id()".
    --> http://dev.mysql.com/doc/refman/5.7/...last-insert-id

    Si par contre, vous désirez récupérer une ligne déjà insérée, vous devez faire une recherche, comme ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id from `table1` where ch_t1 like 'bla%";
    Dans les deux cas, vous aurez votre identifiant qui deviendra alors votre clef étrangère dans la table "product".

    @+

  5. #5
    Membre averti
    Homme Profil pro
    simple étudiant
    Inscrit en
    Mai 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : simple étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2015
    Messages : 16
    Par défaut
    Bonjour,

    Merci pour ces remarques.

    J'ai du me tromper de sens alors: ma table mère est Product et les tables filles sont table1 a 4
    J'ai lu beaucoup de tuto sur les cles mais je ne comprends pas encore très bien
    je me demende si je les utilise bien. Ca se trouve j'ai juste a faire des jointures ( en fonction d'un paramètre) ...
    je continu de taffer dans ce sens, et regarde tes conseils
    a toutes

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/04/2009, 20h46
  2. récupérer la valeur du 2ème champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/07/2004, 16h45
  3. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  4. [XSLT]position d'un element de valeur specifique
    Par squat dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/07/2002, 16h42
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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