Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 31/03/2011, 23h13   #1
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 145
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 145
Points : 25
Points : 25
Par défaut probleme clef primaire et etrangere pour creation table

Bonsoir

J'ai un bug avec ma clef primaire et etrangere , le compilateur trouve une erreur sur le constraint de " idanimal " , je ne voit d'ou peux venir l'erreur

Code :
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
CREATE TABLE[LISTE_ANIMAUX]
( [typeanimal] TEXT(70),
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [typeanimal]) ) ; 
 
 
CREATE TABLE [CLIENT]
( [numclient ] TEXT(70) ,
[typeclient ] LONG,
[nomclient ] TEXT(70),
[rue] TEXT (70),
[localite] TEXT(70),
[departement] TEXT(70),
[codepostal] TEXT(70),
[telephone] TEXT(70),
[siteweb] TEXT(70),
[clientdepuis ] DATETIME,
[remise ] LONG,
[balance] LONG, 
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numclient] ) ) ;
 
 
CREATE TABLE [ANIMAL]
( [idanimal] TEXT(70),
[numclient] TEXT (70),
[nomanimal] TEXT(70),
[typeanimal] TEXT(70),
[race] TEXT(70),
[dn] DATETIME,
[sexe] TEXT(70),
[couleur] TEXT(70),
[sterilisation] YESNO,
[taille] LONG,
[poids] LONG ,
[decede] YESNO,
[commentaires] TEXT (250),
CONSTRAINT [FOREIGN KEY] FOREIGN KEY ( [numclient] )
CONSTRAINT [PRIMARY KEY ] PRIMARY KEY ([idanimal] ) ) ;
merci d'avance
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 14h16   #2
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 882
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 882
Points : 5 116
Points : 5 116
Votre clause FOREIGN KEY est incomplète :
Code :
CONSTRAINT [FOREIGN KEY] FOREIGN KEY ( [numclient] )
Il manque la partie REFERENCES CLIENT.

A noter que des attributs de type TEXT(70) qui entrent dans la composition des clés primaires ça n'est pas du tout conseillé. Il est d'usage en l'occurrence que ces attributs soient du type INTEGER (ou apparenté, LONG INTEGER par exemple).

Par ailleurs, se souvenir que les attributs qui entrent dans la composition des clés primaires doivent être NOT NULL.
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

__________________

Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/04/2011, 19h48   #3
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 145
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 145
Points : 25
Points : 25
Bonsoir

j'ai encore un souci avec mes clefs

Code :
1
2
3
4
5
6
7
CREATE TABLE [DETAIL_VISITE]
( [numvis] TEXT(70) REFERENCES VISITE ( [numvis] ),
[numlig] LONG,
[typevisite] TEXT(70)	,
[codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
[codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numlig])) ;
Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE VISITE 
 
( [numvis] TEXT(70) ,
[idanimal] TEXT(70) REFERENCES ANIMAL ( [idanimal] ) ,
[datevisite] DATETIME,
[typesuivi] TEXT(70),
[datesuivi] DATETIME,
[typepaiement] MONEY,
[datepaiement] DATETIME,
[envoi] YESNO,
[details] TEXT(70) ,
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numvis] )  );
Dans la table "detail_visite" j'ai logiquement 2 clef primaire (numvis et numlig ). Petit probleme (numvis) qui est clef primaire dans "visite" doit être aussi clef primaire mais aussi êtrangére en la table "detail_visite" .

Hors si je fais cette manip je me retrouve avec un message d'erreur du type :
" instruction ou constrainte non trouvée "

Pour remedier au probleme je propose ceci :
Code :
1
2
3
4
5
6
7
8
9
 
CREATE TABLE [DETAIL_VISITE]
( [numvis] TEXT(70) REFERENCES VISITE ( [numvis] ),
[numlig] LONG,
[typevisite] TEXT(70)	,
[codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
[codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numlig]),
CONSTRAINT [FOREIGN KEY] FOREIGN KEY ( [numvis] ) ) ;
ou alors ceci

Code :
1
2
3
4
5
6
7
8
CREATE TABLE [DETAIL_VISITE]
( [numvis] TEXT(70),
[numlig] LONG,
[typevisite] TEXT(70)	,
[codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
[codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numlig]),
CONSTRAINT [FOREIGN KEY] FOREIGN KEY ( [numvis] ) ) ;
Je tiens à préciser que "numvis" et bien du type text/varchar c'est des nombres de la forme avec tirait " 00000-00 " .

Merci d'avance
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 23h52   #4
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 882
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 882
Points : 5 116
Points : 5 116
Bonsoir,


Citation:
Envoyé par tanaka59 Voir le message
Dans la table "detail_visite" j'ai logiquement 2 clef primaire (numvis et numlig ).
Non. Nuance, vous avez une clé primaire composée des deux attributs numvis et numlig. Il faut donc coder :

Code SQL :
1
2
3
4
5
6
7
CREATE TABLE [DETAIL_VISITE]
( [numvis] TEXT(70) REFERENCES VISITE ( [numvis] ),
[numlig] LONG,
[typevisite] TEXT(70),
[codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
[codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [numvis], [numlig])) ;


Citation:
Envoyé par tanaka59 Voir le message
Petit probleme (numvis) qui est clef primaire dans "visite" doit être aussi clef primaire mais aussi êtrangére en la table "detail_visite".
Il n’y a aucun problème. Un attribut de l’en-tête d’une table peut très bien à la fois entrer dans la composition de la clé primaire de cette table et dans la composition d’une clé étrangère :

L’attribut numvis entre ainsi dans la composition de la clé primaire {numvis, numlig} de la table DETAIL_VISITE et dans la clé étrangère {numvis} qui fait référence à la table VISITE.


Citation:
Envoyé par tanaka59 Voir le message
Je tiens à préciser que "numvis" et bien du type text/varchar c'est des nombres de la forme avec tirait " 00000-00 "
Que l’attribut numvis soit du type TEXT ou VARCHAR, avec des traits tout partout, ça n'est pas un problème, mais faites en une clé alternative (l'unicité des valeurs sera garantie par le SGBD). En pratique, une clé primaire ne doit pas pouvoir être manipulée par les utilisateurs :

Table VISITE. Clé primaire : {VisiteId} ; clé alternative (doublons interdits là aussi) : {numvis}

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE VISITE 
 
( [numvis] TEXT(70) ,
[idanimal] TEXT(70) REFERENCES ANIMAL ( [idanimal] ) ,
[datevisite] DATETIME,
[typesuivi] TEXT(70),
[datesuivi] DATETIME,
[typepaiement] MONEY,
[datepaiement] DATETIME,
[envoi] YESNO,
[details] TEXT(70) ,
[VisiteId] LONG,
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [VisiteId] ),
CONSTRAINT [UNIQUE] UNIQUE ([numvis])) ;

Table DETAIL_VISITE. Clé primaire : {VisiteId, numlig} ; clé étrangère : {VisiteId}

Code SQL :
1
2
3
4
5
6
7
CREATE TABLE [DETAIL_VISITE]
([VisiteId] LONG REFERENCES VISITE ( [VisiteId] ),
[numlig] LONG,
[typevisite] TEXT(70),
[codetrai] LONG REFERENCES TRAITEMENT ( [codetrai] )  ,
[codemedi] LONG  REFERENCES MEDICAMENT ( [codemedi] ) ,
CONSTRAINT [PRIMARY KEY] PRIMARY KEY ( [VisiteId], [numlig])) ;



Bonne lecture.
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

__________________

Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !)
fsmrel 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 04h03.


 
 
 
 
Partenaires

Hébergement Web