Bonjour,
J'ai la contrainte d'integrité suivante:
La somme des factures pour une commande ne doit pas dépasser le prix de la commande.
Tables:
Comme je débute je souhaiterais savoir si ceci est correct:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Commande (idcom, fraisport, prixtotalcom) Facture (idfacture, datefacture, prixtotalfacture, idlivraisonf, idcomf) avec CREATE TABLE Commande (idcom number(10) NOT NULL, fraisport number(8,2), prixtotalcom number(10,2)); ALTER TABLE Commande ADD CONSTRAINT PK_commande PRIMARY KEY (idcom); et CREATE TABLE Facture (idfacture number(10) NOT NULL, datefacture date, prixtotalfacture number(10,2), idlivraisonf number(10), idcomf number(10)); ALTER TABLE Facture ADD CONSTRAINT PK_facture PRIMARY KEY (idfacture); ALTER TABLE Facture ADD CONSTRAINT FK_facture_idlivraisonf FOREIGN KEY (idlivraisonf) REFERENCES Livraison (idlivraison); ALTER TABLE Facture ADD CONSTRAINT FK_facture_idcomf FOREIGN KEY (idcomf) REFERENCES Commande (idcom);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Create trigger tig1 before insert on Facture for each row declare SomFac number(8,2)); SomInv exception; begin select prixtotalcom into SomFac from Commande where idcom=:new.idcomf; if SELECT SUM(prixtotalfacture) from Facture WHERE idcomf=idcom then raise SomInv; endif; Exception When SomInv then raise_application_error (-20300,'La somme des factures est supérieur à la commande'); When no_data_found then raise_application_error (-20322,'Identifiant de commande inconnue'); end;
Partager