Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1499 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Gestion des clefs étrangères (problèmes de réplications)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gestion des clefs étrangères (problèmes de réplications)

n°1494419
skystef2
Posté le 20-12-2006 à 17:27:18  profilanswer
 

Bonjour,
 
J'ai une question sur la propagation des clefs étrangères.
 
J'ai une table t1 avec le schéma suivant :
 
cleprim (clef primaire)
nom
idnote(clef étrangère)
 
et une table t2 :
 
idnote(clef primaire)
clefprim
nom
 
dans T1 clefprim est auto incrémenté et idnote fait référence à idnote de t2
 
Voilà comment je fait pour lier mes deux tables : j'ajoute mes données à t1 puis je sauvegarde nom et clefprim que j'ajoute à t2 (idnote de t2 étant autoincrémentée)
Mais idnote de t2 n'est pas propagé dans t1... il faudrait que je récupère cette valeur et faire un update dans t1.
Ce n'est pas pratique, je n'ai jamais gérer de tables avec clefs étrangères, comment s'y prendre pour plus de facilité ?
 
 
En fait, je n'arrive pas du tout à gérer ma bases avec toutes ces clefs étrangères....  [:whyme]  

mood
Publicité
Posté le 20-12-2006 à 17:27:18  profilanswer
 

n°1494509
MagicBuzz
Posté le 20-12-2006 à 20:00:28  profilanswer
 

pas moyen de faire autrement.
 
a moins que ton SGBD ne supporte les vues capable d'accepter les insert (Oracle et SQL Server le permettent par exemple)

n°1494511
MagicBuzz
Posté le 20-12-2006 à 20:02:36  profilanswer
 

ceci dit, ton modèle me semble chelou à souhait.

n°1494515
MagicBuzz
Posté le 20-12-2006 à 20:07:44  profilanswer
 

-- edit : en fait il faut carrément passer par un trigger sur la vue, ça marche que pour le delete et l'update sinon :)

n°1494521
polo021
Posté le 20-12-2006 à 20:17:55  profilanswer
 

oui un trigger serait bien adapté pour ca

n°1494528
MagicBuzz
Posté le 20-12-2006 à 20:24:16  profilanswer
 

exemple complet (sql server 2005 express) :
 


CREATE TABLE t1 (
 idt1 numeric(18, 0) IDENTITY(1,1) NOT NULL,
 valt1 varchar(50) NOT NULL,
 CONSTRAINT PK_t1 PRIMARY KEY CLUSTERED  
(
 idt1 ASC
));
 
CREATE TABLE t2 (
 idt2 numeric(18, 0) IDENTITY(1,1) NOT NULL,
 refidt1 numeric(18, 0) NOT NULL,
 valt2 varchar(50) NOT NULL,
 CONSTRAINT PK_t2 PRIMARY KEY CLUSTERED  
(
 idt2 ASC
));
 
ALTER TABLE t2 WITH CHECK ADD CONSTRAINT FK_t2_t1 FOREIGN KEY(refidt1) REFERENCES t1 (idt1);
 
go
 
CREATE VIEW v1
WITH SCHEMABINDING, VIEW_METADATA
AS
SELECT     dbo.t1.idt1, dbo.t1.valt1, dbo.t2.valt2
FROM         dbo.t1 INNER JOIN
                      dbo.t2 ON dbo.t2.refidt1 = dbo.t1.idt1;
 
go
 
CREATE trigger [tg_v1_ins] on [v1]
instead of insert
as
    declare @newid as numeric;
begin
    select @newid = t1.idt1 from t1, inserted where t1.valt1 = inserted.valt1;
    if @newid is null
    begin
  insert into t1 (valt1) select valt1 from inserted
        set @newid = scope_identity()
    end
 insert into t2 (refidt1, valt2) select @newid, valt2 from inserted
end;
 
go
 
insert into v1 (valt1, valt2) values ('truc1', 'truc1.1');
insert into v1 (valt1, valt2) values ('truc1', 'truc1.2');
insert into v1 (valt1, valt2) values ('truc2', 'truc2.1');
insert into v1 (valt1, valt2) values ('truc2', 'truc2.2');
 
select * from t1;
 
select * from t2;
 
select * from v1;


 


 
(1 row(s) affected)
 
(1 row(s) affected)
 
(1 row(s) affected)
 
(1 row(s) affected)
 
(1 row(s) affected)
 
(1 row(s) affected)
 
(1 row(s) affected)
 
(1 row(s) affected)
 
(1 row(s) affected)
 
(1 row(s) affected)
idt1                                    valt1
--------------------------------------- --------------------------------------------------
1                                       truc1
2                                       truc2
 
(2 row(s) affected)
 
idt2                                    refidt1                                 valt2
--------------------------------------- --------------------------------------- --------------------------------------------------
1                                       1                                       truc1.1
2                                       1                                       truc1.2
3                                       2                                       truc2.1
4                                       2                                       truc2.2
 
(4 row(s) affected)
 
idt1                                    valt1                                              valt2
--------------------------------------- -------------------------------------------------- --------------------------------------------------
1                                       truc1                                              truc1.1
1                                       truc1                                              truc1.2
2                                       truc2                                              truc2.1
2                                       truc2                                              truc2.2
 
(4 row(s) affected)
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Gestion des clefs étrangères (problèmes de réplications)

 

Sujets relatifs
[xhtml/css]problemes d'affichageGestion des doubles ds affichage DB
PHP-MySQL --> Gestion d'un site multi-langues[PHP/MySQL] [RESOLU] GRANT, Problèmes de droits
Gestion des classes statiques par la JVMProblème avec gestion de frames
[PHP] Gestion de contenu - Site dynamiquegestion d'une liste d'attente ??
Script de Gestion de MAJ[FORTRAN95 / gnuplot] Problemes sous windows
Plus de sujets relatifs à : Gestion des clefs étrangères (problèmes de réplications)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR