relation entre tables

relation entre tables - SQL/NoSQL - Programmation

Marsh Posté le 16-10-2007 à 10:34:23    

bonjour,  
 
j'ai un probleme assez simple a regler sans doute mais j'ai besoin de vos lumieres éclairées !!!  
 
1) il faut que je monte un systeme de tables sous access pour gérer le probleme suivant :  
 
un client peut souscrire un ou plusieurs contrats.  
un contrat peut contenir un ou plusieurs annexes  
une annexe peut contenir un ou plusieurs services .  
 
j'ai un tableau excel avec toutes les données que j'integre dans une table nommée base avec toutes les infos.  
 
quelle doit etre la structure de mes tables , mais surtout, comme établir les relations ? (la table services reprend elle les clefs des autres tables ? ou alors reprend elle seulement la cle de la table annexe qui reprend la clef de la table contrat ...  
 
c'est peut etre pas tres clair , un bon schéma valant mieux qu'un long discours .  
 
 
 
2)par exemple , pour un contrat, il y a un type (par ex: C-V1) et il faut que je rajoute un numéro pour le codifier.  
quelle est la technique ? prendre un champ type et aussi un champ code et les mettre en clefs primaires ?
ca me donnerait un code du type C-V1-00001 , C-V1-0002.
ou alors vaut il mieux que je prenne un code unique par contrat ; l'information type restant dispo ??
 
merci de vos aides .  

Reply

Marsh Posté le 16-10-2007 à 10:34:23   

Reply

Marsh Posté le 16-10-2007 à 10:50:28    

une table client, avec clé primaire id_client, clé étrangère id_contrat.
(si un client a plusieurs contrats, tu auras donc plusieurs entrée dans cette table pour ce client)
 
Une table contrat : Clé primaire id_contrat, clé étrangère id_annexe
Une table annexe : Clé primaire id_annexe, clé étrangère id_service
Une table service : Clé primaire id_service
 
Après à toi d'ajouter d'autre colonnes pour mettre tes codes C-V1-00001 , C-V1-0002 & co  

Reply

Marsh Posté le 16-10-2007 à 11:00:08    

Sinon tu peux aussi rajouter des table de liaisons au lieu de dupliquer chaque ligne pour un client ayant plusieurs contrats.
 
Un table client avec un id_client en clé primaire (et des colonnes pour les infos clients)
Une table client_contrat avec en clé primaire id_client ou id_contrat et clé étrangère id_client ou id_contrat (bref suffit d'un index).Cette table contiendra seulement 2 colonnes (id_client, id_contrat), ce qui évite de dupliquer toutes les infos d'un client.
 
Tu peux faire de même entre toutes les tables.

Reply

Marsh Posté le 16-10-2007 à 11:06:34    

merci pour la réponse.  
 
en attendant, j'avais raisonné dans l'autre sens :  
une table contrat , Clé primaire id_contrat, clé étrangère id-client
Une table annexe : Clé primaire id_annexe, clé étrangère id_contrat  
Une table service : Clé primaire id_service ; cles etrangeres:  id-annexe, id-contrat, id-client
 
qu'en penses tu ? ca marche aussi ?  

Reply

Marsh Posté le 16-10-2007 à 11:49:45    

Alisteroid a écrit :

une table client, avec clé primaire id_client, clé étrangère id_contrat.
(si un client a plusieurs contrats, tu auras donc plusieurs entrée dans cette table pour ce client)
 
Une table contrat : Clé primaire id_contrat, clé étrangère id_annexe
Une table annexe : Clé primaire id_annexe, clé étrangère id_service
Une table service : Clé primaire id_service
 
Après à toi d'ajouter d'autre colonnes pour mettre tes codes C-V1-00001 , C-V1-0002 & co  


 
 
si j'ai une table client comme tu dis , ne vais je pas me heurter au pb suivant :  
ex de table clt :  
client0001, contrat00001
client0001, contrat 00002 .  
si la table client contient une info contrat , alors la clé ne peut plus etre unique puisque j'ai deux enregistrement avec le meme numéro de client .
 
c'est pour ca que je me demande si la clé etrangere idclient ne doit pas etre plutot contenue dans la table contrat ???

Reply

Marsh Posté le 16-10-2007 à 14:05:56    

Excuse moi, je me suis trompé, dans ce cas la, tu auras un index sur id_client et une clé primaire sur  un premier champ en autoincrement.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed