You are on page 1of 20

ÍNDEX

1. ENUNCIAT
2. DISSENY CONCEPTUAL: MODEL ENTITAT / RELACIÓ
3. TRANSACCIONS
4. DISSENY LÒGIC
5. NOTACIÓ UML
6. FORMES NORMALS

1
Es desitja realitzar una base de dades per a la gestió del
trànsit aeri a un aeroport. Per això cal tenir informació de totes i
cadascuna de les companyies que operen, per a poder coordinar
els vols.

De cadascuna de les companyies hem de saber el nom, l’adreça de


la seu, el telèfon, un e-mail de contacte i un codi de companyia.

Per a la seguretat dels vols, s’ha de tenir un registre de tots els


empleats de les companyies que s’enlairaran amb la següent
informació: DNI, cognoms i nom, data de naixement, la categoria a
la qual pertanyen i la companyia a la qual treballen.

Cada empleat només pot tenir assignat un únic codi de categoria,


mentre que cada categoria pot tenir més d’un empleat. Cada codi
representa un rang determinat que identifica la tasca a realitzar de
cada empleat durant el viatge. L’1 serà per als empleats pilots, el 2
per als copilots, i el 3 per als hostes.

Cada tripulació està formada per un pilot, un copilot i quatre hostes,


a més a més, cada companyia compta amb els seus propis avions,
dels que cal conservar informació relacionada amb el codi de l’avió,
el codi de la companyia, el tipus d’avió, el nombre de seients i data
de l’ última revisió.

A cada tripulació se li assigna un avió per a volar en un vol. Els vols


poden ser directes o amb escala. En cas que siguen amb escala
haurà d’ indicar- se la ciutat de la primera parada o de les
successives parades, que no excediran dels trenta minuts. Tot i fer
escala, la tripulació i l’avió seran sempre els mateixos.

De cada vol s’haurà de tenir informació sobre l’origen, l’hora


d’eixida, el destí, l’hora d’arribada, l’avió i la tripulació que realitzarà
el vol.

2
cod_companyia

cod_companyia

1 1

COMPANYIA

Treballe
n

cod_categoria
N DNI_empleat

EMPLEATS tene CATEGORIA


N n 1
Posse
eix
N

Forme
n

cod_tripulació
N
M
cod_avió
AVIÓ
TRIPULACIÓ

PILOT
A
M N

1 cod_vol

cod_tripulació, cod_avió

VOL
N destí

origen
Vole
n
T,
D

AMB ESCALA DIRECTE


3
R1: Rang de categories: 1  pilot, 2  copilot, 3  hostes.

R2: Cada tripulació està formada per un pilot, un copilot i quatre


hostes.

R3: Una tripulació ha pilotar un avió de la seua mateixa companyia.

R4: Una tripulació ha d’ estar formada per empleats de la mateixa


companyia.

4
COMPANYIA: (cod_companyia, nom, adreça, telèfon, email)
CP {cod_companyia}

EMPLEATS: (DNI_empleat, cognoms_i_nom, data_naixement, cod_categoria,


cod_companyia)
CP {dni_empleat}
CA{cod_categoria}  CATEGORIA
CA {cod_companyia}  COMPANYIA
VNN {cod_companyia, cod_categoria }

CATEGORIA: (cod_categoria, descripció )


CP{cod_categoria}

TRIPULACIÓ: (cod_tripulació, nom_tripulació)


CP{cod_tripulació}

PILOTA: (cod_tripulació, cod_avió)


CP {cod_tripulació, cod_avió}
CA {cod_tripulació}  TRIPULACIÓ
CA {cod_avió}  AVIÓ

AVIÓ: (cod_avió, cod_companyia, model, num_seients, data_última_revisió)


CP {cod_avió}
CA {cod_companyia}  COMPANYIA
VNN { cod_companyia}

VOL: (cod_vol, origen, destí, data, hora_eixida, hora_arribada, cod_tripulació,


cod_avió)
CP {cod_vol}
CA {cod_tripulació, cod_avió}  PILOTA
VNN {cod_tripulació, cod_avió}
VNN { origen, destí}

DIRECTE: (cod_vol, origen, destí, data, hora_eixida, hora_arribada,


cod_tripulació, cod_avió)
CP {cod_vol}
CA {cod_vol}  VOL

AMB ESCALA: (cod_vol, origen, destí, data, hora_eixida, hora_arribada,


cod_tripulació, cod_avió, ciutat_primera_parada, ciutat_segona_parada,
ciutat_n_parada)
CP {cod_vol}
CA {cod_vol}  VOL
VNN {ciutat_primera_parada}

5
FORMEN: (dni_empleat, cod_tripulació)
CP{dni_empleat, cod_tripulació}
CA{cod_tripulació}  TRIPULACIÓ
CA{dni_empleat}  EMPLEAT
VNN { dni_empleat}
VNN {cod_tripulació}

Nota: S’ ha trobat oportú representar el nom de l’ entitat amb majúscules i


negreta. Els atributs apareixen entre parèntesi, les claus principals es
distingeixen mitjançant un subratllat i les alienes es representen en cursiva.
Igualment passa amb les relacions d’ M:N i 1:1, que correspondran al mateix
patró.

6
DISSENY LÒGIC

Entre l’ entitat COMPANYIA i EMPLEAT, hem pensat establir una relació binària
amb una restricció d’ existència sobre l’ entitat de cardinalitat màxima N
(EMPLEAT); doncs cal que cada empleat estiga identificat amb la companyia
on treballa. Si no fos així, seria possible que el codi de la companyia no
constara i, per tant no podria identificar-se correctament l’ empleat. Per això, cal
definir una restricció de valor no nul (VNN) sobre la clau aliena d’ EMPLEAT
perquè represente la relació binària “treballen”. D’ aquesta manera s’ eviten
problemes d’ identificació dels empleats de cada companyia.

COMPANYIA treballen
1 N
EMPLEATS

COMPANYIA: (cod_companyia, nom, adreça, telèfon, email)


CP {cod_companyia}

EMPLEATS: (DNI_empleat, cognoms_i_nom, data_naixement, cod_categoria,


cod_companyia)
CP {dni_empleat}
CA{cod_categoria}  CATEGORIA
CA {cod_companyia}  COMPANYIA
VNN {cod_companyia}
VNN { cod_categoria }

Igualment trobem la disposició de la relació entre COMPANYIA i AVIÓ. És


necessari definir VNN la clau aliena cod_companyia sobre l’ entitat AVIÓ per
que quede clara la pertinença de l’ avió a una companyia determinada i la
responsabilitat d’ aquesta en portar actualitzades totes les revisions de l’
aparell, si escau.

COMPANYIA
posseeix AVIÓ
1 N

COMPANYIA: (cod_companyia, nom, adreça, telèfon, email)


CP {cod_companyia}

AVIÓ: (cod_avió, cod_companyia, model, num_seients, data_última_revisió)


CP {cod_avió}
CA {cod_companyia}  COMPANYIA
VNN { cod_companyia}
El mateix cas trobem entre les entitats CATEGORIA i EMPLEATS. Com diu l’
enunciat: “ Cada empleat només pot tenir assignat un únic codi de categoria,
mentre que cada categoria pot tenir més d’un empleat”. La relació és igualment
binària amb una restricció d’ existència sobre l’ entitat EMPLEAT, que és qui té
cardinalitat N. Per tant, caldrà definir-hi la clau aliena cod_categoria com un
VNN.

EMPLEATS CATEGORIA
tenen

N 1

CATEGORIA: (cod_categoria, descripció )


CP{cod_categoria}

EMPLEATS: (DNI_empleat, cognoms_i_nom, data_naixement, cod_categoria,


cod_companyia)
CP {dni_empleat}
CA{cod_categoria}  CATEGORIA
CA {cod_companyia}  COMPANYIA
VNN {cod_companyia}
VNN { cod_categoria }

La cardinalitat entre EMPLEATS i TRIPULACIÓ és N:M. N empleats formen


