Articolo pubblicato sul n. 33 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nel settembre 1984

MCmicrocomputer


Data Base Management Systems:
I sistemi di gestione per basi di dati
(prima parte)

di Andrea de Prisco

   Immaginate di trovarvi in una moderna Biblioteca, presso l'addetto ai prestiti e alle consultazioni. Davanti a lui, a fosfori verdi, un terminale di un computer e' pronto per qualsiasi interrogazione. L'addetto dice: "Nome e Cognome, prego !". Qualche secondo dopo: "Lei non ha mai acceduto a questa biblioteca, desidera consultare o richiedere in prestito un libro ?"Copertina del numero di MCmicrocomputer contenente l'articolo ..... "Vorrei in prestito per qualche giorno il Knuth, the art of computer programming, vol 1.". Pochi secondi ancora: "mi dispiace, e' gia' in prestito, se vuole inserisco la sua prenotazione per questo testo; torni tra due o tre giorni, il possessore e' stato gia' avvisato che e' scaduto il tempo concessogli".

   Tutto automatizzato: le prenotazioni, gli elenchi dei prestiti, degli utenti, dei materiali (libri e pubblicazioni), perfino ogni mattina, la stampa di tutti i testi che dovrebbero essere riconsegnati in giornata.

   Dietro tutto questo, non solo un megacomputer dotato di sofisticate periferiche per l'archiviazione, ma una vera e propria base di dati.

   A partire da questo numero, ci occuperemo un po' di Data Base, una parola che tutti avranno sentito almeno una volta, anche se non riguarda troppo da vicino il mondo della micro informatica. Si sa che per gestire centinaia di migliaia di dati un "floppyno" da personal e' sicuramente ridicolo: guarderemo questo aspetto, forse da un punto di vista piu' professionale che hobbystico, senza pero' entrare nel "difficile".

   I sistemi di gestione per basi di dati, hanno interessato e interessano ancora, parecchi studiosi nel mondo. E' il vero e proprio mondo dell'informatica, che come scienza studia l'informazione automatica: cio' che maneggiava l'addetto di cui sopra.

   Cosa e' un Data Base

      E' opinione diffusa che l'informazione posseduta da una qualsiasi azienda puo' essere considerata, senza troppi sforzi, come una risorsa patrimoniale allo stesso modo di come tempo addietro poteva essere considerata risorsa il capitale, il lavoro, l'energia. Inoltre, il (buon) funzionamento di qualsiasi organizzazione e' condizionato dall'accuratezza dell'informazione di cui dispone e dalla tempestivita' con cui viene elaborata per prendere decisioni.

   I sistemi di gestione per basi di dati permettono, con una certa facilita', di trattare moli enormi di dati, per cosi' dire, senza farsi prendere dal panico. Fino a qualche anno fa, le informazioni venivano archiviate in file di dati, ed era compito del programmatore curare l'organizzazione di questi su memoria di massa. In altre parole: grosso lavoro per produrre procedure automatizzate non molto dissimili, per complessita', a quelle manuali, e spesso meno affidabili. I Data Base, possono essere visti come dei linguaggi di programmazione ad alto livello, particolarmente orientati a facilitare al massimo il trattamento dei dati.

   Fra sistemi di archiviazione e Sistemi di gestione per Basi di Dati (SGBD), possiamo dire che intercorre la stessa differenza che c'e' tra un linguaggio di programmazione tipo Assembler (non dotato di alcuna struttura pre-programmata) e un linguaggio ad alto livello, come il Pascal o il Basic (beh, proprio alto, alto, non direi...).

   In altre parole, coi SGBD, il programmatore della base di dati, detto anche Data Base Administrator o DBA, e' sgravato da buona parte dei compiti (quel che riguarda l'organizzazione fisica e logica dei dati) e puo' dedicarsi a trattare meglio le procedure che saranno utilizzate dall'utente. Notare come si stia parlando in termini tutt'altro che hobbystici.

   Prima di entrare in questo particolare mondo, bisognerebbe rinfrescare un po' le idee sul concetto di dato. Il Basic, da questo punto di vista e' abbastanza digiuno, considerando che la maggior parte dei lettori conoscono solo questo linguaggio...

   Il Dato  

   Chiunque abbia scritto un programma Basic, conoscera' la differenza che c'e' tra un intero e un reale o tra un intero e una stringa. Per chi non lo sapesse, la differenza e' appunto nel "tipo". Cio' significa che due oggetti di tipo diverso sono necessariamente diversi, anche se dovesse capitare che rappresentano la stessa roba. Per intenderci: il numero 123 e' ben diverso dalla stringa "123", e non solo come organizzazione fisica all'interno del nostro calcolatore. Col primo possiamo farci somme, prodotti, sottrazioni, col secondo no. Questo perche' l'operazione di somma e' definita per funzionare tra due numeri e non tra due cose che hanno sembianze di numero.

   Il Basic si ferma qui. Con linguaggi di programmazione un po' piu' evoluti, il tipo di dato e' qualcosa di molto piu' flessibile, in alcuni casi se ne possono inventare di nuovi a partire da tipi gia' definiti. Il primo tipo di dato che analizzeremo e' l'ennupla. E' noto che l'oggetto (3,4) rappresenta una coppia. Estendendo il nostro discorso a oggetti diversi da numeri, sara' una coppia anche ("Mario","Rossi"). Dando un nome ad ognuno dei due campi, la coppia diventa, ad esempio, (Nome="Mario",Cognome="Rossi"). Questa e' una ennupla formata da due campi di tipo stringa, Nome e Cognome. A partire dal tipo stringa, abbiamo costruito un nuovo "tipo".

   Per fare un discorso un tantino piu' operativo, ci siamo inventati per voi un metalinguaggio di programmazione, chiaramente non implementato, che ha solo l'umile pretesa di mostrare come trattare nuovi tipi. Per qualche affinita' col piu' diffuso dei linguaggi di programmazione, lo chiameremo Basic-micatanto.

   Ad esempio la linea:

   100 Persona = (Nome="Mario",Cognome="Rossi")

   Assegnera' alla variabile Persona, la coppia mostrata. Per selezionare i campi, e' disponibile l'operatore OF:

   110 PRINT Nome OF Persona

   Stampera' "Mario". Chiaramente sono possibili anche assegnamenti del tipo:

   120 A$ = Cognome OF Persona

   dato che c'e' uguaglianza di tipo: A$ e' stringa quanto "Rossi".

   La sequenza:

   10 INPUT "Giorno,Mese,Anno";A,B,C

   20 Data = (Giorno=A,Mese=B,Anno=C)

   30 PRINT Data

   Costruira' l'ennupla Data formata dai tre interi che avremo fornito all'atto del Prompt e stampera', ad esempio, la terna:

   (28,6,1984)

   Esistono poi, particolari tipi di dato che sembrano tipi gia' esistenti, ma di fatto hanno qualcosa in piu'. Ad esempio, potrebbe esistere in Basic-micatanto il tipo Telefono (suffisso &), direttamente derivato dal tipo stringa, ma che in piu' controlla se l'oggetto passato come tipo Telefono puo' essere un numero telefonico. Fare cio' non e' difficile: si puo' ad esempio controllare che sia formato solo da cifre e dal simbolo "/" come separatore tra prefisso e numero, che la prima cifra sia uno zero, che non sia piu' corto di 7 caratteri, che il numero non inizi per zero e altri vincoli di stessa fatta. Grazie a questo nuovo tipo, la linea:

   300 INPUT "Telefono ";T&

   rifiutera' con "Redo From Start", qualsiasi stringa che non soddisfa i vincoli sopra elencati. In altre parole, chi vuol programmare un indirizziario, puo' non curarsi di controllare che i numeri telefonici siano davvero tali: ci pensa il computer.

   Il tipo Sequenza, puo' essere assimilato ad un array monodimensionale, ma ha il considerevole vantaggio di non imporre un dimensionamento: puo' variare dinamicamente il numero degli elementi.

   Per costruire una sequenza, si usano i delimitatori "[" e "]".

   100 Lista = [4,7,2,33,12,56]

   costruisce la sequenza data, di nome Lista. Anche per trattare questo nuovo tipo, sono disponibili nuovi operatori. Primo tra tutti, la somma (simbolo "+", tanto per variare), unisce due sequenze.

   110 AltraLista = Lista + [23,55]

   AltraLista sara' la sequenza : [4,7,2,33,12,56,23,55]. Per selezionare un elemento, si opera come per gli array: Lista(3) sara' 2 mentre Lista(5) e' 12. Notare che anche [5] e' una sequenza, sebbene formata da un solo elemento. Possono esistere anche sequenze di stringhe, cosi' come sequenze di ennuple:

   120€£ListaPersone€£=€£[(Nome="Mario",Cognome="Rossi"),

   (Nome="Vito",Cognome="Bianchi")]

   ListaPersone e' una sequenza formata da due ennuple: Mario Rossi e Vito Bianchi. ListaPersone(1), restituira':

   ("Mario","Rossi")

   ListaPersone(2) restituira':

   ("Vito","Bianchi")

   Si puo' ad esempio scrivere:

   130 A$ = Nome OF ListaPersone(1)

   A$ conterra' "Mario".

