Guida [GUIDA] Introduciamo le basi di dati!

Stato
Discussione chiusa ad ulteriori risposte.

syscall

Utente Emerald
21 Settembre 2013
683
43
581
475
Ultima modifica da un moderatore:
Salve popolo di inforge :rulz:,

ultimamente, quando si parla di informatica "di un certo tipo" e di web 2.0, si sente spesso discutere di "database", "sql", e si leggono robe del tipo: "programmo di qua", "programmo di la", "sqlinjection", "owno il mondo", "sono aquers potente" e quant'altro, LOL, bene, la nostra community, composta da una certa tipologia di utenti, deve essere a conoscenza di quello che sta "sotto" determinati prodotti e sistemi che praticamente utilizza giornalmente senza farci caso piu' di tanto!
images

Bisogna pero', per approfondire determinati argomenti, partire "da un po' piu indietro ", va come suona male, iniziamo bene *ghgh*...

La mia idea e' quella di scrivere innanzitutto di basi di dati, definendone concetti generali, di come progettarne una, di progettazione concettuale, del modello relazionale, della progettazione logica, di algebra relazionale ed infine di linguaggio SQL, di cui si sente parlare spessissimo, per poi successivamente, quando sara' il momento, discutere un po piu' nello specifico di sicurezza in altre sezioni apposite, altrimenti chi leggera', potrebbe non saper di cosa si stia parlando!

Come per le guide sui sistemi operativi, la mia idea e' quella di suddividere gli argomenti in piu' post, in modo da far comprendere meglio alcuni aspetti e punti che tratteremo durante tutto l'arco delle discussioni.

Come al solito scrivero' in modo molto discorsivo, e nei post successivi sopratutto, se lo riterro' opportuno creero' delle immagini apposite e dei grafici per spiegare e chiarire meglio alcuni concetti che potrebbero risultare ostici ai piu'.

Scrivero' anche, di tanto in tanto, qualche definizione "standard", che si puo' trovare praticamente ovunque.
Ovunque non troverete pero' una spiegazione concernente una data definizione in maniera cosi' semplice, chiara ed efficace, almeno spero, ma senza troppa presunzione inizio a buttar giu' le prime righe che spero apprezzerete.

Per qualsiasi cosa comunque, commenti, segnalazione di imperfezioni e robe simili non esitate a scrivere un messaggio sotto, oppure, meglio ancora, per evitare di sporcare troppo il/i post, inviatemi un messaggio privato!

Come gia' detto quindi, in questo thread, scriveremo dei concetti generali sulle basi di dati e introdurremo alcune definizioni

Concentriamoci innanzitutto sul concetto di informazione:

In qualsiasi contesto ci troviamo, azienda, ospedale, inforge, associazione e quel che sia, e' necessario mantenere le informazioni al fine di raggiungere degli obiettivi.

Ad esempio all'interno di un'azienda si potrebbero valutare le informazioni derivanti da uno studio di mercato per promuovere ad esempio i propri prodotti, stessa cosa all'interno di un ospedale, ci saranno delle informazioni relative ad esempio ai pazienti per poter gestire i vari reparti, e cosi' via...

C'e' da dire anche che non e' solo sufficiente che ci siano delle informazioni, queste infatti dovranno essere anche gestite, recuperate e interrogate!

Il sistema che permette tutto cio', che ci consente di organizzare e gestire le informazioni per raggiungere determinati scopi, e' detto sistema informativo.

Ma diamo una definizione standard che potrete trovare un po' ovunque:

Sistema informativo: organizza e gestisce le informazioni indispensabili per perseguire gli scopi di un'azienda.

La sezione del sistema informativo che viene gestito attraverso un sistema automatizzato, prende il nome di sistema informatico, quindi non e' altro che una porzione di un sistema informativo automatizzato.

Il sistema informatico potrebbe anche coincidere con l'intero sistema informativo, in ogni caso comunque un sistema informatico e' gestito, come ben sappiamo, spero, attraverso l'ausilio dei computer e l'informazione trattata e' ovviamente di natura digitale.

Sistema informatico o informativo che sia, gestiscono comunque delle informazioni mantenendo dei dati.

Il concetto di dato ed il concetto di informazione non deve essere pero' confuso in quanto sono appunto due robe diverse!

Vediamo un po che e' sta roba...

Il dato potrebbe essere interpretato come un'informazione elementare, ma il dato da solo non aggiunge nessun tipo di conoscenza, se ad esempio parlo con qualcuno e dico "syscall" sto fornendo un dato ma non fornisco alcuna informazione, devo in qualche modo contestualizzarla, l'informazione di fatto e' appunto un dato contestualizzato.

