Introducció
Els tres mons
Món | Disseny… (BD) | Enginyeria del Software | Dependència tecnològica | |
Món real | objectes del món real | conceptual | especificació | independent |
Món conceptual | coneixements / informació | |||
Món de les representacions | dades | lògic i físic | disseny | dependent |
Món conceptual
Classes d'objectes: quelcom real, identificable i distingible.
… [FIXME: imatge diagrama UML] …
Món de les representacions
El més obvi seria utilitzar fitxers (i directoris), però aquests no es permeten representar associacions tal com nosaltres volem. Per aquest motiu, neix el concepte de base de dades: un conjunt estructurat de dades que permet representar classes d'objectes i les seves associacions amb integració (sense repeticions) i compartició (molts usuari alhora) de dades.
Evolució:
- Model jeràrquic: arbres (IBM). Tenen el problema que un fill pot tenir només un sol pare.
- Model en xarxa: xarxes.
- Model relacional (1969, Codd): taules.
SGBD (DBMS)
Un sistema gestor de bases de dades (database management system) és un programa complex que facilita la representació de classes d'objectes i les seves associacions i diverses tasques de gestió de dades als programes d'aplicació. Nosaltres utilitzarem el PostgreSQL.
El model relacional
Objectius i origens
Origen: E. F. Codd, 1969.
Primers prototipus: al començament dels anys 80.
Objectius: Facilita que la base de dades sigui percebuda com una estructura lògica independent de l'estructura física, simple i uniforme.
Estructura de les dades
Model relacional | SQL (ANSI) |
Relacions | Taules |
Atributs | Columnes |
Tuples | Files |
Una relació es compon de:
- Esquema de la relació (intensió) (capçalera)
És el nom de la relació i els seus atributs. Per exemple: «estudiants(codi, dni, nom, telèfon)».- Atribut: és el paper o rol que juga un domini en una relació.
- Domini: és un conjunt de valors atòmics. Per exemple: «int», «char(30)», etc.
- Valors nuls: (SQL: NULL) desconegut i inaplicable.
- Extensió de la relació
L'extensió d'una relació d'esquema R(A1, A2, …, An) és un conjunt de tuples Tj=<V11, V12, …, Vn>, on Vij és un valor del domini d'Aj o bé un valor nul.- Tupla: és un element de l'extensió de la relació.
- Grau: és el nombre d'atributs d'una relació.
- Cardinalitat: és el nombre de tuples d'una relació.
Una relació ha de contenir valors atòmics (un sol valor), no hi ha tuples repetides i no hi ha ordre entre les tuples ni entre els atributs.
Superclau: és un subconjunt dels atributs de l'esquema de la relació que identifica les tuples de l'extensió de la relació.
Clau (claus candidates): és una superclau d'una relació que no té cap subconjunt propi que sigui alhora superclau. Es divideixen en la clau primària (la clau candidata que hagi estat escollida) i claus secundàries o alternatives.
Clau forana: subconjunt dels atributs de l'esquema de la relació que referencia una clau primària d'una altre relació o de la pròpia relació.
Regles d’integritat
-
Regla d’integritat d’entitat
Una clau primària d’una relació no pot tenir ni valors nuls ni valors repetits.
-
Regla d’integritat referencial
Els valors d’una clau forana poden ser només valors de la clau primària referenciada o valors nuls.
Polítiques d’actuació en cas d’esborrat o modificació de claus primàries amb claus foranes referenciant-les:
- Restricció: no es permet esborrar o modificar una clau primària referenciada per claus foranes (SQL: RESTRICT / NOACTION).
- Actualització en cascada: en cas d’esborrar o modificar una clau primària referenciada en alguna clau forana, s’esborren o modifiquen totes les referències (SQL: CASCADE).
- Anul·lació: en cas d’esborrar o modificar una clau primària referenciada s’assignen valors nuls a totes les referències (SQL: SET NULL / SET DEFAULT).
-
Regla d’integritat de domini
- Un valor no nul d’un atribut ha de pertànyer al domini de l’atribut.
- Les operacions que es poden aplicar sobre els valors depenen dels dominis dels valors.
Àlgebra relacional
Unió | R=TAULA1∪TAULA2 | uneix tots els resultats de dues taules amb columnes compatibles |
Reanomenament | R=TAULA1{foo->bar, meh->moh} | |
Intersecció | R=T1∩T2 | torna els resultats coincidents de les dues taules |
Diferència | R=T1-T2 | suprimeix els resultats de T1 coincidents en T2 |
Producte cartesià | R=T1xT2 | combina tots els resultats de 2 taules (no compatibles) |
Selecció | R=T1(superfície>16, mòdul=’B2′) | |
Projecció | R=T1[nom, ciutat] | |
Combinació (join) | R=EMPLEATS[despatx=id]DESPATXOS | combina i torna els resultats combinats |
Natural join | R=EMPLEATS[despatx*id]DESPATXOS EMPLATS*DESPATXOS (si les columnes tenen el mateix nom) |
els resultats només contenen «despatx» i no l’«id» duplicat |
Components lògics d’una base de dades
Un esquema, per a un SGBD, és un conjunt definit i relacionat de components de dades i components de control.
CREATE SCHEMA nom_esquema AUTHORIZATION identitat_usuari [llista d'elemens de l'esquema] Esborrat d’esquema: DROP SCHEMA nom_esquema RESTRICT/CASCADE |
Alternativament, en implementacions no estàndards:
CREATE DATABASE CREATE DM |
Connexions
CONNECT TO nom_servidor [AS nom_connexió] [USER ...] DISCONNECT nom_connexió DEFAULT/CURRENT/ALL
Sessió
SET SESSION CHARACTERISTICS AS mode_trans
Transaccions
SET TRANSACTION mode_trans / START TRANSACTION mode_trans: mode d'accés / nivell d'aïllament (READONLY / READ WRITE)
COMMIT: s'accepta tot.
ROLLBACK: no s'accepta res (es desfan els canvis).
Dominis
CREATE DOMAIN ciutats AS CHAR(15) DEFAULT 'BCN' CONSTRAINT ciutats_valides CHECK VALUE IN ('BCN', 'GIR', 'TGN')
Taules
CREATE TABLE empleats( codi_empl INTEGER PRIMARY KEY, nom_empl VARCHAR(30), dni CHAR(8) UNIQUE, sou REAL NOT NULL, data_naix DATE CONSTRAINT naix_impossible CHECK (data_naix >= 01/01/1900), data_jubilacio DATE, ciutat_resid CIUTATS, dept INTEGER DEFAULT 1 REFERENCES departaments(id)
Aquesta última referència també s’hauria pogut especificar al final:
FOREIGN KEY (dept) REFERENCES departaments(id) [ON DELETE ...] [ON UPDATE ...]
Assercions
Ens permeten definir restriccions d’integritat a més d’una taula. Es comproven sempre. SQL:
CREATE ASSERTION nom CHECK (condition)
No estan implementades en cap SBGD, ja que disposen de TRIGGER (disparadors) que permeten la mateixa funcionalitat i són més potents.
Vistes (esquemes externs)
Una vista és una relació (es pot consultar i actualitzar) derivada (no existeix físicament, sinó que és virtual).
CREATE VIEW nom (nom_col1, nom_col2, ...., nom_coln) AS[WITH CHECK OPTION]
Procediments (PL/pgSQL)
CREATE FUNCTION troba_ciutat(dni_ciutat VARCHAR(9)) RETURNS VARCHAR(15) AS $$ DECLARE ciutat_client VARCHAR(15); BEGIN SELECT ciutat INTO ciutat_client FROM empleats WHERE dni=dni_client; RETURN ciutat_client; END; $$LANGUAGE plpgsql;
Disparadors (triggers)
CREATE TRIGGER nom_disparador BEFORE UPDATE ON nom_taula FOR EACH ROW EXECUTE PROCEDUR acció;
Privilegis
GRANT privilegis ON objectes TO usuaris [WITH GRANT OPTION] REVOKE [GRANT OPTION FOR] privilegis ON objects FROM usuaris [CASCADE|RESTRICT] GRANT PUBLIC ...
CREATE ROLE nom; SET ROLE nom;
Traducció de disseny a model relacional
La següent taula resumeix com transformar els elements d’un disseny UML per tal d’implementar-lo com a base de dades en un SGBD:
Model semàntic | Model relacional |
---|---|
Classes d’objectes | Relació |
Associació binària un a molts | Clau forana |
Associació binària un a un | Clau forana |
Associació binària molts a molts | Relació |
Associació unària | Relació |
Associació recursiva | (Igual que les altres) |
Classe associativa | TODO: imatge… |
Transaccions i concurrència
Transaccions
ACID: atomicitat, consistència, «isolació», durabilitat.
Tipus d’interferències entre transaccions:
- actualització perduda (doble actualització)
- lectura no confirmada
- lectura no repetible
- anàlisi inconsistent
- fantasmes
Serialitzabilitat
La teoria de la serialitzabilitat defineix de manera precisa les condicions que s’han de complir per considerar que les transaccions estan aïllades entre si correctament.
…
No comments
© Siegfried-Angel Gevatter Pujals, 2011. |
Permalink |
License |
Post tags: databases, fib, sql, universitat