Data-base

Data-base

Jimmy Pino


Entity-relation model

Nel modello entity-relation tutti i dati che compongono il DB sono organizzati attraverso relazioni tra le tabelle che rappresentano i dati. Ogni tabella deve essere organizzata in maniera efficiente: non devono esserci dati ridondanti, è preferibile non dover gestire campi vuoti all'interno di una tabella. Il software per la gestione di un database di tipo relazionale è il RDBMS (Relational Data Base Management System) che permette di gestire i dati archiviati creandone dei nuovi, cancellandoli o modificando le tabelle; permette un accesso contemporaneo da parte di più utenti.

Tabelle

Le tabelle sono formate, banalmente, da righe e colonne che rappresentano rispettivamente un pattern di dati (anche detti record )e i campi (gli attributi). In ogni tabella sono presenti le keys, tuple "speciali" di campi che seguono i principi di unicità, cioè non possono esistere due righe con chiavi uguali, e di minimalità, cioé togliendo un attributo a una key perde la sua unicità, in altre parole deve essere composta dai campi strettamente necessari per essere unica. Si suddividono ulteriormente in primary e foreign key. Le chiavi primarie descrivono univocamente ogni riga della tabella (ad esempio una buona primary key, in una tabella Idgiocatori-gol è il codice fiscale di ogni giocatore come id del giocatore, per definizione è univoco tra tutte le persone censite). Le foreign sono invece campi di una tabella che contengono una copia di una chiave che è primaria per un'altra tabella. In un database è necessario collegare i dati e quindi creare un sistema di tabelle interconnesse. Nel modello entity-relation sussistono tre tipi di relazioni tra tabelle: 1:1, 1:N, N:N.
Considerando due tabelle A e B con le rispettive primary keys, queste sono in relazione 1:1 se a ogni riga (a ogni record) di A posso collegare una riga di B e viceversa; con "collegare due tabelle" è inteso inserire in corrispondenza della primary key di A la primary keys di B alla quale è collegata, a questo punto se considero come riferimento la tabella A (primary table), questa avrà in aggiunta una colonna con le foreign key corrispondenti della tabella B ( nota: per la tabella B tali chiavi sono "principali" ).

ESEMPIO: tabella A = IDprof-NomeProf; tabella B = IDcorso-NomeCorso
primary keys di A: IDprof; primary keys di B = IDcorso
Voglio creare una tabella del tipo IDProf-NomeProf-IDcorso, aggiungendo una colonna alla tabella A. Se suppongo che ogni prof sia assegnato a un unico corso, a ogni campo IDprof corrisponde un solo campo IDcorso, cioé le tabelle sono collegate in relazione 1:1 e la primary kery "IDcorso" diventa foreign key della tabella A.

Si parla di relazione 1:N quando a ogni campo della tabella A può essere associato più di una riga nella tabella B, ma non vale il viceversa, cioé ogni riga di B è collegata a un solo elemento della tabella A (questo non significa che a due elementi di B non posso collegare lo stesso elemento di A).

ESEMPIO: tabelle come nell'esempio precedente, ma supponiamo che ogni prof è il docente di più di un corso, ma ogni corso è tenuto da un solo docente. Sarebbe sconveniente creare un'unica tabella con IDprof-corso1-corso2-...-corsoN perchè ci sarebbero dei campi vuoti se un prof fa meno di un corso, è conveniente quindi collegare le due tabelle con una relazione 1:N, cioé "creando" una tabella dalla tabella B aggiungendo una colonna con gli IDprof corrispondenti, in questo modo la primary key di A diventa foreign key (nota: una foreign key può ripetersi quante volte vuole), otteniamo una tabella dove a ogni corso corrisponde il prof, con primary keys Idcorso.

Si parla di relazione N:N quando a record di A corrispondono più record di B e vice versa.

ESEMPIO: tabella A = Idprof-nomeprof, tabella B = IDcorso, nomecorso; tuttavia nella tabella B sono contenuti tutti i corsi fatti dalla fondazione del dipartimento a oggi. A ogni prof corrisponde ogni corso che ha tenuto nella sua carriera e a ogni corso corrispondono i professori che lo hanno insegnato nei vari anni accademici. Per collegare le due tabelle serve una terza tabella (link table) contenente le due primary key di A e B. Si può realizzare una tabella del tipo IDcorso-IDprof dove sono entrambe foreign key(?).

Report Page