Se io aggiungo al dato "syscall", ad esempio, il fatto che si tratta di "una serie di "entry point" per il kernel, che un programmatore ha a disposizione per utilizzare i servizi del sistema operativo", oppure dico semplicemente che "e' un nickname scelto da un utente del forum di inforge", allora la cosa cambia, in quanto fornisco delle informazioni utili al mio interlocutore, aumentandone quindi la sua conoscenza :p

E' importante quindi, come abbiamo visto, distinguere il concetto di dato e di informazione!

Un insieme di dati, una collezione di dati, utilizzata per rappresentare le informazioni d'interesse per un sistema informativo e' detto... ohhh... *suspance*... BASI DI DATI!

Bene, in origine le basi di dati venivano gestite attraverso dei software realizzati con linguaggi di alto livello come il C, C++, e le informazioni e i dati venivano inseriti all'interno di file. Questo creava non pochi problemi, innanzitutto perche' per condividere le informazioni c'era la necessita' di duplicare i file, tale procedura poteva introdurre delle incongruenze tra i file che venivano sparsi in giro e, tali incongruenze, producevano delle inconsistenze nelle basi di dati.

Un linguaggio utilizzato per realizzare software per le basi di dati e' stato il cobol (googlate per saperne di piu' se volete), ne avete mai sentito parlare no? Tuttavia, nel tempo, si sono sviluppati ed affermati dei software nati APPOSITAMENTE per la gestione delle basi di dati che sfruttavano dei linguaggi nuovi, in particolari il linguaggio SQL che vedremo successivamente, nei prossimo post!

Tali prodotti software prendono il nome di DBMS, e diamo quindi un'altra definizione piu' o meno standard:

DBMS, sistema software in grado di gestire insieme di dati grandi, condivisi e persistenti.
Garantisce affidabilita' e privatezza e lavora con efficacia ed efficienza!


Il DBMS e' un sistema di gestione dei dati ed e' l'acronimo di Database Management System.
E' realizzato con un linguaggio di programmazione di ultima generazione e sfrutta il linguaggio SQL per la gestione dei dati.

Deve essere in grado di gestire molti dati e di condividerli, superando i limiti che avevano i software realizzati in precedenza.

Le informazioni contenute e gestite attraverso un DBMS dovranno poter essere accedute contemporaneamente da piu' piattaforme e da piu' utenti, immaginiamo ad esempio le agenzie di viaggio, che per prenotare un volo devono accedere al DBMS di una data compagnia di volo! E' logico che, quella data base di dati, dovra' essere condivisa dalle agenzie di viaggio e dalle compagnie di volo insieme.

Ma questo e' solo un semplice esempio, ma la condivisione e' un elemento critico, se il DBMS non e' in grado di gestire la condivisione all'interno della base di dati potrebbero crearsi delle incongruenze.

Inoltre i dati devono essere persistenti, e deve garantire una certa affidabilita' e privatezza.
Alcuni dati infatti dovranno poter essere acceduti da tutti, altri nascosti a coloro che non ne hanno i diritti e quindi alcune informazione devono essere rese private.

Deve lavorare con efficacia, ovvero deve produrre dei risultati, cioe' deve produrre dei vantaggi per l'utente.

Il concetto di efficienza e' legato invice al "tempo", tutte le interrogazioni infatti dovranno produrre dei dati in un tempo accettabile.

I DBSM lavorano su dati contenuti all'interno di basi di dati, abbiamo gia' dato una definizione a questo qualche riga sopra, possiamo darne un'altra pero', ovvero:

Una base di dati e' una collezione di dati gestiti da un DBMS!

Un DBMS agisce dunque su un database e per poterne progettare e implementarne uno e' necessario descriverne la struttura, per far cio' si ricorre al modello dei dati, e anche in questo caso, diamone una definizione generica:

Un modello di dati e' un insieme di concetti utilizzati per organizzare i dati e descriverne la struttura in modo che sia gestibile attraverso un sistema informatico.

Il piu' diffuso e' il modello relazionale, anche se non e' l'unico esistente.

Esistono anche il modello gerarchico e il modello reticolare, realizzati e definiti prima del modello relazionale. Quello gerarchico si basa su strutture ad albero, quello reticolare su un concetto di grafo e definitivo tipo negli anni 70, se non ricordo male. (Se volete approfondire comunque argomenti di questo tipo vi rimando a google!)
Oltre al modello relazionale si usa anche il modello a oggetti, che estende appunto il paradigma della programmazione ad oggetti.

Tornando al modello relazionale, esso si basa sul concetto di relazione, che puo' essere assimilata al concetto di tabella, con righe e colonne.