part d’ una tripulació a la vegada que un empleat pot formar part de M
tripulacions. En aquest cas, degut que la cardinalitat màxima és M:N, és
necessari la representació de la relació binària FORMEN mitjançant una
relació independent. La CP d’ aquesta relació serà (DNI_empleat,
cod_tripulació) ja que és l’ únic conjunt d’ atributs de la relació que satisfà les
condicions exigides a una clau primària.

EMPLEATS TRIPULACIÓ
formen

N M

EMPLEATS: (DNI_empleat, cognoms_i_nom, data_naixement, cod_categoria,


cod_companyia)
CP {dni_empleat}
CA{cod_categoria}  CATEGORIA
CA {cod_companyia}  COMPANYIA
VNN {cod_companyia}
VNN { cod_categoria }

8
TRIPULACIÓ: (cod_tripulació, nom_tripulació)
CP{cod_tripulació}

FORMEN: (dni_empleat, cod_tripulació)


CP{dni_empleat, cod_tripulació}
CA{cod_tripulació}  TRIPULACIÓ
CA{dni_empleat}  EMPLEAT

Com cada tripulació necessita un avió per enlairar-se i efectuar un vol.


Aleshores, serà necessari efectuar una agregació en la que participen
TRIPULACIÓ i AVIÓ. La relació encarregada de representar l’ objecte agregat
és PILOTA, ja que expressa que una ocurrència d’ AVIÓ i TRIPULACIÓ estan
associades en aquest cas, per a fer un vol.

N N

TRIPULACIÓ AVIÓ
PILOTA

volen

VOL

Per relacionar VOL amb l’ objecte agregat, s’ ha optat la cardinalitat 1:N.


Tripulació + Avió han de fer N vols al dia. Com existeix una restricció, és
necessari declarar VNN la clau aliena {cod_tripulació, cod_avió} en VOL.

AVIÓ: (cod_avió, cod_companyia, model, num_seients, data_última_revisió)


CP {cod_avió}
CA {cod_companyia}  COMPANYIA
VNN { cod_companyia}

9
TRIPULACIÓ: (cod_tripulació, nom_tripulació)
CP{cod_tripulació}

PILOTA: (cod_tripulació, cod_avió)


CP {cod_tripulació, cod_avió}
CA {cod_tripulació}  TRIPULACIÓ
CA {cod_avió}  AVIÓ

VOL: (cod_vol, origen, destí, data, hora_eixida, hora_arribada, cod_tripulació,


cod_avió)
CP {cod_vol}
CA {cod_tripulació, cod_avió}  PILOTA
VNN {cod_tripulació, cod_avió}
VNN { origen, destí}

Finalment, la BD compta amb una especialització, que consisteix en diferenciar


els vols amb escala o sense escala. Tota ocurrència de l’ entitat general VOL ha
de correspondre a una, i només una de les entitats especialitzades (DIRECTE
o AMB_ESCALA). Per tant, cal que l’ especialització siga total (el vol ha de ser
almenys d’ una classe o d’ altra) i disjunta (tota ocurrència ha correspondre a
alguna com a molt de les entitats especialitzades).

VOL

TD

DIRECTE AMB_ESCALA

10
VOL: (cod_vol, origen, destí, data, hora_eixida, hora_arribada, cod_tripulació,
cod_avió)
CP {cod_vol}
CA {cod_tripulació, cod_avió}  PILOTA
VNN {cod_tripulació, cod_avió}
VNN { origen, destí}

DIRECTE: (cod_vol, origen, destí, data, hora_eixida, hora_arribada,


cod_tripulació, cod_avió)
CP {cod_vol}
CA {cod_vol}  VOL

AMB ESCALA: (cod_vol, origen, destí, data, hora_eixida, hora_arribada,


cod_tripulació, cod_avió, ciutat_primera_parada, ciutat_segona_parada,
ciutat_n_parada)
CP {cod_vol}
CA {cod_vol}  VOL
VNN {ciutat_primera_parada}

Com veiem, les subclasses hereten tots els atributs de la classe VOL.
Recordem que una subclasse no pot tenir un atribut CP que l’ identifique, però
sí tots aquells necessaris per identificar correctament la informació continguda.
En aquest cas AMB_ESCALA compta amb atributs relacionats amb les ciutats
on pot realitzar les diferents parades, essent la primera (mínim del número de
parades en escala possible) un VNN.

11
TRANSACCIONS

TRANSACCIÓ alta_entitat_empleat (dx:dom_dni, nx:dom_cognoms_i_nom,


dtx: dom_data_naixement, cx: dom_cod_categoria, ccx: dom_cod_companyia)
VARIABLES Ex: EMPLEAT
INICI_TRANSACCIÓ
Ins_entitat EMPLEAT atributs dni  dx, cognoms_i_nom  nx,
data_naixement  dt, cod_categoria  cx, cod_companyia  ccx;
FI_TRANSACCIÓ

TRANSACCIÓ esborrar_vols_anteriors_25_abril_2006 (cx: dom_cod_vol, dx:


dom_data)
VARIABLES Vx: VOL
INICI_TRANSACCIÓ
Bor_entitat VOL on Vx.data = dx < 25/04/2006;
FI_TRANSACCIÓ

TRANSACCIÓ alta_vol_amb_escala (cx: dom_cod_vol, ox: dom_origen, o1x:


dom_origen, o2x: dom_origen, dx: dom_desti, d1x: dom_destí, d2x: dom_desti,
fx: dom_data, hx: dom_eixida, h1x: dom_eixida, h2x: dom_eixida, ax:
dom_arribada, a1x: dom_arribada, a2x: dom_arribada, tx: cod_tripulació, vx:
dom_cod_avió)
INICI_TRANSACCIÓ
INSERT INTO AMB_ESCALA (cod_vol, origen, origen1, origen2, destí,
destí1, destí2, data, eixida, eixida1, eixida2, arribada, arribada1, arribada2,
tripulació, cod_avió)
VALUES cx, ox, o1x, o2x, dx, d1x, d2x, fx, hx, h1x, h2x, ax, a1x, a2x, tx,
vx;
FI_TRANSACCIÓ

TRANSACCIÓ canviar_número_de_seients_avió (ax:cod_avió,sx:num_seients)


VARIABLES (Ax: AVIÓ)
INICI_TRANSACCIÓ
Mod_entitat AVIÓ on Ax.ax = 0023 atributs sx sx + 25;
FI_TRANSACCIÓ

12
13
DISSENY FÍSIC

Nota. Per a cadascuna de les relacions, s’ inclouran tres característiques:


ocurrències, en centenars (k-ocur), tamany de cada tupla en octets, i
creixement anual esperat (en percentatge).

COMPANYIA: (cod_companyia, nom, adreça, telèfon, email)


CP {cod_companyia}

/* Conté informació de cadascuna de les companyies que operen a l’ aeroport*/


0.5 K-ocur/ 30 oct/ 4% (despreciable)

EMPLEATS: (DNI_empleat, cognoms_i_nom, data_naixement, cod_categoria,


cod_companyia)
CP {dni_empleat}
CA{cod_categoria}  CATEGORIA
CA {cod_companyia}  COMPANYIA
VNN {cod_companyia, cod_categoria }

/* Conté informació de cadascun dels empleats de les companyies*/


200 K-ocur/ 40 oct/ 10%

CATEGORIA: (cod_categoria, descripció )


CP{cod_categoria}
/* Conté informació de cadascuna de les categories que tenen assignades els
empleats que tripulen un avió per a efectuar un vol*/
0.5 K-ocur/ 15 oct/ 2% (despreciable)

FORMEN: (dni_empleat, cod_tripulació)


CP{dni_empleat, cod_tripulació}
CA{cod_tripulació}  TRIPULACIÓ
CA{dni_empleat}  EMPLEAT
VNN { dni_empleat}
VNN {cod_tripulació}

/* Combinacions d’ empleats possibles per a fer tripulacions*/


40 K-ocur/ 50 oct/ 30%

TRIPULACIÓ: (cod_tripulació, nom_tripulació)


CP{cod_tripulació}

/*Identifica el nom de la tripulació amb un nom i un codi necessaris per poder


relacionar-se amb un avió per a enlairar-se*/
30 K-ocur/ 20 oct/ 5%

14
PILOTA: (cod_tripulació, cod_avió)
CP {cod_tripulació, cod_avió}
CA {cod_tripulació}  TRIPULACIÓ
CA {cod_avió}  AVIÓ

/*Relació de tripulació + avió que realitzaran un vol*/


90 K-ocur/ 150 oct/ 20%

AVIÓ: (cod_avió, cod_companyia, model, num_seients, data_última_revisió)


CP {cod_avió}
CA {cod_companyia}  COMPANYIA
VNN { cod_companyia}

/*Identifica la informació de l’ avió amb un codi necessari per poder relacionar-


se amb la tripulació que el conduirà*/
30 K-ocur/ 20 oct/ 20%

VOL: (cod_vol, origen, destí, data, hora_eixida, hora_arribada, cod_tripulació,


cod_avió)
CP {cod_vol}
CA {cod_tripulació, cod_avió}  PILOTA
VNN {cod_tripulació, cod_avió}
VNN { origen, destí}

/*Cadascun dels vols que realitzen les companyies*/


40 K-ocur/ 30 oct/ 25%

Transaccions. A continuació es representen les transaccions més importants


que es fan sobre la BD identificades mitjançant un codi, freqüència en la que es
solen fer en un determinat temps i la descripció.

Codi Freqüència Descripció


Transferència
T1 6 Donar d’ Alta/Baixa un empleat
T2 30 Donar d’ Alta un vol
T3 25 Cercar el nom de tripulació i components.
T4 20 Cercar destins d’ una determinada tripulació
projectats per a una data concreta.
T5 10 Actualitzar dates de revisions dels avions
T6 5 Esborrar vols anteriors a una data
determinada

15
Perfil de càrrega per a cada relació:

Codi_T Freq Empleat Formen Tripulació Pilota Vol Avió


C M C M C M C M C M C M
T1 6 2
T2 30 6 5 1
T3 25 3 6 5
T4 20 4 8
T5 10 1 3
T6 5 8
TOTAL 75 12 150 205 190 160 190
60

Anàlisi de les relacions:

EMPLEAT
• La modificació en altes i baixes dels empleats es fa per cognoms_i_nom.
Convindria crear un índex d’ agrupament a fi de recuperar les dades que
es trobaran ordenades sobre aquest atribut.
• Per a l’ assignació a un fitxer, convindrà previndre un espai de
creixement d’ un 10% anual.

FORMEN

• Relació consultada principalment per EMPLEAT (75) i TRIPULACIÓ


(125) a la T3. En aquest cas, la CP de FORMEN és el conjunt constituït
per la CP d’ EMPLEATS i la CP de TRIPULACIÓ. Per tant, s’ accedeix
per DNI_empleat, cod_tripulació. Seria recomanable assignar un índex
secundari.
• Per a l’ assignació a un fitxer, convindrà previndre un espai de
creixement d’ un 30% anual.

TRIPULACIÓ

• Es consulta per cod_tripulació. En aquest cas, s’ ha considerat ordenar i


definir un índex primari sobre la CP (cod_tripulació).
• Es previndrà un espai de creixement d’ un 5% anual.

PILOTA

• Relacionada amb VOL per donar alta d’ un vol, és necessari emprar el


cas dels “clusters” o agrupacions de relacions. Quan dues relacions
tenen ambdós atributs mitjançant els quals és habitual realitzar
concatenacions, moltes vegades és convenient guardar físicament al
mateix bloc les tuples d’ ambdues relacions.
• Es previndrà un espai de creixement d’ un 20% anual.

16
AVIÓ

• La modificació de les dates de revisió és convenient ordenar per l’ atribut


CP d’ avió. Per tant, és convenient crear un índex primari (ja que aquest
atribut és clau).

• Es previndrà un espai de creixement d’ un 20% anual.

VOL

• És l’ entitat sobre la qual es fa tant un gran nombre de consultes com


modificacions. Caldrà realitzar unes agrupacions de relacions, tal com
hem vist anteriorment sobre l’ entitat PILOTA.
• Per a l’ assignació a un fitxer, convindrà previndre un espai de
creixement d’ un 10% anual.