Altro operatore per le sequenze, e' ISIN. Serve per sapere se un oggetto appartiene o no ad una sequenza. La sua sintassi e':

   Elemento ISIN Sequenza

   Si usa negli IF, ad esempio:

   140 IF 2 ISIN AltraLista THEN 200

   Salta a 200 se 2 appartiene a AltraLista (nel nostro caso si').

   E per quanto riguarda i dati, ci fermiamo qui: vedremo ora come organizzare insiemi di dati.

 

   Le Classi

   Il passo successivo e' quello di organizzare per classi i dati che vogliamo trattare. Tornando all'esempio dato in apertura, nel caso di una biblioteca, le classi dati che prenderemo in considerazione saranno quelle dei materiali, dei materiali in prestito, di tutti gli utenti e delle prenotazioni. La caratteristica principale dell' organizzazioni dei dati coi SGBD, e' quella di poter in qualche modo legare dati di classi diverse. Ad esempio, ad ogni elemento della classe dei materiali prestati, puo' essere associato, il corrispondente utente che ha in possesso il libro. Allo stesso modo, considerando la classe degli utenti, ad ogni elemento di quest'ultima saranno legati elementi della classe materiali in prestito. Per cosi' dire, in una Base di Dati, i dati sono tra loro correlati: senza ovviamente ridondanza (duplicazioni di elementi). Se ad esempio Mario Rossi ha in prestito il Knuth vol. 1, nella classe utenti, nella posizione "Mario Rossi", sara' presente un puntatore alla classe materiali prestati, precisamente all'elemento Knuth vol. 1.

    Per visualizzare la descrizione di una Base di Dati, si utilizzano dei grafi. In figura 1 e' visibile lo schema della biblioteca descritta. Le classi vengono rappresentate da rettangoli, con dentro il nome della classe. Fra le classi, gli archi interposti sono le associazioni tra dati. La freccia singola o doppia, sta per associazione univoca o multipla: se e' associato uno o piu' elementi della classe adiacente. Sempre riferendoci a questo schema, un utente della biblioteca puo' avere piu' libri in prestito, ma ogni libro prestato puo' stare al piu' presso un (e un solo) utente. Idem dicesi per le prenotazioni: una prenotazione riguarda un materiale della biblioteca, ma un libro, puo' essere citato in piu' prenotazioni.

   In alcuni sistemi sono presenti anche altri meccanismi per la manipolazione dei dati: le sottoclassi. Una sottoclasse e' un sottoinsieme di una classe piu' grande detta Padre. Potremmo vedere la classe materiali prestati, come una sottoclasse della classe materiali. Anche col meccanismo delle sottoclassi e' scongiurata anche la minima ridondanza dei dati: gli elementi della sottoclasse, non sono copie degli elementi della classe Padre, ma semplicemente un modo diverso di vedere gli stessi oggetti. Supponiamo che ogni materiale, oltre a Titolo, Autore e Posizione nella biblioteca abbia un campo denominato Prestato che assume come valori "si" o "no" a seconda che sia in possesso di qualche utente o disponibile in biblioteca. Per definire la sottoclasse, basta indicare che a Materiali Prestati, appartengono tutti e solo i materiali con Prestato="si". A questo punto, chiedersi se un libro appartiene alla sottoclasse materiali prestati equivale a controllare che Prestato sia uguale a "si". Il tutto nella classe Padre, anche se l'interrogazione riguardava l'appartenenza alla classe figlia. Semplicemente un modo per rendere ancora piu' chiara la descrizione della Base di Dati, e minimizzare ancora di piu' la ridondanza.

Nelle Prossime Puntate

   Nei prossimi numeri, ci occuperemo un po' piu' da vicino della realizzazione di una base di dati. Il Basic-micatanto, con i suoi operatori per le Classi (li vedremo sul prossimo numero) si presta molto bene per descrivere e far funzionare Data Base col modello semantico dei dati: descrizione di questi secondo il loro vero significato nella realta': un Utente e' un utente, una persona.... e come tale va trattata (non e' un numero!).

   Teniamo a precisare che il Basic-micatanto e' si' inventato di sana pianta, ma non e' molto dissimile dai sistemi oggi in commercio. Va molto bene per noi che siamo maledettamente abituati ai numero linea e ai GOTO.

   Daremo anche uno sguardo agli altri modelli di rappresentazione dei dati: Il Modello Gerarchico, quello Reticolare e quello Relazionale. Quest'ultimo in particolare, sta facendo parlare il mondo per la sua potenzialita' unita ad una facilita' d'uso da far spavento. E' l'ultimo dei sistemi inventati, e avendo alle spalle mamma IBM, non si puo' dire che gli manchera' il successo.

   Infine presenteremo un Data Base per il Commodore 64 (strano !) scritto in Basic, ma opportunamente compilato per annullare i tempi morti di attesa. Segue il modello semantico, con molti degli operatori del Basic-micatanto e un tocco di Relazionale, per essere al passo coi tempi. Il suo nome Galileo/J, tratto dal linguaggio per Basi di Dati, tuttora in fase di realizzazione presso l'Universita' degli Studi di Pisa, dipartimento di Scienze dell'Informazione.


Impaginato originale...


  Clicca per ingrandire...
Clicca per ingrandire... Clicca per ingrandire...

Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui