Passage conceptuel logique

[45 minutes]

Modèle UML

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

1
C(#pkA:integer, pkC:integer, att1:string) WITH pkC KEY
2
Ratt2(#fkA=>C(pkA), #att2:string)
3
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

1
A = Union( Projection(C, pkA, att1), Projection(B, PkA, att1) )

Question

Proposez le code SQL2 permettant l'implémentation du modèle relationnel.

Solution

1
CREATE TABLE C (
2
  pkA number PRIMARY KEY,
3
  pkC number UNIQUE NOT NULL,
4
  att1 varchar(50)
5
);
6
7
CREATE TABLE Ratt2 (
8
  fkA number REFERENCES C(pkA),
9
  att2 varchar(50),
10
  PRIMARY KEY (att2, fkA)
11
);
12
13
CREATE TABLE B (
14
  pkA number PRIMARY KEY,
15
  att1 varchar(50),
16
  fkC number REFERENCES C(pkA)
17
);

Question

Proposez le code SQL2 permettant l'implémentation de la vue.

Solution

1
CREATE VIEW A (pkA, att1) AS
2
  SELECT pkA, att1 FROM C
3
  UNION
4
  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

1
Type typA : <pkA:integer, att1:string>
2
Type typListeAtt2 : collection de <string>
3
4
Type typC hérite de typA : <pkC:integer, att2:typListeAtt2>
5
tabC de typC (#pkA, pkC UNIQUE NOT NULL)
6
7
Type typeB hérite de typA : <fkC =>o tabC>
8
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

1
CREATE TYPE typA AS OBJECT (
2
  pkA NUMBER,
3
  att1 VARCHAR(50)
4
) NOT FINAL ;
5
/
6
CREATE TYPE typListeAtt2 AS TABLE OF VARCHAR(50);
7
/
8
CREATE TYPE typC UNDER typA (
9
  pkC NUMBER,
10
  att2 typListeAtt2
11
);
12
/
13
CREATE TYPE typB UNDER typA (
14
  fkC REF typC
15
);
16
/
17
CREATE TABLE tabC OF typC (
18
  PRIMARY KEY (pkA),
19
  pkC NOT NULL,
20
  UNIQUE (pkC)
21
) NESTED TABLE att2 STORE AS nt_tabC_att2;
22
/
23
CREATE TABLE tabB OF typB (
24
  PRIMARY KEY (pkA),
25
  SCOPE FOR (fkC) IS tabC
26
);
27
/