SQL double clé primaire

[Fermé]
Signaler
Messages postés
10
Date d'inscription
mercredi 2 avril 2008
Statut
Membre
Dernière intervention
4 août 2008
-
 Me -
Bonjour,

Est ce qu'on peut associer à deux tables différentes la mème clé primaire sachant qu'il ya une table parent d'où on veut extraire sa clé primaire et l'introduire ds la deuxieme table car ds cette table il y'a qu'une seule ligne ki est la clé primaire de la table parent donc puisque c le seul champs existant ça sera aussi sa clé primaire.
Merci....

5 réponses

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 170
bonjour,

Peux-tu être plus explicite, stp ... ?

;o)

polux
Messages postés
10
Date d'inscription
mercredi 2 avril 2008
Statut
Membre
Dernière intervention
4 août 2008

on a une table pige_brute où il ya les champs (campagne,support et date) tous des clés primaires c'est la table parent
et une table calendrier où il ya les champs (mois, saison) et le champs date qu'on ve extraire de la table pige_brute
donc c'est une clé étrangere n'est ce pas?
et je veux aussi qu'elle soit la clé primaire de la table calendrier car le mois et la saison ne peuvent pas l'etre
date serais une cle primaire des 2 tables calendrier et pige_brute
comment faire?????
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 170
je ne connais pas le principe d'une table "parent" ... pour moi une base est faite de table avec des relations entre-elles de type "1,1" ou "1,n" ou "n,n". Une clé primaire ne peut être qu'unique dans une table et il ne put y en avoir qu'une et une seule ... la table pige_brute ne peut pas avoir 3 clés primaires ... il y a quelque chose qui cloche dans les relations des tables ... une clé étrangère ne peut pas devenir clé primaire de la table.

;o)

polux
Polux,

Il est vrai que sa conception des bases de données est un peu bizarre... (ou je n'ai pas tout compris!... ou c'est peut être une bonne méthode pour qu'un "kamikase" plante une base!lol)
cela dit, il a raison sur un point : Il est possible de créer 2 clés primaires dans une même table. Cela peut être utile, par ex :
Article (pk)
Version (pk)
ligne
description

La table ci-dessus considère un article unique, mais avec des variantes.
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 170
Ah bon ... c'est nouveau alors ...
Il ne faut pas confondre clé primaire et contrainte d'unicité, un petit rappel est, je pense, nécessaire :

Dans une base de données relationnelle, une clé primaire est une contrainte d'unicité qui permet d'identifier de manière unique un enregistrement dans une table. Une clé primaire peut être composée d'un ou de plusieurs champs de la table. Deux lignes distinctes de la table ne peuvent pas avoir les mêmes valeurs pour les champs définis au niveau de la clé primaire. Il est possible de définir pour une même table plusieurs contraintes d'unicité, mais au plus une seule clé primaire
source : https://fr.wikipedia.org/wiki/Cl%C3%A9_primaire Mais tous les bons tutos disent la même chose, il ne peut y avoir une et une seule clé primaire par table.

;o)

polux
.. Il y a un amalgame dans ces réponses je pense..

Une clé primaire est en effet toujours unique dans une même table (la contrainte d'unicité dont on a parlé). Cette clé primaire peu aussi si cela est nécessaire être composée de plusieurs champs (soit pour garantir cette unicité soit pour simplement définir des relations différentes ->1;n ou n;n , d'ou la différence entre une clé primaire simple ou composée).

Finalement ces champs qui ensemble forment la clé primaire peuvent être "repris" dans d'autres tables en tant que clé étrangère et vont donc référencer notre clé primaire composée.
Tiens je suis etonné par ton affirmation Pollux.
Tu as bien raison sur le fait qu'une table n'a qu'une seule clé primaire.
Cependant, et tu le dis subtilement, une clé primaire peut être composé de plusieurs champs (Clé, composée de deux champs, symbolisée par (pk) dans l'exemple au dessus^^).
Donc, non sans erreur, il est habituel de penser à plusieurs clés primaires pour une table.

C'est une bonne precision de ta part, cependant pour les neophytes comme moi ce n'est pas inconcevable de penser de cette manière. Ce qui est souligner pour corriger cet conception de la clé primaire.

Amicalement

Pour repondre à la question initiale, il est donc possible d'avoir une clé primaire champ1(PK) d'une table A pointant sur la clé primaire champ1(pk) d'une table B. C'est d'ailleurs de cette maniere que l'on pourrait trouver les tables representant une généralisation en UML (pour le reverse engineering) meme si on a tendance a les regrouper en une seule table. Par contre je ne pourrais pas te dire quelle sera la reaction lors de l'enregistrement sur la table A, car un enregistrement ayant la meme clé primaire devrait aussi se trouver dans la table B. Faudrait il penser aux trigger pour lever ce problème ?
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 170
Bonjour,

Je pense que tu confonds contrainte d'unicité et clé primaire. Une clé primaire peut avoir plusieurs formes (numérique, alphanumérique ou toute autre représentation) mais reste un champ unique, déclaré PK, ne pouvant contenir de doublons.

On peut mettre une contrainte empêchant de contenir des doublons dans un champs sans pourtant autant être un champ clé primaire. Cette contrainte est implicite dans un champ déclaré clé primaire. Ce sont 2 choses bien différentes.

il est donc possible d'avoir une clé primaire champ1(PK) d'une table A pointant sur la clé primaire champ1(pk) d'une table B. ... c'est malheureusement faux. Une relation entre deux tables se fait via une clé dite étrangère.



;o)
>
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016

comment j'ai compris
> carmen
bonjour , j'ai un probleme la pour créer une table en sql avec wamp server version 2.La table est contituée de la concatenation des propriétés de deux autres tables voici le script "CREATE TABLE subir (
`vin` int(11) NOT NULL,
`numrep` int(11) NOT NULL,
KEY `vin` (`vin`),
KEY `numrep` (`numrep`),
CONSTRAINT `fk_vin` FOREIGN KEY (`vin`) REFERENCES `vehicule` (`vin`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_numrep` FOREIGN KEY (`numrep`) REFERENCES `reparation` (`numrep`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1" quant j'exécute sa me dit "#1005 - Can't create table 'gestion_auto.subir' (errno: 150)".aidez s'il vous plait.