17
Atenent el diagrama de dependències funcionals proposat, la primera forma
normal: 1FN, ens diu que: “Una relació R està en 1FN només si els seus
atributs poden tenir valors atòmics (simples i indivisibles)”. Per tant, està
prohibit tenir un conjunt de valors, una tupla de valors o una combinació
d’ambdós com a valor d’un atribut per a una tupla individual. Aleshores, com
podem veure al diagrama, T1 té un atribut (direcció) que consta de diversos
valors (amb dominis diferents), si escau.
T1 (Num_matr, nombre, dirección)
• Dom_num_matr: enter
• Dom_nom: cad(40)

A continuació es desglossen els atributs de que consta “direcció”, amb els


dominis corresponents:

• Dom_tipus_via: cad (10)


• Dom_nom_via: cad (30)
• Dom_numero: enter
• Dom_cod_postal: enter

Per tant, T1, quedaria de la següent forma:

T1 (num_matr, nom, tipus_via, nom_via, numero, cod_postal)

T1 representa la informació del nom, tipus de via, nom de la via, número del
habitatge i codi postal de la persona que sol·licita una matrícula (ALUMNE). El
codi num_matr representa unívocament totes les seves dades (CP).

Seguidament es representa una segona R que ja consta en 1FN,

T2 (cod_asig, nom_asig, crèdits, centre, títol)


Aquesta R representa informació sobre el nom, nº crèdits, centre on s’imparteix
i titulació a la que pertany l’assignatura.

S’ha de tenir en compte que, una persona pot matricular-se en vàries


assignatures, i que vàries persones poden matricular-se a una mateixa
assignatura. Com es pot veure al diagrama funcional, aquestes dues entitats en
formen una nova de la qual depèn un atribut anomenat “nota”.

T3 quedaria de la següent manera: T3 (cod_asig, num_matr, nota)

Com podem observar, l’aplicació de la 1FN no és del tot acceptable perquè no


acaba de resoldre tots els problemes que es poden donar al sistema en quant a
la inserció, modificació i esborrat de dades que influeixen en la redundància de
la informació. Per tant es imprescindible que T3 exerceixca com una R
independent per a evitar aquests problemes.

Definirem T3 amb el nom de “Es_matricula”.

18
La 3FN ens diu que cal que evitem les dependències transitives. Si observem
T2 (assignatura) trobem els atributs “centre” i “títol”. Al diagrama de
dependències observem que “títol” depèn funcionalment de “centre”. Aleshores
per a evitar aquesta dependència transitiva, caldrà crear una nova T4
anomenada TÍTOL que conste d’un codi unívoc i un nom.
T4 TÍTOL(cod_titol, nom)
I una segona T5 que identifique també el centre per a evitar futures
incongruències.
T5 CENTRE (cod_centre, nom_centre)

Finalment caldrà canviar els atributs “títol” i “centre” pel codi que els identifique
unívocament a la T2, i transformar-les en claus alienes que referencien a T4 i
T5 respectivament.

El resultat d’allò plantejat és:

T1:ALUMNE (Num_matr, nom, tipus via, nom_via, numero, cod_postal)


CP{num_matr}

T2: ASSIGNATURA (cod_assig, nom_assig, crèdits, cod_títol, cod_centre)


CP{cod_assig}
CA{cod_títol}  TÍTOL
CA{cod_centre}  CENTRE
VNN {cod_títol, cod_centre}

T3: ES MATRICULA (num_matr, cod_assig, nota)


CP{num_matr, cod_assig}
CA{num_matr}  ALUMNE
CA{cod_assig}  ASSIGNATURA

T4: TÍTOL (cod_títol, nom_títol)


CP{cod_títol}

T5: CENTRE (cod_centre, nom_centre)


CP{cod_centre}

19
ALUMNE (Num_matr, nom, tipus_via, nom_via, numero, cod_postal)

ASSIGNATURA (codi_assignatura, nom_assignatura, crèdits, cod_títol,


cod_centre)

ES_MATRICULA (Num_matr, cod_assig, nota)

TÍTOL (cod_títol, nom_títol)

CENTRE (cod_centre, nom_centre)

20

You might also like