clé etrangére

clé etrangére - SQL/NoSQL - Programmation

Marsh Posté le 29-03-2010 à 15:03:09    

salut
Voilà j'ai un petit pb,si qqun pourrait m'aider, ça serait super sympa car là je suis un peu coincé.
c'est mon 1ére projet avec MySQL server .
voila le but de l'application : contrôler une salle .
partie interface graphique (NETBEANS) et une base de données (MySQL).
3 tables : user , type et eve
la table eve contient deux clés étrangères
le but de ce table : ce utilisateur ( qui a ce password et ce name ) a réaliser ce type d'evenemnt ( entre or sortir)
code pour table user :

Code :
  1. create table utilisateur (
  2.      id_user  smallint unsigned not null auto_increment ,
  3.      user_name varchar (50) not null,
  4.      password   smallint unsigned not null ,
  5.      primary key (id_user)
  6.     );


code pour table type:

Code :
  1. create table type  (
  2.      id_tpe  smallint unsigned not null auto_increment ,
  3.      tpe_libelle varchar (50) not null,
  4.      primary key (id_tpe)
  5.     );


code pour table eve:

Code :
  1. create table eve  (
  2.      id_user  smallint unsigned,
  3.      id_tpe  smallint unsigned,
  4.      Primary Key (id_user, id_tpe),
  5.      Foreign Key (id_user) references user(id_user),
  6.      Foreign Key (id_tpe) references type(id_tpe)
  7. );


je sais pas est ce ce dernière code est juste or non ?!!
 
pour table eve où les clés étrangères c'est pas automatiquement id_user et id_tpe sont inscrit ?
 
c' est à dire quand je tape ce code :

Code :
  1. INSERT INTO user
  2. ( user_name , password ) VALUES ( 'hardware ',123);


dans ce cas le "id_user" contient la valeur : 1 dans la table user
 
et dans la table eve (clé étrangère)?!!je doit le faire manuellement
 
et ca je le veux automatiquement
 
merci d'avance

Reply

Marsh Posté le 29-03-2010 à 15:03:09   

Reply

Marsh Posté le 30-03-2010 à 08:22:58    

Tu voudrais faire quoi clairement?
 
La valeur id_user est incrementée automatiquement chaque fois que tu insert dans la table user.
 
Une clé etrangere ne sert qu'a maintenir l'integrité referentielle de ta DB, ca n'insert rien automatiquement. Il faut inserer manuellement dans la table eve.
Pour obtenir le id_user a inserer il faut soit faire une query avant pour le recuperer ou alors faire un join avec la table user au moment de l'insert.

Reply

Marsh Posté le 30-03-2010 à 08:58:29    

salut merci Oliiii,
 
** vérifier si ce password et name exite déjà dans la basse quant utilisateur les saisit dans l'interface java,j'ai tester sur une autre petite base de données et c'est bien marché
** tous les informations après la connexion seront enregsitre sous ce "id_user " pour que a la fin affiché :
 
--->>ce utislisateur qui possede telle données a entrée/sortir ( de la table type) a la sale !!!
 
comme ici , pour connecter au site , inscription et apres vérification de password et enregistre le date de connexion .  
 
au lieu de site dans mon cas une  seul salle.
 
 
 
je sais , j'ai pas exprimé bien mes idées ,mais je te jure que je suis coincé.

Reply

Marsh Posté le 30-03-2010 à 09:43:09    

En résumé quand tu verifies si l'utilisateur a entré le bon mot de passe, tu sauves son id_user dans ton application, et tu le réutilises pour inserer son "entrée" dans le table eve et sa "sortie" quand il aura fini.
 
Tu pourrais faire tout en une fois (verifier le mot de passe + inserer une "entrée" dans eve) mais je ne crois pas que ce soit le but de ton exercice.

Reply

Marsh Posté le 30-03-2010 à 09:51:20    

*une table "utilisateur" qui contient les utilisateurs enregistrés , par exemple 3 utilsateur -> 3 id_user 1,2 et 3
*une table "type" qui contient les types d'evenements possibles c ' est à dire deux type possible entré or sortir.
*"eve" qui contient un evenement date_heure entre , dat_heure sortir ( type datetime) ,#id_suer et #id_tpe
 
