Modello relazionale

Alcune definizioni

Schema di relazione

Coppia formata da un nome di relazione R e da un tipo relazione definito come segue:

  • int, real, boolean, string... sono tipi primitivi
  • se T1...Tn sono tipi primitivi e A1...An sono etichette distinte, dette attributi, allora (A1:T1...AnTn) è un tipo ennupla di grado n. Due tipi ennupla sono uguali se hanno uguale il grado, gli attributi e il tipo degli attributi con lo stesso nome. (l'ordine non è significativo)
  • se T è un tipo ennupla, allora {T} è un tipo insieme di ennuple o tipo relazione. Due tipi relazione sono uguali se hanno lo stesso tipo ennupla.

Schema relazionale

Uno schema relazionale è costituito da un insieme di schemi di relazione e da un insieme di vincoli di integrità relativi a tali schemi.

Ennupla

Un'ennupla è un insieme di coppie (Ai,Vi) di attributi e valori con Vi di tipo Ti.
Un'istanza dello schema è un insieme finito di ennuple.
La cardinalità di uno schema è il numero delle sue ennuple.
Un'istanza di uno schema relazionale è formata da un'istanza di ciascuno dei suoi schemi di relazione.
Infine, si denota dom(Ai) l'insieme dei valori che può assumere un attributo Ai e adom(Ai) l'insieme dei valori presenti per Ai nello schema.

Vincoli di integrità

I tre vincoli di integrità principali sono:

  • NULL
  • PK
  • FK

Il valore NULL, applicabile a qualunque attributo indipendentemente dal tipo, indica che non è possibile consocere il valore dell'attributo nell'ennupla.
Il valore NULL non ha significato di valore presente e nullo, ma proprio di valore assente (NULL è diverso da una stringa vuota o dal numero zero!)

La superchiave è un insieme di attributi il cui valore individua univocamente un'ennupla.
Una chiave è una superchiave minimale, nel senso che eliminando uno degli attributi la chiave non è più superchiave e non identifica più un'ennupla univocamente.
La chiave primaria è una delle superchiavi (di solito quella con il numero minore di attributi), i cui attributi non possono essere NULL.

La chiave esterna è un insieme di attributi che si riferisce a una chiave primaria di uno schema di relazione. L'uso di chiavi esterne riferite a chiavi primarie sta alla base della definizione delle relazioni uno a molti.

La rappresentazione grafica di una relazione tra una FK (foreign key, chiave esterna) e una PK (primary key, chiave primaria) è denotata da una freccia che punta alla chiave primaria ed è etichettata con il noem della chiave esterna.

Trasformazione di un modello a oggetti in un modello relazionale

La trasformazione avviene tramite sei passi, tre sulle relazioni, tre sugli attributi, eseguibili meccanicamente:

  1. R Rappresentare le relazioni 1-n e 1-1
  2. R Rappresentare le relazioni n-m e non binarie
  3. R Rappresentare le gerarchie di inclusione
  4. A Identificare le PK
  5. A Rappresentare gli attributi multivalore
  6. A Appiattire gli attributi composti

In questo contesto NON è considerato alcun aspetto relativo all'ottimizzazione delle prestazioni.

Rappresentazione delle relazioni 1-n e 1-1

Per esprimere una relazione 1-1 o 1-n aggiungere una chiave esterna a una delle relazioni.
Graficamente, la relazione ←→ e la relazione ↞→ sono espresse come -→ (la doppia freccia è rivolta verso il "molti" della relazione).
Quando la relazione include degli attributi propri, questi sono spostati dentro la tabella "molti", cioè quella dotata di FK.

Se è aggiunto alla FK un vincolo «not null» si impone un vincolo di totalità dell'inversa: non è possibile inserire ennuple che per quell'attributo abbiano un valore NULL o non compreso tra adom della PK della relazione a cui si riferisce.

Se è aggiunto anche un vincolo di «PK» alla FK, la relazione si intende 1-1 (univocità dell'inversa e totalità della diretta).

Rappresentazione delle relazioni n-m

Per rappresentare una relazione n-m, ↞↠, è necessario introdurre una nuova relazione contenente una coppia di FK, la cui PK è costituita dall'insieme di tutti gli attributi che costituiscono le FK.

Gerarchie tra classi

Per rappresentare una gerarchia tra classi è possibile optare per uno tra:

  • Relazione unica: tutti gli attributi, anche quelli specializzati, sono racchiusi in un'unica relazione e possono assumere valori NULL
  • Partizionamento verticale: sono definite tre relazioni; la prima contiene tutti gli elementi con tutti gli attributi in comune, la seconda e la terza contengono solo gli attributi specializzati e un riferimento tramite FK all'elemento della prima corrispondente.
  • Partizionamento orizzontale: sono definite solo due relazioni specializzate, con l'eventuale duplicazione degli attributi comuni.

Esempio:
A = Relazione Veicoli, con attributo Targa: String «NOT NULL»
B = Relazione Auto, con attributo Colore: String
C = Relazione Camion, con attributo Peso: int

Con Relazione Unica si crea una relazione Veicoli con attributi Targa, Colore, Peso.
So già che è valorizzato O l'attributo colore O l'attributo Peso, mai entrambi.

Con Partizionamento Verticale si creano tre relazioni e si aggiunge un attributo Targa «FK(Veicoli)»«NOT NULL»

Con Partizionamento Orizzontale si creano due relazioni e in ciascuna è presente l'attributo Targa.

Chiavi primarie

A meno che non sia definito in maniera esplicita (es. "...attributo nome univoco...") o semi-implicita (es. codice fiscale, targa o altri attributi che nel mondo reale nascono per fare da PK) la chiave primaria è definita come un ulteriore attributo, solitamente con nome ID, di tipo numerico, ovviamente con il vincolo di «PK» e - anche se non va indicato nello schema - assegnato dal sistema (vari sistemi lo chiamano auto_increment, sequence, identity, contatore...).

Nelle gerarchie con partizionamento la PK deve essere identica tra le varie relazioni.

Nelle relazioni che corrispondono ad associazioni molti a molti la PK è l'insieme delle FK.

Proprietà multivalore

La proprietà multivalore è trasformata in una relazione dotata di chiave esterna e valore.

Attributi composti

Un attributo composto si traduce in un elenco di attributi.