Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/04/2008, 00h33   #1
Invité de passage
 
Inscription : avril 2008
Messages : 1
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 1
Points : 0
Points : 0
Par défaut 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

+++
Stivostin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h24.


 
 
 
 
Partenaires

Hébergement Web