par l'interface java , utilisateur (qui possède déjà un password et login ) saisit ses coordonnées, on vérifier s'il exite déjà dans la base ( j'ai testé avec un petit exemple et code java et cé bien marché la connexion et la vérification ) quant il clik sur le bouton" ok " pour connecté automatiquement insert dans  la table eve la date_heure d'entrée ( mais je sais pas comment je dit"  à la base " ce utilisateur qui l'id_user = 2 par exemple ?!!!)
 
 

Reply

Marsh Posté le 30-03-2010 à 13:51:22    

Si id_user = 2 et entree est type = 1, tu fais:

Code :
  1. INSERT eve (id_user, id_tpe) VALUES (2, 1)

Reply

Marsh Posté le 30-03-2010 à 14:18:20    

j'ai fais ca mais le problème si il entre une autre fois il ne peux pas insert encore values (2,1) !!
 
je cherche que la base enregistre l'entré et la sortie de l'user !!
 

Reply

Marsh Posté le 30-03-2010 à 14:36:13    

pikamo a écrit :

j'ai fais ca mais le problème si il entre une autre fois il ne peux pas insert encore values (2,1) !!
 
je cherche que la base enregistre l'entré et la sortie de l'user !!
 


Si tu veux garder l'historique il ne faut pas utiliser (id_user, id_salle) comme clé primaire de la table eve.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 30-03-2010 à 14:39:07    

salut ,
 
si je supprime le clé etrangére id_user de la table eve et je fais id_utilisateur un simple champ  ( je recupére le_id_user et je le met dans ce champs !!! )

Reply

Marsh Posté le 30-03-2010 à 14:39:47    

NON§§§§§§§§
id_user EST une clé étrangère.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 30-03-2010 à 14:39:47   

Reply

Marsh Posté le 30-03-2010 à 14:49:14    

alors table eve contient clé étrangère id_user et id_libelle .
d'où ce code doit être modifier :
 
CREATE TABLE eve  (
     id_user  smallint UNSIGNED,  
     id_tpe  smallint UNSIGNED,
     PRIMARY KEY (id_user, id_tpe),
     FOREIGN KEY (id_user) REFERENCES utilisateur(id_user),
     FOREIGN KEY (id_tpe) REFERENCES type(id_tpe)
);

Reply

Marsh Posté le 30-03-2010 à 14:50:03    

pikamo a écrit :

alors table eve contient clé étrangère id_user et id_libelle .
d'où ce code doit être modifier :
 
CREATE TABLE eve  (
     id_user  smallint UNSIGNED,  
     id_tpe  smallint UNSIGNED,
     PRIMARY KEY (id_user, id_tpe),
     FOREIGN KEY (id_user) REFERENCES utilisateur(id_user),
     FOREIGN KEY (id_tpe) REFERENCES type(id_tpe)
);


 

skeye a écrit :

il ne faut pas utiliser (id_user, id_salle) comme clé primaire de la table eve.



---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 30-03-2010 à 16:22:39    

Enleve ta primary key et garde le reste.
Ce genre de table n'a pas besoin de primary key.

Reply

Marsh Posté le 30-03-2010 à 17:48:38    

merci Oliiii ,  
 
une autre problème :
comment je peux récupérer id_user quant l'utilisateur saisie son login et password pour connecté ?
car je utilse ce "id " pour le mettre dans la table eve  
pour le moment je le fais manullement avec ce code ( dans l'interface graphique)
code:
String queryString = "insert into eve (id_user ,id_tpe,date ) values(1,1, '"+h+"')";
 
ou id_user prend la valeur 1
id_tpe prend la valeur 1 (c' est  a dire entrée)  
date prend la valeur capter par l'interface graphique (lheure et la date de système)avec cette code String h=txtda.getText();
 

Reply

Marsh Posté le 30-03-2010 à 19:03:23    

en fin , j'ai réussir à  récupérer id_user quant l'utilisateur saisie son login et password quand   il connecté  avec ce code :
 
int id = resultat.getInt("id_user" );
System.out.println("id=" + id);
 
mais comment je le utilsise ici ( dans une autre fenétre java) :
String queryString = "insert into eve (id_user ,id_tpe,date ) values(1,1, '"+h+"')";  
??!!

Reply

Marsh Posté le 31-03-2010 à 10:01:20    

Je ne connais pas le java mais ca devrai etre un truc du genre String queryString = "insert into eve (id_user ,id_tpe,date ) values('"+id+"',1, '"+h+"')";

Reply

Marsh Posté le 31-03-2010 à 11:08:32    

salut  
merci oliiii
hier soir vres 23h j'ai trouve la solution :
 
"insert into eve (id_user ,id_tpe,date ) values('"nom_de class_où_la variable_est_declaré.id+"',1, '"+h+"')";
 

Reply

Sujets relatifs:

Leave a Replay

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