[Oracle] Problème d'insertion dans une table

Problème d'insertion dans une table [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 18-05-2004 à 14:47:22    

Bonjour,
 
Désolé ma question est peu etre stupide mais bon je n'ai pas peur du ridicule alors alons y:
 
Donc je voudrai inserer des données dans la table formation.  
Voici sa structure:  
 
create table FORMATION (  
MATRICULE CHAR(10) not null,  
NUM_FORM INTEGER not null,  
"DATE" DATE,  
TITRE VARCHAR2(50),  
HEURE INTEGER,  
constraint PK_FORMATION primary key (NUM_FORM),  
constraint FK_FORMATIO_PERS_FORM_PERSONNE foreign key (MATRICULE)  
references PERSONNE (MATRICULE)  
)  
 
Donc voici un petit exemple d'insertion :  
 
INSERT INTO FORMATION VALUES ('aaaaaaaaaa',1,'01-01-01','math',10);  
INSERT INTO FORMATION VALUES ('aaaaaaaaaa',2,'01-01-01','info',20);  
INSERT INTO FORMATION VALUES ('aaaaaaaaaa',3,'01-01-01','angl',30);  
INSERT INTO FORMATION VALUES ('aaaaaaaaaa',4,'01-01-01','ita',40);  
 
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',1,'01-01-01','math',10);  
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',2,'01-01-01','info',20);  
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',3,'01-01-01','angl',30);  
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',4,'01-01-01','ita',40);  
 
La première serie d'insertion fonctionne, mais la deuxième serie ne veux pas et j'ai le droit une erreur du genre:  
 
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',1,'01-01-01','math',10)  
*  
ERROR at line 1:  
ORA-00001: unique constraint (HR.PK_FORMATION) violated  
 
en gros une formation est défini par son matricule, qui proviens de la clef primaire de la table PERSONNE, et son numéro de formation que j'ai défini en tant que clef primaire (par exemple le numéro de formation est 1 pour sa première formation , 2 pour sa seconde etc...)
Donc faut il que je redefinisse ma table formation, ou y a t'il un autre moyen pour que je puisse inserer c'est données.
 
Merci beaucoup

Reply

Marsh Posté le 18-05-2004 à 14:47:22   

Reply

Marsh Posté le 18-05-2004 à 14:56:23    

La deuxième insertion ne peut se faire parce que les clés primaires sont déjà utilisées et une clé primaire est unique par définition, ta clé primaire étant NUM_FORM. En effet, tu insère une première série de tuples de clé primaire de 1 à 4, et tu recommence avec les meme clés primaire >> erreur de contrainte unique
 
Dans un contexte de shema normalisé, il te faudrait une table PERSONNES, une TABLE FORMATIONS, qui contiendrait les informations pour différents types de formations, et une troisième table, PERS_FORM par exemple, qui relierait des personne à des formations.


Message édité par vespertinian le 18-05-2004 à 14:59:13
Reply

Marsh Posté le 18-05-2004 à 14:57:45    

Essaie ça  
1)commence par supprimer ta table Formation  
nouvellement créé
=>
drop table formation
 
2) Recrée ta table avec la clé primaire
formée des 2 champs Matricule et num_form  
=>
create table FORMATION (  
MATRICULE CHAR(10) not null,  
NUM_FORM INTEGER not null,  
"DATE" DATE,  
TITRE VARCHAR2(50),  
HEURE INTEGER,  
constraint PK_FORMATION primary key (MATRICULE ,NUM_FORM),  
constraint FK_FORMATIO_PERS_FORM_PERSONNE foreign key (MATRICULE)  
references PERSONNE (MATRICULE)  
)  

Reply

Marsh Posté le 18-05-2004 à 15:05:31    

Merci a tous de m'avoir aider,
et merci beaucoup vttman2, ca marche a merveille ta foncion

Reply

Marsh Posté le 18-05-2004 à 15:40:05    

Certes mais le + propre aurait été de créer  
3 tables comme indiqué dans le message
de vespertinian ...

Reply

Marsh Posté le 18-05-2004 à 15:59:15    

Le problème est que num_form ne correspond pas un type de formation mais à un numéro de formation, c'est a dire une personne peut avoir de 0 à n formation, et chacunes de ses formations est classé par ordre de formation (donc de 0 à n ou plutôt de 1 à n).
Donc la formation 1 du matricule 'aaaaaaaaaa' n'est pas la même que la formation 1 du matricule 'bbbbbbbbbb'.

Reply

Sujets relatifs:

Leave a Replay

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