Passage conceptuel logique
[45 minutes]
On pose que l'héritage est exclusif (un B ne peut pas être aussi un C) et que A est une classe abstraite (il n'existe pas de A qui ne soit ni un B ni un C)
Question
Proposez un modèle logique relationnel correspondant au modèle conceptuel UML.
Solution
C(#pkA:integer, pkC:integer, att1:string) WITH pkC KEY
Ratt2(#fkA=>C(pkA), #att2:string)
B(#pkA:integer, att1:string, fkC=>C(pkA))
Question
Si vous avez fait le bon choix de traduction de la relation d'héritage, une des classes du modèle conceptuel ne doit pas apparaître dans le modèle relationnel. Proposez malgré tout l'opération relationnelle qui permet de calculer la vue de cette classe.
Solution
A = Union( Projection(C, pkA, att1), Projection(B, PkA, att1) )
Question
Proposez le code SQL2 permettant l'implémentation du modèle relationnel.
Solution
CREATE TABLE C (
pkA number PRIMARY KEY,
pkC number UNIQUE NOT NULL,
att1 varchar(50)
);
CREATE TABLE Ratt2 (
fkA number REFERENCES C(pkA),
att2 varchar(50),
PRIMARY KEY (att2, fkA)
);
CREATE TABLE B (
pkA number PRIMARY KEY,
att1 varchar(50),
fkC number REFERENCES C(pkA)
);
Question
Proposez le code SQL2 permettant l'implémentation de la vue.
Solution
CREATE VIEW A (pkA, att1) AS
SELECT pkA, att1 FROM C
UNION
SELECT pkA, att1 FROM B;
Question
Proposez un modèle logique relationnel-objet correspondant au modèle conceptuel UML.
On utilisera les OID.
NB : On notera que la création de la vue est identique au cas relationnel, aussi l'on ne s'en préoccupera plus pour la suite de cet exercice.
Solution
Type typA : <pkA:integer, att1:string>
Type typListeAtt2 : collection de <string>
Type typC hérite de typA : <pkC:integer, att2:typListeAtt2>
tabC de typC (#pkA, pkC UNIQUE NOT NULL)
Type typeB hérite de typA : <fkC =>o tabC>
tabB de typB (#pkA)
Question
Proposez le code SQL3 permettant l'implémentation du modèle relationnel-objet.
NB : On utilisera les OID et les collections seront implémentées sous forme de NESTED TABLE.
Solution
CREATE TYPE typA AS OBJECT (
pkA NUMBER,
att1 VARCHAR(50)
) NOT FINAL ;
/
CREATE TYPE typListeAtt2 AS TABLE OF VARCHAR(50);
/
CREATE TYPE typC UNDER typA (
pkC NUMBER,
att2 typListeAtt2
);
/
CREATE TYPE typB UNDER typA (
fkC REF typC
);
/
CREATE TABLE tabC OF typC (
PRIMARY KEY (pkA),
pkC NOT NULL,
UNIQUE (pkC)
) NESTED TABLE att2 STORE AS nt_tabC_att2;
/
CREATE TABLE tabB OF typB (
PRIMARY KEY (pkA),
SCOPE FOR (fkC) IS tabC
);
/