|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : août 2004 Messages : 61 ![]() |
Bonjour,
Une question de débutant mais bon .... : Dans la cadre d'une relation n:n, j'ai deux tables reliées par une table de jonction contenant deux attributs (les PK de mes 2 tables). Comment faire pour mette à jour cette table lors de l'insertion d'un nouvel enregistrement ? Pour les suppression ou les modifications, cela se fait automatiquement par le biais des clé étrangères, mais quid de l'insertion ? Faut-il faire un trigger, comment ? merci de votre aide |
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Citation:
J'ai une table Employés, une table Projets et une table jonction "travail sur". J'insère des employés puis j'insère des projets et enfin il faut bien que je précise qui travail sur quels projets et pour celà j'insère dans la table "travail sur". |
|
|
|
00
|
|
|
#3 | ||
|
Membre éclairé
![]() |
Tu pourrais éventuellement créer une vue sur tes deux tables (pas la jonction), et un trigger (qui se déclenche au moment ou tu insère des données dans la vue) qui insère les données entrées dans la vue dans la jonction... A moins que ceci sois impossible avec Interbase, mais ça m'étonnerais.
[EDIT]: pas clair, je m'explique. Tu crée une table tb_1, avec deux champ (pk_1 et champ1), tu crée ta deuxième table tb_2 avec deux champ itou (pk_2 et champ2), puis ta table associative (jonction) avec les champs (pk_fk_tb1, pk_fk_tb2). Maintenant, tu crée une vue sur tb_1 et tb_2 ou tu sélectionne pk_1, champ1, pk_2, champ2 avec un where pk_1=pk_fk_tb1 and pk_2=pk_fk_tb2. Au moment ou un utilisateur tentera d'entrer des données dans la vue, le trigger devra se déclencher et entrer comme données dans la table associative new.pk_1 et new.pk_2. plus clair, ou toujours pas asser? [RE-EDIT] Toujours pas? alors tapons dans le code Code :
|
||
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : août 2004 Messages : 61 ![]() |
Ok, merci pour toutes ces explications.
Je vais tenter le coup de la vue. Cette vue permettra-t-elle de voir plusieurs enregistrement de tb2 pour 1 enregistrement de tb1 ?(c'est lobjectif d'une relation n:n) Merci |
|
|
00
|
|
|
#5 | ||
|
Membre éclairé
![]() |
hélas, pas comme je l'ai faite! regarde avec les INNER JOIN, au lieu du WHERE dans la vue. j'ai fait cet exemple à la va vite, désolé...
[TIENS, ENCORE UN EDIT] Code :
A plus! |
||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : août 2004 Messages : 61 ![]() |
Ok super merci pour tout
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Cette solution n'est valable que pour la première jointure (relation 1:1).
Pour reprendre mon exemple Un employé peux travailler sur plusieurs projets Un projet peut etre réalisé par plusieurs employés. On a bien une relation n:n qui va se matérialiser par une table "Travail" qui contient deux clés étrangères (PK_Employé et PK_Projet). La solution de la vue peut fonctionner pour inserer les employés travaillant sur un seul projet et ce projet est réalisé uniquement par cet employé. Si on veux gérer tous les cas de figures celà devient plus compliqué : Nouvel employé, nouveau projet (cas géré par votre vue) Nouvel employé, projet existant. Employé existant, Nouveau projet. Employé existant, projet existant. Gestion du changement d'affectation d'un employé à un projet. Etc... |
|
|
00
|
|
|
#8 |
|
Membre émérite
![]() ![]() |
Salut,
Si je suis à ta place Equus, je creerais une procedure stocké (avec en paramètres les champs des 2 tables reliées) qui va faire les insert dans tes 3 tables. Comme ça c'est plus propre et puis l'insertion dans la table de jointure est transparente au niveau de l'appli client. A+
__________________
On progresse ..... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com