Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/02/2011, 10h15   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 106
Points : 11
Points : 11
Par défaut Problème dans le choix de clé primaire

bonjour à tout le monde,
mon problème est comme suit :
je suis en train de créer mes tables, j'ai rencontré un problème dans le choix de clé primaire. j'ai trois champs qui sont
1- CIN
2- Nom
3-Prénom

un client est identifié par son CIN généralement, mais parfois cette information est manquante d'une façon on utilise, lors d'un travail manuel, le Nom et le Prénom du client,
mais sachant qu'on peut prouver par hasard deux clients qui possèdent même nom et prénom
alors dans ce cas on ne peut pas identifier un client par son nom et prénom dans une base de données.
comment faire ??? si on a des clients dont on ne connait pas leur CIN et on ne peut pas les identifier par leur Nom et prénom.
merci de m'aider pour la résolution de ce problème. j'attends vos réponses.

amicalement.
oumay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 10h22   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il faut rajouter une première colonne id_client, qui sera auto incrémentée et qui ne signifiera rien fonctionnellement.

Dans les autres tables, vous ferez toujours référence à vos clients par cet id et uniquement cet id.

Rajoutez une contrainte unique nullable sur la colonne CIN afin de garantir au moins l'unicité de celle-ci.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 10h25   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Qu'est-ce que "CIN" ? Apparemment, il s'agit d'un attribut doté d'une signification particulière. Ça constituerait donc une mauvaise clé, à plus forte raison si ce CIN n'est pas toujours connu.

Il faut créer un identifiant artificiel de type entier et auto-incrémenté.
C'est d'ailleurs la meilleure pratique pour toutes les tables issues des entités du MCD.
Par voie de conséquence, les clés étrangères seront de type entier.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 10h58   #4
Modérateur
 
Avatar de sevyc64
 
Homme Yves
Développeur informatique
Inscription : janvier 2007
Messages : 3 878
Détails du profil
Informations personnelles :
Nom : Homme Yves
Âge : 39
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 3 878
Points : 7 655
Points : 7 655
C'est quoi le CIN, le n° de client ??? Celui-ci doit alors être obligatoirement renseigné, unique et non null. Dans ce cas, il pourrait servir de clé mais il faudrait alors corriger la base.

S'il est tout à fait normal que le CIN se retrouve non renseigné et que cela signifie quelque chose dans le modèle de données il faut alors créer un autre attribue comme le suggère Waldar.

Mais si la base est déjà remplie de données, il faudra de toute façon passer par une phase de correction. Corriger le CIN ou corriger un autre attribut qui pourrait faire doublon (si le CIN peut servir de clé), je préfère la première solution. J'aime pas les attributs doublons.
Si le CIN ne peut pas servir de clé, la question ne se pose pas évidemment
__________________
Sevyc64 --- Le partage est notre force

NON AU LANGAGE SMS & FAUTES VOLONTAIRES SUR LES FORUMS
sevyc64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 10h59   #5
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 106
Points : 11
Points : 11
[quote=CinePhil;5761484]
Citation:
Qu'est-ce que "CIN" ?
c'est la carte d'identité national donc elle identifie le client d'une façon parfaite
Citation:
CIN n'est pas toujours connu.
le problème que j'ai des contrats sans cette information

Citation:
Il faut créer un identifiant artificiel de type entier et auto-incrémenté.
C'est d'ailleurs la meilleure pratique pour toutes les tables issues des entités du MCD.
le problème est que lors de la consultation de la base de données je doit faire une recherche sur soit le CIN soit le Nom et prénom si le Cin est inexistant, donc si je vais identifier chaque ligne par un numéro, comment connaitre que le num i est identifier pour le client j

merci d'avance pour l'aide.
oumay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 11h28   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Citation:
c'est la carte d'identité national donc elle identifie le client d'une façon parfaite
Tu n'as quand même pas qu'un nom et un prénom pour identifier un client quand même ?

J'ai peur de recevoir une facture de chez toi si un homonyme t'achète 200 000 trucs à 10 euros !

Et je trouverais un peu bizarre que mon numéro de carte d'identité se retrouve dans une base de données d'une société commerciale !

Il va falloir nous en dire un peu plus sur ton processus pour qu'on puisse t'aider davantage.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 16h38   #7
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
bonjour

il ne faut pas confondre cle primaire et index dans les procedures de recherche

pour la cle primaire, il faut suive le conseil de Cinephil
Citation:
Citation:
Il faut créer un identifiant artificiel de type entier et auto-incrémenté.
C'est d'ailleurs la meilleure pratique pour toutes les tables issues des entités du MCD.
Code :
1
2
 
le problème est que lors de la consultation de la base de données je doit faire une recherche sur soit le CIN soit le Nom et prénom si le Cin est inexistant, donc si je vais identifier chaque ligne par un numéro, comment connaitre que le num i est identifier pour le client j
et pour cela faire une/des requete(s) pour obtenir le resultat souhaite...

genre :

Code :
1
2
3
SELECT nom, prenom, cni
FROM TABLE
WHERE nom = 'xxx'
pas besoin de cle primaire, mais de creer des index (si l'on veut que ce soit rapide )

de toute facon, laCNI (meme vous aviez toutes les donnees) n'est pas une bonne cle primaire. Imaginons, que la CNI deviennent la CEI (europeenne)...

a+

olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h52.


 
 
 
 
Partenaires

Hébergement Web