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

    1. Un valor no nul d’un atribut ha de pertànyer al domini de l’atribut.
    2. 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.