|
Invité de passage
Inscription : avril 2008 Messages : 1 Détails du profil  Informations forums : Inscription : avril 2008 Messages : 1 Points : 0 Points : 0
|
Contrainte faisant appel à plusieurs tables
Bonsoir à tous,
Voila, je dois creer pour mon porjet d'info une petite base de donnée sous oracle de 4 qui doivent etre liées entre elles le plus possible et respecter des contraintes complexes. Voila pour ce qui est du sujet gentiment fourni par notre professeur.
De mon coté j'ai choisi comme sujet pour ma base un FAI avec comme entités CLIENT, VILLE, FACTURATION, OFFRE (j'en profite pour donner le shema de ma base)
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
| CREATE TABLE "AACLIENT"
( "NUMC" NUMBER(10,0) NOT NULL ENABLE,
"NOMC" VARCHAR2(20) NOT NULL ENABLE,
"PRENOMC" VARCHAR2(20) NOT NULL ENABLE,
"ADRESSEC" VARCHAR2(60) NOT NULL ENABLE,
"CODEPOSTAL" NUMBER(5,0) NOT NULL ENABLE,
CONSTRAINT "PK_CLIENTS" PRIMARY KEY ("NUMC") ENABLE,
CONSTRAINT "FK_CODEPOSTAL" FOREIGN KEY ("CODEPOSTAL")
REFERENCES "AAVILLE" ("CODEPOSTAL") ENABLE
)
/
CREATE OR REPLACE TRIGGER "TRG_AACLIENT"
BEFORE INSERT
ON aaclient
FOR EACH ROW
BEGIN
SELECT seq_aaclient.NEXTVAL
INTO :NEW.numc
FROM DUAL;
END;
/
ALTER TRIGGER "TRG_AACLIENT" ENABLE
/ |
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
| CREATE TABLE "AAFACTURATION"
( "NUMFACT" NUMBER(10,0) NOT NULL ENABLE,
"NUMC" NUMBER(10,0) NOT NULL ENABLE,
"NUMOFFRE" NUMBER(10,0) NOT NULL ENABLE,
CONSTRAINT "PK_FACTURATION" PRIMARY KEY ("NUMFACT") ENABLE,
CONSTRAINT "FK_NUMC" FOREIGN KEY ("NUMC")
REFERENCES "AACLIENT" ("NUMC") ENABLE,
CONSTRAINT "FK_NUMOFFRE" FOREIGN KEY ("NUMOFFRE")
REFERENCES "AAOFFRE" ("NUMOFFRE") ENABLE
)
/
CREATE OR REPLACE TRIGGER "TRG_AAFACTURATION"
BEFORE INSERT
ON aafacturation
FOR EACH ROW
BEGIN
SELECT seq_aafacturation.NEXTVAL
INTO :NEW.numfact
FROM DUAL;
END;
/
ALTER TRIGGER "TRG_AAFACTURATION" ENABLE
/ |
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
| CREATE TABLE "AAOFFRE"
( "NUMOFFRE" NUMBER(10,0) NOT NULL ENABLE,
"ADSL" VARCHAR2(3) DEFAULT 'oui',
"TV" VARCHAR2(3) DEFAULT 'oui',
"TELEPHONE" VARCHAR2(3) DEFAULT 'oui',
"PRIX" NUMBER(3,0) DEFAULT '20',
"DEGROUPAGE" VARCHAR2(3) DEFAULT 'non' NOT NULL ENABLE,
CONSTRAINT "CK_ADSL" CHECK (Adsl IN('oui','non','yes','no')) ENABLE,
CONSTRAINT "CK_TV" CHECK ( Tv IN('oui','non','yes','no')) ENABLE,
CONSTRAINT "CK_TELEPHONE" CHECK (Telephone IN('oui','non','yes','no')) ENABLE,
CONSTRAINT "PK_OFFRE" PRIMARY KEY ("NUMOFFRE") ENABLE,
CONSTRAINT "CK_OFFRE" CHECK (degroupage IN('oui','non','yes','no')) ENABLE
)
/
CREATE OR REPLACE TRIGGER "TRG_AAOFFRE"
BEFORE INSERT
ON aaoffre
FOR EACH ROW
BEGIN
SELECT seq_aaoffre.NEXTVAL
INTO :NEW.numoffre
FROM DUAL;
END;
/
ALTER TRIGGER "TRG_AAOFFRE" ENABLE
/ |
Code :
1 2 3 4 5 6 7 8
| CREATE TABLE "AAVILLE"
( "CODEPOSTAL" NUMBER(5,0) NOT NULL ENABLE,
"NOMVILLE" VARCHAR2(20) NOT NULL ENABLE,
"DEGROUPEE" VARCHAR2(3) DEFAULT 'non' NOT NULL ENABLE,
CONSTRAINT "PK_VILLE" PRIMARY KEY ("CODEPOSTAL") ENABLE,
CONSTRAINT "CK_DEGROUPEE" CHECK (degroupee IN('oui','non','yes','no')) ENABLE
)
/ |
Il y a donc, des villes degroupée, d'autres pas, et des offre accessible aux gens habitant en ville degroupées et d'autres accessible a tous (degroupé ou non)
Ce que je cherche a faire, c'est de creer une contrainte interdisant l'ajout d'un client (dans la table facturation) avec une offre degroupée si ce client n'habite pas dans une ville degroupée.
D'apres ce que je compris on ne peut pas mettre une contrainte dans une table faisant appel a d'autre table : du genre
Code :
ck_degroupe CHECK(ville.degroupee = offre.degroupage
Je me suis renseigné un peu partout et j'ai cru comprendre qu'un trigger bien pensé pourrait resoudre mon soucis. Mais j'avoue ne pas avoir abouti pour le moment malgré mes tentatives de creation de trigger.
Ainsi, si vous avez une piste ou une idée... je suis prenneur.
Merci
+++
|