DATABASE Sistemi di gestione di basi di dati (DBMS) I database (basi di dati) sono degli insiemi organizzati di dati. Un sistema di gestione delle basi di dati (DBMS - Data Base Management System ) è un gestore di basi di dati che ha lo scopo di effettuare sul database particolari operazioni che gli vengono richieste, ad esempio: - definire gli archivi specificandone i dati e le regole per il loro utilizzo - inserire, modificare o cancellare dati - effettuare ricerche di diversa natura per reperire rapidamente i dati che interessano, visualizzare, stampare i dati, ecc. e per attuare questa gestione utilizza un software specifico. Modelli e caratteristiche dei database I database possono essere strutturati in diversi modi: • Modello gerarchico. Si basa su una struttura ad albero • Modello reticolare. Elementi caratterizzanti sono i grafi. • Modello Object Oriented. Fondato sulle proprietà degli oggetti. • Modello Relazionale. Si organizzano i dati in tabelle in relazione tra di loro. Indipendentemente dal modello utilizzato un DBMS deve gestire: • Inconsistenza e ridondanza dei dati • Riservatezza • Integrità (assicurata dai vincoli di consistenza sui campi) • Concorrenza Modello relazionale di database e sistemi RDBMS Noi utilizzeremo ed analizzeremo il modello relazionale: un modello relazionale di un database è un particolare modello in cui tutti i dati che compongono il database e le relazioni che intercorrono fra di essi sono rappresentati attraverso delle tabelle. Il sistema di gestione di un database relazionale è chiamato RDBMS (Relational Data Base Management System). tramite un RDBMS si può: creare nuove basi di dati specificandone la struttura logica, memorizzare una grossa quantità di dati, interrogare e modificare i dati, controllare che l’accesso contemporaneo di più utenti agli stessi dati non li danneggino. Tabelle Esempio: tabella CALCIATORI CodGioc 3001 3002 3003 …… Nome Ruolo Buffon Gianluigi Portiere Totti Francesco Attaccante Trezeguet David Attaccante …… …… Nazione Italia Italia Francia …… Una tabella è formata da righe (record, tupla) e colonne (campi, attributi) - Non è significativo l’ordine delle righe in una tabella - Non devono esistere due righe uguali Chiavi Sono dei campi speciali all’interno di una tabella. Una chiave è costituita da un sottoinsieme di attributi che garantisce unicità (da due record differenti non si può costruire la medesima chiave) e minimalità (non si possono sottrarre campi alla chiave mantenendo l’identificazione del record). Chiave primaria (primary key): campo che identifica in modo univoco ogni record all’interno della tabella. Es.: la chiave primaria della tabella “calciatori” è CodGioc. Chiave esterna (foreign key): campo di una tabella che rappresenta una copia della chiave primaria di un’altra tabella (permette di stabilire relazioni fra tabelle). Relazioni Indicano le associazioni tra i record di una tabella con quelli di un’altra tabella • Relazione uno a uno • Relazione uno a molti • Relazione molti a molti Relazione uno a uno (“di tipo 1:1”) Si ha una relazione uno a uno quando un unico record della prima tabella è legato ad un unico record della seconda tabella e viceversa. Esempio: chiave primaria tabella professori CodProf 01 02 03 04 05 Nome Tosoni Pesenti Borghesan De Nadai Luccio Tabella professori chiave primaria tabella corso CodCorso 01 02 03 04 05 Lettere A-Ga Gb-Sc Sd-Z Portogruaro Treviso Tabella corso Per collegare le due tabelle chiave primaria tabella professori chiave esterna tabella professori CodProf 01 02 03 04 Nome Tosoni Pesenti Borghesan De Nadai CodCorso 04 01 03 05 05 Luccio 02 Tabella professori Si aggiunge come chiave esterna alla tabella professori, l’attributo che costituisce la chiave primaria della tabella corso chiave primaria tabella corso Lettere CodCorso 01 02 03 04 05 A-Ga Gb-Sc Sd-Z Portogruaro Treviso Tabella corso chiave esterna tabella corso CodProf 02 05 03 01 04 oppure II) Si aggiunge come chiave esterna alla tabella corso, l’attributo che costituisce la chiave primaria della tabella professori La tabella la cui chiave primaria viene inserita nell’altra tabella è detta tabella principale, mentre l’altra tabella è detta secondaria. Relazione uno a molti (“di tipo 1:N”) Si ha una relazione uno a molti tra due tabelle quando ciascun record della prima tabella può essere associato a molti record della seconda tabella, mentre ciascun record della seconda tabella può essere associato ad un solo record della prima tabella. Ad ogni squadra possono corrispondere più giocatori ma un calciatore gioca in una sola squadra: si ha una relazione “uno a molti” Tabella SQUADRE CodSq. 01 02 03 04 Squadra Juventus Milan Inter Roma Tabella CALCIATORI C.T. Ranieri Ancelotti Mourinho Spalletti CodGioc 3001 3002 3003 3004 Nome Ruolo Buffon Gianluigi Portiere Totti Francesco Trezeguet David Attaccante Attaccante Maldini Paolo Difensore Chiave primaria tabella squadre Tabella SQUADRE CodSq Squadra 01 02 03 04 Juventus Milan Inter Roma Chiave primaria tabella calciatori 3001 3002 3003 3004 Buffon Gianluigi Totti Francesco Trezeguet David Maldini Paolo Ranieri Ancelotti Mourinho Spalletti Chiave esterna tabella calciatori Tabella CALCIATORI CodGioc Nome C.T. Ruolo Portiere Attaccante Attaccante Difensore Nazione Italia Italia Francia Italia CodSq 01 04 01 02 Nella tabella CALCIATORI l’attributo CodSq corrisponde alla chiave primaria della tabella SQUADRA esprimendo in questo modo la relazione che sussiste tra CALCIATORI e SQUADRA. CodSq è quindi una chiave esterna per la tabella CALCIATORI. Qualora si osservi che due tabelle possono avere una relazione, normalmente si stabilisce la relazione inserendo in una delle due tabelle una copia della chiave primaria dell’altra, dove diviene chiave esterna. Relazione molti a molti (“di tipo N:N”) Una relazione molti a molti si realizza quando un singolo record della prima tabella è legato a molti record della seconda tabella e viceversa. Nell’esempio precedente si avrebbe una relazione “molti a molti” nell’ipotesi che si vogliano determinare le squadre in cui un giocatore ha militato in carriera: ad ogni squadra possono corrispondere più giocatori e un calciatore può aver giocato in più squadre. In questo caso, per realizzare una relazione fra le due tabelle occorre costruire una terza tabella (detta tabella di collegamento), i cui attributi sono quelli che compongono le chiavi primarie delle due tabelle. I singoli elementi di questa terza tabella CALCIATORISQUADRA sono costituiti da tutte le possibili coppie di elementi in relazione fra di loro. Tabella CALCIATORI CodGioc Nome Ruolo Nazione 3004 Maldini Paolo Difensore Italia 3005 Cannavaro Fabio Difensore Italia 3006 …… Zambrotta Gianluca Difensore …… Italia …… …… CodGioc 3004 3005 3005 3006 3006 3006 3006 CodSq 01 CodSq 02 01 101 02 01 05 102 Squadra Juventus C.T. Ranieri 02 Milan Ancelotti 03 …… Inter …… Mourinho …… 25 …… Bari …… Conte …… 101 102 Real Madrid Barçelona Ramos Guardiola Tabella CALCIATORISQUADRA Tabella SQUADRA