- Le righe prendono il nome di record;
- Le colonne prendono il nome di campi;

Nella base di dati possiamo individuare due parti: una fissa e una variabile.

Quella fissa prende il nome di "Schema", ed e' rappresentata dal nome della relazione seguita dal nome degli attributi che descrivono la relazione stessa.

La parte variabile, definita "Istanza", e' costituita dalle righe della tabella.

Possiamo fare un esempio utilizzando una relazione di questo tipo:

Codice:
utente_inforge (nickname, avatar, e_tutto_quel_che_volete)

"utente_inforge" sara' il nome della relazione, il resto saranno gli attributi della relazione stessa.

Quindi la relazione utente_inforge e' descritta dai sue attributi! Questa parte e' appunto lo schema della relazione, la parte fissa.

L'insieme delle righe invece, nel momento in cui valorizziamo le righe introducendone piu' di una, ad esempio utente_inforge_1, utente_inforge_2 ecc, stiamo definendo la parte variabile.

Nel tempo potrebbero sicuramente variare le righe esistenti, sia in numero che in contenuto.
Questa parte si definisce istanza della base di dati ed e' quindi la fotografia del contenuto di una relazione in un determinato momento.

Abbiamo scritto di DBMS e adesso penso che possiamo definirne anche l'architettura.

E' definita a livelli, ne esistono tre:

1. Esterno
2. Logico
3. Interno

Per ogni livello e' associato uno schema specifico.
Quello logico, ad esempio, costituisce la descrizione dei dati della base di dati su cui agisce il DBMS ed e' definito attraverso un particolare modello dei dati definiti in precedenza.

Lo schema interno invece e' costituito dall'insieme della parte fisica che memorizza i dati, ad esempio potrebbe essere un insieme di file.

Lo schema esterno e' una vista sui dati.

Schema esterno e schema logico potrebbero essere anche coincidenti. Un'architettura cosi' concepita ci permette di garantire l'indipendenza dei dati, che e' la proprieta' principale dei DBMS.

Individuiamo due tipologie di indipendenza dei dati:

- indipendenza fisica;
- indipendenza logica;

L'indipendenza fisica ci permette di interagire con il DBMS senza preoccuparci di come i dati siano fisicamente conservati nel database, ad esempio, potrebbe cambiare la struttura fisica dei dati ma noi potremmo comunque continuare ad interagire con il database senza preoccuparci di cio'.

L'indipendenza logica ci permette di interagire con il livello esterno senza preoccuparci del livello logico, potremmo aggiungere, ad esempio, una vista sulla base dati continuando ad interagire tranquillamente senza dover cambiare nulla.

Con il DBMS si lavora utilizzando dei linguaggi di gestione dei dati, questi linguaggi sono di due tipologie:

- Linguaggio per la definizione dei dati, DDL;
- Linguaggio per la manipolazione dei dati, DML;

(Google se volete approfondire un po' :p)

In effetti esistono alcuni linguaggi che hanno al loro interno entrambe le istruzioni, sia per quanto riguarda la definizione, che per la manipolazione dei dati, questo e' il caso del linguaggio SQL, che ha al suo interno appunto sia la parte relativa al DDL, sia quella relativa al DML.

Ma adesso e' doveroso chiedersi, chi e' che interagisce e lavora sul database?!

Possiamo individuare tre tipologie di utenti:

1) DBA (che si preoccupa della progettazione, controllo e amministrazione del database)

2) Progettisti e programmatori (coloro che appunto si preoccupano di lavorare principalmente sul livello esterno in un certo senso, usano il DML o linguaggi specifici per realizzare programmi e interfacce sulle base di dati, che poi saranno utilizzati dalla terza tipologia di utenti)

3) Utenti finali e casuali (che andranno ad utilizzare le interfacce realizzati dai programmatori. Gli utenti casuali invece "bypassano" le interfacce preposte per gli utenti finali, che sono coloro che agiscono e lavorano quotidianamente con i dati contenuti nei database, gli utenti casuali interagiscono in maniera estemporanea con la base di dati e molto piu' facilmente utilizzano il DML per accedere ai dati conservati nel database)

Bene, direi che puo' bastare, i concetti principali li abbiam definiti, abbiamo fatto anche qualche esempietto che spero sia stato semplice e chiaro, sarebbe il caso adesso di parlare di Modello Relazionale, che, come abbiamo gia' detto, e' il modello piu' usato per la rappresentazione dei dati, ma di questo scriveremo nel prossimo post ;)

STAY TUNED !
 
Stato
Discussione chiusa ad ulteriori risposte.