Storia dell’Informatica e del Calcolo Automatico Prof.ssa F. Perla La storia dei DBMS e dei modelli di progettazione dei DATABASE Realizzato da: Claudio PETRONE Amedeo MADDALUNO Pasquale TESSITORE …la preistoria dei DB Probabilmente il più glorioso (ed a tutt'oggi utilizzato) antenato dei database relazionali odierni può essere identificato con la vecchia e utilissima agenda. In effetti se ne studiamo la struttura scopriamo una notevole affinità con le sue attuali implementazioni tecnologiche attuali. …ma come è fatta un’agenda? Un’agenda è organizzata tramite un indice ( linguette sul fianco che ci permettono di accedere più rapidamente a tutte le informazioni segnalate dalla linguetta) che gestisce una tabella composta da colonne che identificano il tipo di dato riportato (nome, numero di telefono, indirizzo) Le registrazioni, pur differendo l'una dall'altra per i dati riportati al loro interno, "hanno tutti la stessa struttura", cioè riportano le stesse informazioni nella medesima maniera. Implementazioni tecnologiche - CSV Il primo tentativo compiuto dagli informatici per trasformare questo tipo di oggetti in un “qualcosa" trattabile dal punto di vista elettronico corrisponde al nome di CSV (Comma Separated Value) I dati in formato testo - CSV Cioè un banalissimo file di testo dove ogni informazione è separata dalle altre tramite un carattere particolare (normalmente una virgola) ed ogni record è separato dagli altri tramite un altro carattere (normalmente il carattere di "a capo"). Il CSV Questo sistema era decisamente semplicistico, in quanto comunque per trovare all' interno di un file del genere una informazione specifica era necessario scorrerlo, un modo poco pratico, per trovare quanto si ricercava. CVS - ISAM La logica evoluzione del CSV fu l'ISAM (Indexed Sequential Access Method), che differiva dal CSV solo per il fatto che veniva definito un ordinamento, tipicamente nel caso dell’agenda l'ordine alfabetico sui cognomi CVS- ISAM Tale ordinamento veniva sfruttato sia in scrittura ("dove inserire il record del numero di telefono?") sia in lettura ("dove recuperare il numero di telefono ?") permettendo in questo modo di abbreviare incredibilmente i tempi di ricerca di una data informazione. Nuove implementazioni del CVS- ISAM Per riuscire poi a gestire ancora meglio il tutto si crearono anche delle specie di "archivi sussidiari", detti indici, in cui veniva registrato solo l'ordine dei vari record senza tutte le altre informazioni, il che permetteva di andare a svolgere le proprie ricerche in questo "riassunto" in modo molto più veloce e "puntare diritti" sul database completo per leggere tutto il record una volta che si sapeva dov'era. …ma si può essere più veloci? A questo punto parecchi matematici si posero un problema: “ se i database sono importanti, lo saranno ancora di più se l’accesso alle informazioni sarà veloce” Iniziano gli studi sui sistemi di ricerca; ne naquero diversi dai nomi fantasiosi come "ricerca dicotomica" o "a farfalla”. primi studi… Si sono sviluppati così tutti quei sistemi oggi definiti "Database non relazionali" (in contrapposizione ai database relazionali che vedremo dopo) di cui forse i più famosi sono stati i database B-Trieve e DBIII-like (clipper, DBIII, DBIV ecc) …primi studi Con l'evoluzione di questi ultimi, i database ebbero una notevole diffusione e quindi iniziarono a nascere richieste di affidabilità e di prestazioni sempre maggiori, con uno sviluppo teorico notevole che li sostenesse. L’evoluzione dei DB (1) Inizio anni ’60: Charles Bachman (Eletric) progetta il primo DBMS (Integrated Data Store), basato sul modello reticolare. Bachman vincerà il primo ACM Turing Award nel 1973. Fine anni ’60: l’IBM sviluppa l’Information Management System (IMS), basato sul modello gerarchico ancora usato tutt’oggi. 1970: Edgar Codd (IBM) propone il modello relazionale. Questi studi gli permetteranno di vincere l’ACM Turing 1981. L’evoluzione dei DB (2) Anni ’80: il modello relazionale vince su altri, e si diffondono i DBMS basati su di esso. Il linguaggio SQL viene standardizzato come linguaggio per DBMS basati sul modello relazionale. Anni ’90: sulla spinta di intense ricerche, i DBMS relazionali divengono sempre più sofisticati e diffusi (DB2, Oracle, Informix). Nel 1999 James Gray vince l’ACM Turing Award per il suo contributo alla gestione delle transazioni. Inizio anni 60… I calcolatori diventano strumento indispensabile per le aziende sia pubbliche che private data la possibilità di immagazzinare un’enorme quantità di dati. Vengono così sviluppati due modelli di database: Modello della rete (Codasyl) e gerarchico (IMS). …inizio anni 60 Charles W. Bachman, che ha realizzato negli anni ‘60 per General Electric il primo vero DBMS della storia ("IDS"), fondò il "Database Task Group", all'interno del "Codasyl“ (Conference on data system languages), il gruppo di lavoro dedicato alla creazione e standardizzazione del linguaggio di programmazione COBOL. Database Relazionali Negli anni 70:Database Relazionali (1) Edgar Codd, dipendente della sede californiana della IBM, in quel periodo era un ricercatore sulla nascente tecnologia degli hard disk I sui studi lo portarono ad osservare l'inefficienza dell'approccio Codasyl con la nuova modalità di memorizzazione dei dati, inefficienza dovuta principalmente all'assenza di una funzione di ricerca. Negli anni 70: Database Relazionali (2) Nel 1970 Codd cominciò a produrre diversi documenti schematizzanti un nuovo approccio alla costruzione delle basi di dati, culminati nel famoso articolo intitolato: "Modello relazionale per Basi di dati condivise“ ("A Relational Model of Data for Large Shared Data Banks"). In questo articolo, descrisse un nuovo sistema per archiviare e modificare grandi quantità di dati. Invece di utilizzare delle "righe" collegate tra di loro attraverso un qualche tipo di struttura "ad albero", come in Codasyl, ritenne di utilizzare una "tabella" di righe a lunghezza fissa. Questo sistema sarebbe stato molto inefficiente nell'archiviazione di dati "sparsi", in cui la tabella avrebbe potuto avere diverse "celle" vuote; tale errore di impostazione fu corretto dividendo i dati in diverse tabelle, in cui gli elementi opzionali venivano spostati, anziché sprecare spazio nella tabella principale. Ad esempio, un utilizzo comune delle basi di dati è quello di registrare delle informazioni sugli utenti: il loro nome, informazioni di accesso, indirizzo e numeri di telefono. • In un database tradizionale tutti questi dati sarebbero stati memorizzati in un unico "record", e gli elementi non presenti (ad esempio un utente di cui non sia noto l'indirizzo) sarebbero stati semplicemente omessi. • Al contrario, in un database relazionale, le informazioni sono state divise, ad esempio, nelle tabelle "utente", "indirizzi", "numeri di telefono": solo se i dati sono presenti viene creata, nella rispettiva tabella. La soluzione del sistema sta nel collegamento delle tabelle. Nel modello relazionale, per ogni record viene definita una "chiave", ovvero un identificatore univoco della riga. Nella ricostruzione delle relazioni, l'elemento di riferimento, che distingue una riga da un'altra è proprio questa "chiave" che viene richiamata nella definizione della relazione. La chiave può essere uno dei dati stessi che vengono memorizzati (ad esempio, per la tabella utenti, il "Codice Fiscale" della persona), o un campo che viene aggiunto specificatamente per questo scopo (spesso chiamato "OID" - "Object IDentifier"). Questa operazione di "riunificazione" dei dati non è prevista nei linguaggi di programmazione tradizionali; mentre l'approccio tradizionale richiede semplicemente di "ciclare" per raccogliere i diversi record, l'approccio relazionale richiede al programma di "ciclare" per raccogliere le informazioni riguardanti ogni record. Codd, propose, come soluzione, la creazione di un linguaggio dedicato a questo problema, un linguaggio che, più tardi, si sarebbe sviluppato nella codifica che oggi è utilizzata universalmente e che rappresenta il perno fondamentale delle basi di dati: SQL Utilizzando una teoria matematica chiamata "calcolo delle tuple", dimostrò che questo sistema era in grado di compiere tutte le normali operazione di amministrazione dei database (inserimento, cancellazione, etc.) e che inoltre consentiva di disporre di uno strumento semplice per trovare e visualizzare gruppi di dati tramite un'unica operazione. System R LA IBM cominciò a implementare questa teoria in alcuni prototipi all'inizio degli Anni '70, come nel "System R". System R La prima versione fu realizzata nel 1974/75 con uno strumento "monotabella"; negli anni successivi furono studiati i primi sistemi che potessero supportare la suddivisione dei dati in tabelle separate, utile per la separazione dei dati opzionali in tabelle diverse da quella principale. Versioni multiutente del System R Versioni "multiutente" furono realizzate nel 1978 e nel 1979; negli stessi anni fu standardizzato il linguaggio SQL. La superiorità di questo sistema rispetto a Codasyl fu quindi evidente e la IBM passò a sviluppare una versione commerciale di "System R", che prese il nome di "SQL/DS" prima e di "Database 2" (DB2) dopo. Il lavoro di Codd, venne proseguito presso l‘Università di Berkeley da: Eugene Wong e Michael Stonebraker. INGRES Il loro progetto, chiamato INGRES (Interactive Graphics and Retrieval System) e finanziato tramite fondi destinati alla creazione di un database geografico, vide la luce nel 1973 e produsse i primi risultati nel 1974 anche grazie all'opera di numerosi studenti che prestarono la loro opera quali programmatori INGRES INGRES era assai simile a "System R" e prevedeva un linguaggio alternativo a SQL, chiamato QUEL. Molte delle persone coinvolte nel progetto si convinsero della fattibilità commerciale dello stesso e fondarono imprese per entrare nel mercato con questo prodotto: Sybase, Informix, NonStop SQL e alla fine la stessa Ingres, naquero quali "spin-off" per la diffusione di INGRES all'inizio degli Anni '80. Perfino Microsoft SQL Server è, per certi versi, una derivazione di "Sybase" e, quindi, di INGRES. Solamente la Oracle di Larry Ellison partì utilizzando un approccio diverso, basato sul "System R" della IBM, e alla fine prevalse sulle altre compagnie con il suo prodotto, lanciato nel 1978. Sviluppi del lavoro di Codd Il lavoro di Codd venne continuato nella Università di Uppsala (in Svezia) dove fu sviluppato un prodotto, Mimer SQL, commercializzato nel 1984. Il Mimer SQL introduce per la prima volta il concetto di transazione, successivamente importato in quasi tutti i DBMS. Database ad oggetti Database ad oggetti A partire dai primi anni ‘90, cominciano a diffondersi i database a oggetti (ODBMS). Nel modello dei dati a oggetti le entità del dominio vengono modellate con oggetti e relazioni fra oggetti. Un ODBMS offre le funzioni necessarie a rendere persistenti collezioni di oggetti e le relazioni fra di loro. La naturalezza nel rappresentare dati complessi e l'abilità ad accedervi in modo efficiente è il principale punto a favore di un ODBMS rispetto a un RDBMS. Database ad oggetti A differenza del modello relazionale, nel modello a oggetti gli attributi di un oggetto possono essere di qualunque tipo: in particolare, un oggetto può contenere altri oggetti. Inoltre l'ODBMS può essere istruito per privilegiare gli accessi a gruppi (cluster) di oggetti eterogenei, in modo che il caricamento di un oggetto con tutte le sue componenti si svolga in un'operazione unica di accesso al disco; questa stessa operazione nei RDBMS deve essere eseguita tramite una o più JOIN, che è una delle operazioni più costose di un RDBMS Database ad oggetti Pensiamo, per esempio, a come rappresentare il contorno di una figura CAD in un RDBMS. Un contorno è una sequenza di punti. Il modello dati relazionale non permette di definire un nuovo tipo elementare "punto". Il progettista del DB relazionale dovrà quindi usare un'unica tabella con quattro colonne per contenere tutti i punti del sistema. Due colonne servono per mantenere le coordinate; una contiene l'identificativo del contorno cui appartiene il punto, la quarta il numero di sequenza del punto nel contorno. Database ad oggetti Per estrarre dal DB un contorno, prima bisogna estrarre dalla relazione tutti i punti (presumibilmente alcuni milioni) quelli che corrispondono al contorno che stiamo cercando, quindi ordinarli secondo il numero di sequenza, infine trasferire il risultato in un formato manipolabile nell'ambiente di programmazione: tipicamente un vettore dinamico di oggetti Point. Altrettanto laboriosa sarà l'operazione inversa. La macchinosità e l'inefficienza di tutto ciò sono tali da sconsigliarlo in qualsiasi CAD reale. Database ad oggetti Un database a oggetti non solo può rappresentare direttamente la sequenza ordinata dei punti, senza trasformarla in tabella, ma può essere istruito a mettere i punti sulla stessa pagina di disco su cui si trova la figura geometrica cui si riferiscono. Tutti gli ODBMS prevedono un modo perché un'applicazione possa dare questi "suggerimenti" al run-time del database, anche se non esiste un modo standard; un meccanismo tipico è di passare dalla costruzione di un oggetto il riferimento a un altro oggetto già sul database, con l’indicazione che i due devono stare possibilmente vicini. Database ad oggetti La prima differenza che salta agli occhi fra il mondo dei database a oggetti e quello relazionale è la mancanza di interoperabilità. A un database a oggetti si può accedere solo passando per il DBMS che lo gestisce: per esempio, a un database ObjectStore può accedere solo un programma scritto per ObjectStore e non, per esempio, per Objectivity/DB; inoltre, anche se la maggior parte dei database a oggetti sono supportati su una molteplicità di piattaforme (p.e. Win32, Sun, HP, eccetera), non tutti sono realmente multipiattaforma, cioè non permettono a un cliente su Windows di accedere a un database su server Unix Object Database Management Group Per superare questo limite, che rappresenta il più grande difetto degli ODBMS rispetto ai relazionali e, quindi, l'ostacolo maggiore alla loro diffusione, è nato: ODMG (Object Database Management Group) un consorzio di costruttori di ODBMS. Il suo fine è definire : ● un linguaggio astratto per la definizione dello schema del database (ODL: Object Definition Language), ● un linguaggio standard per le interrogazioni sul database (OQL : Object Query Language) ● il mapping di questi linguaggi astratti sui linguaggi di programmazione reali. Database a oggetti relazionali Oggi molti DBMS applicano in realtà un misto tra il modello relazionale e il modello a oggetti. Si parla quindi di ORDBMS (Object Relational DBMS). Evoluzione dei database a oggetti • Gestione e memorizzazione delle immagini, audio e video, MMDB • Data Warehouses • Sistemi informativi geografici (GIS) e analisi spaziali Data WareHousing Le potenzialità delle basi di dati si sono concretizzate, nel corso degli anni, in tools quasi sorprendenti, rispetto agli usi di pochi anni fa, in grado di maneggiare “informazione” come un qualsiasi altro bene aziendale. Se negli anni settanta i database avevano in prevalenza un ruolo di storage, oggi manager aziendali interrogano quotidianamente il proprio Decision Support System per aiutarsi nelle scelte quotidiane. Il processo attraverso il quale, a partire da dati operazionali, è possibile ottenere informazioni che aiutino i manager nelle analisi dei dati prende il nome di “Data warehousing” (magazzino di dati). Data WareHousing Un data Warehousing in ambito aziendale fa parte di un sistema informativo la cui materia prima da processare è: l’informazione. I suoi obiettivi sono: • la gestione storica dei dati • la facilità di accesso alle informazioni attraverso una visione multidimensionale dei dati • la capacità di fare ipotesi sul futuro E’ realizzato attraverso un processo basato sulla riorganizzazione dei dati esistenti in un DBMS. GIS Un Sistema Informativo Geografico (Geographical Information System, GIS) è un sistema informativo computerizzato che permette l'acquisizione, la registrazione, l'analisi, la visualizzazione e la restituzione di informazioni derivanti da dati geografici (geo-referenziati). Il GIS è una forma di DBMS capace di gestire le posizioni degli “elementi” sul territorio, che si integra con delle componenti software di interrogazione e visualizzazione. GIS Per la rappresentazione dei dati in un sistema informatico occorre formalizzare un modello rappresentativo flessibile che si adatti ai fenomeni reali. Nel GIS abbiamo tre tipologie di informazioni: ● geometriche: relative alla rappresentazione cartografica degli oggetti rappresentati; quali la forma (punto, linea poligono), la dimensione e la posizione geografica; ● topologiche: riferite alle relazioni reciproche tra gli oggetti (connessione, adiacenza, inclusione ecc…); ● informative: riguardanti i dati (numerici, testuali ecc…) associati ad ogni oggetto. GIS Il GIS prevede la gestione di queste informazioni in un database relazionale. L'aspetto che caratterizza il GIS è quello geometrico: esso memorizza la posizione del dato impiegando un sistema di proiezione reale che definisce la posizione geografica dell'oggetto. DBMS multimediali I DBMS multimediali (MMDB) sono sistemi che permettono di memorizzare e recuperare oggetti costituiti da testo, immagini, suoni, animazioni, voce, video, ecc. I MMDB presentano problematiche diverse rispetto ai DBMS tradizionali: • Dimensioni del DB (molto) maggiori • Gestione di media continui (video, audio) • Complessità di modellazione degli oggetti multimediali • Ricerche non necessariamente “esatte” DBMS multimediali Settori applicativi: • • • • • DB medici (TAC, RX) DB scientifici (spectral analysis, molecolari) DB legali (fingerprints, mugshots, copy detection) Publishing (electronic newspaper) Fashion DBMS multimediali Benché a tutt’oggi non esista un modello standard per la descrizione dei MMDB, è opinione comune che tutte le applicazioni non banali debbano considerare una rappresentazione su (almeno) 4 livelli: • Raw Data: descrive i dati multimediali veri e propri, indipendentemente dal loro contenuto. Questo livello è rilevante per gli aspetti di memorizzazione, ma non di ricerca. • Objects Description: a questo livello sono definiti gli “oggetti” multimediale di interesse (es: parti di immagini, elementi di testo). DBMS multimediali • Features (caratteristiche): le feature di un oggetto MM ne descrivono il contenuto in termini di grandezze misurabili (es: colore di un’immagine, spettro di un suono, ecc.) • Concepts: il livello dei concetti usa una rappresentazione semantica del dominio di interesse (background/domain knowledge) per interpretare il contenuto degli oggetti multimediali Ricerca in un MMDB Ricerca in un MMDB: su campi “classici” ● su campi strutturali ● su feature ● concettuali ● su relazioni spazio-temporali ● Schema riassuntivo Modelli di DBMS a oggetti relazionale a oggetti relazionale reticolare gerarchico x 1960 x 1970 x 1980 x x 1990 2000 Tempo DB2 DB2 è un DBMS prodotto da IBM. La sua prima versione risale al 1983 e, secondo molti, è stato il primo prodotto ad utilizzare il linguaggio SQL. Inizialmente era un DBMS per i mainframe, ma oggi è diffuso su qualsiasi tipo di server, perfino su PDA e altri dispositivi portatili; esistono versioni per GNU Linux, Unix (AIX, HP-UX, Solaris) e MS Windows. I suoi precursori sono DL/1 e IMS/DB, sempre della IBM. DB2 Quando Informix acquistò Illustra e introdusse nel proprio database Universal Server, facendone un DBMS relazionale a oggetti, sia Oracle che IBM dovettero introdurre il concetto di oggetti nei proprio prodotti. Pertanto DB2 è diventato un DBMS relazionale a oggetti. Attualmente, DB2 e Oracle si contendono il primo posto nel mercato dei DBMS. Cachè Caché è un DBMS proprietario prodotto da InterSystems. InterSystems usa il termine "post-relazionale" per descriverne le caratteristiche. Caché fornisce accesso tramite SQL, Object e in maniera multidimensionale agli stessi dati. Esistono versioni di Caché sia per Windows, sia per diverse versioni di Unix e distribuzioni di Linux, sia per le piattaforme OpenVMS. Cachè La memorizzazione dei dati in Caché avviene utilizzando i b-tree basati su array multidimensionali (conosciutti anche con il nome di MUMPS globals, sebbene InterSystems preferisca non utilizzare questo termine). Cachè fornisce i linguaggi di sviluppo • Caché ObjectScript • Caché Basic per facilitare il programmatore alla creazione e lo sviluppo di applicazioni che interagiscono con il DBMS stesso. Cachè Fornisce inoltre interfacce esterne che permettono il Native Object Binding con diversi linguaggi di programmazione quali C++, Java, EJB, ActiveX. Gli accessi relazionali mediante JDBC e ODBC sono implementati tramite Direct Interface e risultano essere molto performanti. Inoltre sono supportati anche accessi mediante XML e Web Services. Cachè I principali clienti e utilizzatori di Caché sono i grandi ospedali degli USA, che lo usano per la memorizzazione elettronica dei dati dei pazienti, e istituzioni finanziarie come Ameritrade. I principali concorrenti di Caché sono DB2 di IBM, MS-SQL di Microsoft e Oracle. Cachè Rispetto agli altri sistemi relazionali, per quanto riguarda applicazioni simili, Caché può fornire spesso un rendimento più elevato (o a parità di risorse hardware può sostenere un numero maggiore di utenti). Questo vantaggio in performance viene pagato, sempre nel confronto con altri sistemi relazionali, da una perdita di flessibilità; ne risulta la necessità di una formazione specifica per il personale con aggiornamenti diversi dallo standard attuale dei database e delle versioni chiuse del programma, associate a degli specifici strumenti di sviluppo, disponibili presso un solo venditore. FileMaker Pro FileMaker Pro è un database multi-piattaforma sviluppato da FileMaker Inc. E’ stato uno dei primi database presentati per Apple Macintosh all'inizio degli anni ottanta. E’ un database che combina potenza e facilità d'uso. È anche conosciuto per la stretta integrazione del database con l'interfaccia grafica. Ad esempio, per modificare un database, basta prelevare un elemento e trascinarlo in un layout/schermo o form. Il motore automaticamente rileverà il nuovo elemento e provvederà a tenerne conto durante le interrogazioni. FileMaker Pro Il programma non si basa sulla filosofia della programmazione orientata agli oggetti, anche se ne mutua molte caratteristiche, infatti viene definito un ambiente di sviluppo "quasi-object" in cui la base dello sviluppo è la manipolazione di entità chiamate oggetti, ma il database non supporta molte delle caratteristiche avanzate previste della programmazione a oggetti. Questa peculiare gestione dei dati lo rende un prodotto unico e, sotto molti punti di vista, lo rende difficile da confrontare con i prodotti concorrenti, dato che questi sono basati su paradigmi diversi. FileMaker Pro E’ disponibile sia per la piattaforma Macintosh, sia per la piattaforma Windows ed è in grado di utilizzare una rete locale mista (composta da computer Macintosh e Windows). E’ un prodotto scalabile, è disponibile una versione per le postazioni degli utenti, per i server e esiste una versione in grado di interfacciarsi a siti web e a dispositivi mobili. Informix Nel 1980, Roger Sippl e Laura King hanno fondato la società Relational Database Systems (RDS). Il loro primo prodotto, Marathon, è stato rilasciato su Onyx, una versione di Unix per i primi microprocessori ZiLOG. In RDS, Sippl and King hanno posto la loro attenzione al mercato dell’emergente SQL e hanno adattato una versione del codice sorgente, pubblicamente disponibile, di Inges alla piattaforma Unix. Informix La disponibilità di un codice ben collaudato ha permesso alla RDS di rilasciare, nel 1981, la sua prima versione di Informix. Essa comprendeva alcuni cambiamenti fondamentali rispetto al sistema Ingres, in particolare: • un adattamento del linguaggio di query QUEL nel suo linguaggio Informer, • un tool per la scrittura di report (ACE), usato per estrarre dati dal database e presentarli all’utente in un formato semplice, • uno strumento per interrogare ed editare interattivamente i dati nel database (PERFORM). Informix La versione finale di questo prodotto, realizzata all’inizio del 1986, è stata la 3.30. Nel 1985, con l’introduzione di un nuovo motore basato su query SQL, è nato INFORMIX-SQL versione 1.10 (la versione 1.00 non è stata mai rilasciata). Tale prodotto comprendeva anche le varianti SQL di ACE e PERFORM. Verso la metà degli anni ’80, grazie alla crescita della popolarità di Unix e di SQL, RDS è diventata una società di successo ed ha cambiato il suo nome in Informix Software. Informix I prodotti INFORMIX-SQL versione 2.00 e INFORMIX-4GL 1.00 comprendevano sia il motore del database, sia i tool di sviluppo (I4GL per i programmatori, ISQL per i non-programmatori). Nel 1989, con il rilascio della versione 9.00, il motore è stato separato dai tool I4GL e ISQL ed ha preso il nome di Informix-SE (Standard Engine). Nello stesso anno è nato un nuovo motore, denominato inizialmente Informix Turbo e successivamente Informix OnLine. La versione 5.00 di Informix OnLine è stata rilasciata alla fine del 1990. Informix Dopo una breve e disastrosa parentesi nel campo dell’office automation, nel 1994 Informix Software è ritornata al mercato sempre crescente dei database server e, in collaborazione con Sequent Computer Systems, ha rilasciato la versione 6.00 di Informix OnLine Dynamic Server. La versione 7.00, nello stesso anno, ha riscosso un enorme successo e ha fatto sì che Informix diventasse il secondo database al mondo, scavalcando Sybase. Informix Nel 1995 Informix ha acquistato Illustra (scritto dagli ex membri del team di Postgres) ed ha concentrato i suoi studi sui database relazionali ad oggetti. E’ nato, così, Informix Universal Server. Nel 1996 la versione 8.00 e la versione 9.00 di Informix Universal Server hanno reso Infomix la più importante fra le società operanti nel campo dei DB relazionali ad oggetti. Informix Nel 1997 una leadership sfortunata e una cattiva amministrazione hanno offuscato i successi di Informix. Il 1° aprile 1997 Informix ha annunciato che il reddito era stato inferiore alle aspettative di 100 milioni di dollari. Nel marzo del 2000, Informix ha acquistato Ardent Software. Questo ha portato alla realizzazione di motori multi-dimensionali, quali UniVerse e UniData. UniData Nel 2001, IBM ha acquistato da Informix la tecnologia dei DB, il marchio, i progetti futuri e i 100.000 clienti associati. Informix Nel novembre del 2002, Phillip White, colui che era alla guida di Informix nel 1997, è stato accusato di frode da un grand joury federale e nel 2004 è stato condannato a 2 mesi di carcere, ad una multa di 10.000 dollari, a due anni di libertà vigilata e a 300 ore di servizio civile. Nel 2004 IBM ha rilasciato il database Open Source Cloudscape. Microsoft SQL Server Microsoft SQL Server è il database relazionale prodotto da Microsoft. Nelle prime versioni era utilizzato per basi di dati medio-piccole, ma negli ultimi cinque anni (con l'uscita della versione 2000) è stato utilizzato anche per la gestione di basi di dati di grandi dimensioni. L'ingresso di Microsoft nel mondo dei database di fascia "entrerprise" risale al 1989, quando cominciò la competizione con Oracle, IBM e Sybase che erano i dominatori del mercato. Microsoft SQL Server La prima versione fu SQL Server per OS/2 ed era quasi identica a Sybase SQL Server 4.0 su Unix. Fino al 1994, Microsoft SQL Server riportava tre copyright della Sybase come indicazione della sua origine. In seguito Sybase cambiò il nome del suo prodotto in "Adaptive Server Enterprise" per evitare confusione con "Microsoft SQL Server". Microsoft SQL Server SQL Server 7.0 è stato il primo database server basato su un'interfaccia GUI. L'attuale versione, Microsoft SQL Server 2000, è stata rilasciata nell‘agosto del 2000. Microsoft sta testando il suo successore, SQL Server 2006, e la versione beta è disponibile per il download. Microsoft SQL Server A partire dalla versione 7.0, Microsoft SQL Server è stato dotato di uno strumento, denominato English Query (EQ), che consente agli utenti di fare domande o dare comandi in lingua inglese. Le domande e i comandi vengono tradotti da EQ in query SQL e, dunque, processati da SQL Server. Microsoft ACCESS Access è prodotto dalla Microsoft ed è creato per girare in ambiente Windows. La prima versione, la 1.0, è uscita fra il 1989 e il 1990 quando ancora Windows (alla versione 3.0) non era molto diffuso e lo standard dei programmi database per PC era ancora il DBIII Plus. Intorno al 1993 è uscita la versione 2.0, l'ultima versione precedente l'avvento di Windows 95. Microsoft ACCESS A partire dall'estate del 1995, con l'uscita di Windows 95 è stato rilasciato anche Access 7 (detto anche "per Windows 95") seguito infine, nella primavera del 1997, da Access 97. Nell'estate del 1999 è uscito Access 2000. Come si vede, in media ogni due anni viene rilasciata una nuova versione che a volte è del tutto incompatibile con i formati delle precedenti, creando non pochi disagi fra gli utenti. ORACLE Convenzionalmente, con il termine Oracle ci si riferisce ad uno tra i più famosi database management system. La società informatica che lo produce, la Oracle Corporation, è una delle più grandi del mondo. É stata fondata nel 1977 ed ha la sua sede centrale in California. Il fondatore, nonchè Lawrence J. Ellison. importante azionista, è ORACLE La società negli ultimi anni si è impegnata enormemente nell'appoggiare il sistema operativo GNU Linux facendo in modo che tutte le sue applicazioni fossero disponibili sotto questo sistema operativo e garantendo assistenza ai suoi clienti per lo stesso sistema operativo. L'altra attività di Oracle dopo i database sono i programmi di enterprise resource planning (ERP) di cui è la terza venditrice a livello mondiale dopo SAP e PeopleSoft e prima di Microsoft e Sage. Recentemente ha lanciato una OPA (offerta pubblica di acquisto) proprio sulla PeopleSoft. Firebird SQL Firebird SQL è un database relazionale molto potente che offre un'ampia gamma di funzioni previste nello standard ANSI SQL-92. Viene sviluppato da FirebirdSQL Foundation (di cui IBPhoenix è uno dei maggiori contribuenti) ed è un progetto open source disponibile per moltissimi sistemi operativi compresi Windows, GNU Linux e praticamente tutti gli altri sistemi operativi stile Unix. Firebird SQL Firebird è stato usato nei sistemi di produzione sotto una varietà di nomi dal 1981. Il suo principale punto di forza sta nella completezza delle funzioni previste da SQL che vengono supportate. Questo lo rende uno dei database open source più potenti attualmente disponibili. MySQL MySQL è un DBMS relazionale, composto da un client con interfaccia a caratteri e un server, entrambi disponibili sia per sistemi Unix che per Windows, anche se prevale un suo utilizzo in ambito Unix. MySQL L’ideatore è Michael Widenius, sviluppatore della compagnia svedese TcX. • 1979 - Michael Widenius sviluppa uno strumento per la gestione di database : UNIREG. • 1994 - la TcX inizia a sviluppare applicazioni per il web utilizzando UNIREG, ma sfortunatamente il prodotto richiedeva troppe risorse per riuscire a generare dinamicamente pagine web. MySQL La TcX analizza altri prodotti quali SQL e mSQL; quest'ultimo in versione 1.x non supportava nessun indice e quindi aveva performance peggiori di UNIREG. Widenius contatta Hughes, l'autore di mSQL, per rendere possibile la connessione di mSQL a UNIREG; ma Hughes aveva già apportato modifiche sostanziose a mSQL con la versione 2. • La TcX decide di creare un altro server per database che fosse piu' vicino alle loro esigenze a partire dall'esperienza di UNIREG. MySQL Nel 1995 nasce, così, la versione di MySQL 1.0. Dal 1996, MySQL supporta la maggior parte della sintassi SQL e possiede delle interfacce di linguaggio SQL per 15 diversi linguaggi sia di programmazione che non, compreso un driver ODBC per le piattaforme Windows. Nel 2000, la MySQL AB adotta la licenza GPL (GNU General Public License) per il prodotto MySQL. PicoSQL PicoSQL è un database relazionale client/server che supporta il linguaggio SQL. Le sue caratteristiche principali rispetto ai prodotti concorrenti sono la compattezza, il basso utilizzo di memoria e risorse e la semplicità di installazione e configurazione. Nonostante questo, picoSQL supporta il linguaggio SQL con tutte le sue caratteristiche, gestisce alti livelli di concorrenza e le transazioni. PicoSQL Lo ha sviluppato completamente la Picosoft di Pisa e deriva da un driver ODBC della stessa società che permette di interrogare i file a indice prodotti da applicazioni scritte in COBOL utilizzando strumenti di query e reportistica creati per accedere a database relazionali, come MS Access, Excel, Crystal Report, ecc. Trasformare questo driver in un DB è stato relativamente semplice, per cui l'azienda ha deciso di renderlo disponibile come Open Source. Data la sua “leggerezza” e modularità, picoSQL può essere facilmente adattato per qualsiasi sistema, dal pocket-pc al mainframe. SQLite SQLite è una libreria C che implementa un DBMS SQL incorporabile all'interno di applicazioni. Il suo creatore è D. Richard Hipp, che lo ha rilasciato come software Open Source di pubblico dominio, privo di qualsiasi licenza SQLite Essendo una libreria, non è un processo stand-alone utilizzabile di per sé, ma può essere linkato all'interno di un altro programma. È utilizzabile con C/C++ ed esistono binding anche per altri linguaggi, in particolare Tcl. È integrato nella versione 5 di PHP. STORIA DELLA PROGETTAZIONE DI UN DATABASE BASE DI DATI E’ una raccolta di dati progettati per essere fruiti in maniera ottimizzata da differenti applicazioni e utenti diversi Semplice: facilmente ritrovabili Efficiente: rispetto al tempo CPU e spazio RAM Efficace: informazioni rappresentative della realtà in esame Sicuro: operazioni consentite a soggetti identificabili e sicuri SISTEMA DI GESTIONE DI UNA BASE DI DATI o DBMS Prodotti software che permettono di creare e di interagire con una base di dati, consentendo opportune operazioni agli utenti autorizzati, nel rispetto delle regole prestabilite. Le richieste degli utenti non devono violare alcun vincolo sui dati. FUNZIONI DI UN DBMS Permettere la creazione di una nuova base di dati Facilitare gli utenti nell’inserimento, cancellazione, modifica Rendere possibile l’estrazione di informazioni interrogando la base di dati DDL Data Definition Language DML Data Manipulation Language QL Query Language Superare i limiti di: ridondanza integrità indipendenza concorrenza sicurezza LIMITI DEGLI ARCHIVI TRADIZIONALI CLIENTI Merceria: INTIMO e più codcliente cognome nome indirizzo città 010 Bianchi Lucia Via roma Bari 011 Giglio Maria Via nuova Foggia 012 Marini Claudia Piazza vecchia Lecce VENDITE codcliente Data codart descrizione 010 10-mag-05 P01 Calze 010 11-giu-05 P02 010 15-lug-05 011 marca quantità Sissi 2 Top Pompea 1 P05 Pigiama Alpina 1 7-mag-05 P01 Calze Sissi 5 011 20-giu-05 P02 Top Pompea 1 012 3-sett-05 P01 Calze Sissi 1 LIMITI 9 Ridondanza: info ripetute per stessi articoli 9 Incongruenza: le modifiche vengono apportate a tutti gli articoli con ugual codice? 9 Inconsistenza: se uno stesso articolo si ritrova con marche diverse quale sarà quella giusta? 9 Dipendenza dei programmi dai dati: se cambia il tracciato record o la cartella di un archivio devo cambiare l’applicativo 9 Difficoltà nel gestire l’integrità dei dati: va scritto codice ad hoc nell’applicativo 9 Difficoltà nel gestire la concorrenza: in un file condiviso due utenti tentano la modifica, quale l’esito? 9 Limitata sicurezza: non tutti gli utenti hanno stessi permessi sui dati 9 Scarsa protezione dei dati da guasti accidentali MODELLI PER IL DATABASE LIVELLO CONCETTUALE Entità MODELLO E/R GERARCHICO 1970 LIVELLO LOGICO Attributi e vincoli RETICOLARE fine anni 70 MODELLO RELAZIONALE LIVELLO FISICO Più file separati File unico, FLAT FILE z Differenze fra i modelli Modello gerarchico z z Volendo tracciare un percorso storico che attraversi l’evoluzione subita dai DBMS nel corso degli anni, è necessario iniziare la trattazione a partire dal modello gerarchico. Si può fissare la data di nascita di questo modello alla fine degli anni ’60, quando IBM sviluppa e introduce sul mercato IMS, il primo database gerarchico, ma anche il primo DBMS in assoluto Definizione :Modello Gerarchico z Un database gerarchico è un insieme di archivi. Gli archivi sono composti da record chiamati segmenti. I segmenti sono in rapporto gerarchico tra loro attraverso legami di tipo padre-figlio. Modello Gerarchico:Struttura ad Albero z La struttura ad albero che caratterizza il modello gerarchico si basa sulla possibilità di individuare un segmento principale, il padre o la radice, dal quale dipendono n segmenti figli, che a loro volta si trasformano in padri per altri figli e così via Totale dipendenza dal padre ed è possibile fare riferimento solo attraverso il passaggio dal nodo principale. Non è possibile dal figlio risalire al padre. Ricapitoliamo MODELLO GERARCHICO Il primo modello gerarchico si affermò nel 1968 si chiamava IMS (Information Management System) e fu sviluppato da IBM. Oggi resistono sui mainframe. I dati sono organizzati in record connessi tra loro secondo strutture ad albero. L’albero è formato da 2 tipi di record: il record OWNER (proprietario) e il record MEMBER (componente). Ogni record del database, che non sia la radice dell' albero, deve avere uno e un solo padre Es. il file system del sistema operativo: ogni cartella è contenuta in una cartella padre tranne che la root Limiti: non si presta a rappresentare in modo efficiente le associazioni N:M Esempio db gerarchico scuola docente Tanti alberi quante sono le scuole S01 D01 De Nicolo S02 D07 Sicolo ITCS Giordano Anita D02 Mitolo Nicola D06 Nimeo Marini Carlo >>Ridondanza<< ITCS Dell’Olio Lucia D05 Rosa D01 De Nicolo Anita Modello Gerarchico al Modello Reticolare z z Questa architettura mal si adatta ad una gestione moderna e dinamica delle basi di dati. Il modello gerarchico rappresenta una prima soluzione al problema della gestione di grosse moli di dati ma la sua intrinseca rigidità ne limita la potenzialità; per questo, nasce il modello reticolare che dotato di maggiore flessibilità, può adattarsi a situazioni più complesse Modello Gerarchico al Modello Reticolare z z In una struttura gerarchica un segmento figlio può avere solo un segmento padre; Non è così nel modello reticolare: ogni record può avere un numero qualsiasi di record subordinati e di record precedenti e le correlazioni vengono espresse attraverso record particolari, chiamati record di collegamento (member), che formano delle catene tra le varie parti del sistema. Modello Reticolare z z Le strutture utilizzate nel modello reticolare sono due, il record (si pensi ai comuni file) e il set, che permette di correlare i record, per mezzo di catene di puntatori. Dunque una base di dati reticolare è definita con riferimento ad uno schema, che contiene tipi record collegati fra loro da tipo set. Ricapitoliamo: MODELLO RETICOLARE Si affermò CODASYL (fine anni 70) sviluppato dal gruppo di standardizzazione del linguaggio COBOL Un record puo’ avere uno o piu’ record padre e cio’ permette di evitare i problemi di ridondanza Il modello reticolare e’ così chiamato poiche’ ogni suo schema puo essere rappresentato per mezzo di un grafo (o una rete), con nodi e archi. Limiti: Complessa la gestione difficile il progetto Esempio db reticolare scuola S01 D02 Mitolo docente ITCS Giordano Nicola D05 D01 De Nicolo Marini Carlo S02 ITCS Dell’Olio Anita D07 Sicolo Non si ha il limite di un solo record superiore: corrispondenza molti a molti Lucia Reticolare - Relazionale z La caratteristica fondamentale dei linguaggi per il modello reticolare e quella di essere basati su una visita della base di dati, effettuata seguendo i collegamenti stabilite le occorrenze dei set. Sono ovviamente possibili anche accessi diretti o scansioni sequenziali, ma l'operazione fondamentale per la visita di una base di dati reticolare e quella di navigazione sulla base di dati. Questa navigazione avviene accedendo a singoli record, quindi ad un livello piu basso di quanto non avvenga nel modello relazionale, in cui, le operazioni elementari coinvolgono intere relazioni (o comunque insiemi di tuple). Per questo motivo, l'accesso a basi di dati reticolari avviene normalmente attraverso un linguaggio ospite cioe un linguaggio di programmazione tradizionale (per esempio COBOL o PL1) esteso in modo tale che sia possibile specicare, oltre alle istruzioni ordinarie, anche i comandi DML. MODELLO RELAZIONALE •Il modello relazionale è stato introdotto nel 1970 da E.F.Codd(un ricercatore dell’IBM di San Jose, CA, USA) allo scopo di favorire l’indipendenza dei dati •I modelli preesistenti (gerarchico e reticolare) erano fortemente influenzati da considerazioni di natura fisica, che enfatizzavano quindi aspetti di efficienza rispetto a quelli di semplicitàd’uso: •VELOCI MA COMPLICATI!! •Rispetto agli altri modelli, quello relazionale si caratterizza per: •Semplicità concettuale •Concetti pochi e chiari Modello Relazionale z z z z z Nel modello relazionale i dati sono organizzati in tabelle che rappresentano sia le entita’, sia le relazioni tra di esse: esistono quindi tabelle di entita’ e tabelle di relazioni. Nel modello relazionale, a differenza dei precedenti, non c' e’ alcun meccanismo esplicito per rappresentare i legami logici tra i diversi tipi di record che non sia la relazione. La modifica di un dato o di un legame comporta la manipolazione di un solo record di una tabella. Nel modello relazionale, a differenza dei precedenti, si realizza l' indipendenza logica, e’ cioe’ possibile modificare le strutture senza dover modificare i programmi. Si possono inoltre modificare le strutture a DB aperto, con gli utenti collegati. Che cos’è un DB Relazionale z z z z Un Database Relazionale e’ un insieme di tabelle che rappresentano ogni tipo di informazione. E’ un insieme di relazioni, ovvero: Lo schema di un DB relazionale è un insieme di schemi di relazioni con nomi distinti, più un nome per il DB R= {R1(X1), R2(X2), …, Rm(Xm)}(Ri≠Rj i ≠j) Modello Relazionale z Varie fasi da seguire per la progettazione z Nuovo modo di pensare la progettazione. IL PROCESSO DI PROGETTAZIONE DEL DATABASE Il processo consta di quattro fasi: Raccolta e analisi dei requisiti 2. Disegno del database concettuale 3. Disegno del database logico 4. Disegno del database fisico 1. LE FASI DI PROGETTAZIONE DI UN DATABASE Indipendente dal DBMS Miniworld RACCOLTA ED ANALISI DEI REQUISITI 1 Requisiti Funzionali Requisiti sui Dati ANALISI FUNZIONALE DISEGNO CONCETTUALE Specifia transazioni di alto livello Schema Concettuale (Usando Data Model di alto livello) 2 3 DISEGNO LOGICO (DATA MODEL MAPPING) Specifico del DBMS DISEGNO PROGRAMMI APPLICATIVI Schema Logico (Concettuale) Usando il data model del DBMS IMPLEMENTAZIONE TRANSAZIONI DISEGNO FISICO Programmi Applicativi Schema Interno 4 1. Raccolta e analisi dei requisiti Il progettista del DB intervista i potenziali utenti dei DB per capire e documentare i requisiti utente. Output: z Requisiti sui dati z Requisiti funzionali – Operazioni definite dall'utente (transazioni) che saranno applicate al DB z Es: aggiornamenti, ricerche, … – Specifica dei requisiti funzionali attraverso Data Flow Diagrams 2. Disegno del database concettuale Creazione dello schema concettuale, usando un data model concettuale ad alto livello Output: – Descrizione concisa dei requisiti utente dei dati inclusiva di una descrizione dettagliata di tipi di dati, relazioni e vincoli fatta usando i concetti del data model ad alto livello. z z Poiché non vi sono dettagli implementativi, tale descrizione può essere usata per comunicare con utenti non tecnici Tale documentazione può essere usata anche come riferimento per assicurarsi di aver considerato tutti i requisiti dell’utente Disegno del database concettuale (2) z Questo approccio abilita il progettista a concentrarsi sui dati ignorando i dettagli di memorizzazione. z Dopo aver disegnato lo schema concettuale, le operazioni di base del data model possono essere usate per specificare le operazioni di alto livello individuate durante l'analisi funzionale (passo 1) Modelli concettuali… un po’ di storia z z z z z Nel tempo sono stati proposti numerosi modelli concettuali per la progettazione di basi di dati modelli semantici, RM/T, ... [inizio anni ‘70] Entity-Relationship (E/R) [entità-associazione] [Chen 1976] IDEF1X [standard adottato dagli uffici governativi USA] UML (Universal Modelling Language) [1999] Il modello Entity-Relationship (ER) E.R.: Introduzione Il modello Entità-Relazione (ER) è un diffusissimo data model di alto livello, estesamente utilizzato per definire lo schema concettuale di un database. E’ stato concepito per essere più vicino ai concetti ‘umani’, e quindi facilmente comprensibile anche ad utenti non tecnici Il modello ER ha avuto una grandissima diffusione principalmente per i formalismi grafici semplici e chiari che incorpora E.R.: Introduzione (2) z Il modello ER è utilizzato in molti tool per la progettazione di database – Es. Platinum ER-Win z z z Esistono degli algoritmi per convertire automaticamente un modello ER in uno schema di database per DBMS commerciali Fu introdotto da Chen nel 1976 E’ stato migliorato negli anni da Chen ed altri (tra cui Elmasri), portando all’Enhanced-ER (EER) E.R.: Introduzione (3) Il modello ER descrive i dati con tre concetti fondamentali: – Entità – Attributi – Relazioni Entità z Le entità corrispondono a classi di oggetti del mondo reale (fatti, persone, …) che hanno proprietà omogenee, comuni ed esistenza “autonoma” ai fini dell’applicazione di interesse. – Un’entità può essere un oggetto fisico (casa, impiegato, …) o un oggetto concettuale (un lavoro, una società, …) z Ogni entità ha un nome che la identifica univocamente nello schema e viene rappresentata graficamente con un rettangolo con il nome dell’entità all’interno. Impiegato Rappresentazione ER dell’entità “Impiegato” Studente Rappresentazione ER dell’entità “Studente” Attributi z Ogni entità ha delle proprietà dette attributi – Esempio: l'entità impiegato ha attributi nome, età, indirizzo, salario, telefono,… z z Ogni entità è caratterizzata da un valore per i suoi attributi Ogni attributo ha un nome che lo identifica e viene rappresentata graficamente con un’ellisse contenente il nome dell’attributo, collegata all’entità cui si riferisce. Nome Matricola Studente Rappresentazione ER dell’entità “Studente” con gli attributi “Nome” e “Matricola” Entità e Attributi: Esempio Esempio: entità Impiegato Nome = John Smith E1 Età = 55 Tel_casa = 713-749-2630 Indirizzo = 2311 Kirby, Houstin, Texas Tipo di Entità Entità con gli stessi attributi di base sono raggruppati in un tipo di entità. Esempio: Tutte le persone che lavorano per un dipartimento possono essere definite con l’entità Impiegato Nome del Tipo di Entità: Impiegato (Schema o Intensione) Nome, Età, Stipendio e1 (John Smith, 55, 80k) e2 (Fred Brown, 40, 30k) Insieme di Entità (Judy Clark, 25, 20k) … (Estensione) e3 Un tipo di entità descrive lo schema (o intenzione) per un insieme di entità Le entità individuali di un particolare tipo di entità sono raggruppate in una collezione o insieme detta estensione del tipo di entità. Tipi di Attributi Nel modello E-R abbiamo diversi tipi di attributi: •Semplice •Composto Attributi Semplici e Composti z z Attributi semplici: ogni entità ha un valore singolo (atomico) per tale attributo Attributi composti: possono essere divisi in sottoparti, che rappresentano informazioni di base con loro significati indipendenti z Esempio: Attributo Indirizzo Via = 2311 Kirby Indirizzo Città = Houston Stato = Texas Codice = 77001 Attributi Semplici e Composti (2) Gli attributi composti possono formare una gerarchia Via Indirizzo z Città Numero Nome Interno Stato Codice L’utilizzo di un attributo semplice o di uno composto dipende dalla necessità o meno di trattare separatamente le sottoparti. Attributi chiave di un tipo di entità Un importante vincolo sulle entità di un tipo di entità è la chiave o vincolo di unicità. L’attributo chiave di un tipo di entità è un attributo che deve avere un valore univoco per ogni entità. Esempio: Il codice fiscale di una persona – Talvolta più attributi insieme formano una chiave: in tal caso tali attributi possono essere raggruppati in un attributo composto che diventa chiave. – Alcuni tipi di entità possono avere più di un attributo chiave – In notazione ER l’attributo chiave è rappresentato sottolineato nell'ovale. Esempio: database Company Requisiti per il database Company – La compagnia è organizzata in DIPARTIMENTI. Ogni Dipartimento ha un nome, un numero ed un impiegato che lo gestisce. Bisogna tener traccia della data di insediamento del manager. Un dipartimento può avere più locazioni. – Ogni dipartimento controlla una serie di PROGETTI. Ogni progetto ha un nome, un numero ed una singola locazione – Per impiegato si tiene traccia di: nome, SSN, indirizzo, salario, sesso e data di nascita. Ogni impiegato lavora per un dipartimento e può lavorare su più progetti. Teniamo traccia del numero di ore settimanali che un impiegato spende su un progetto e del supervisore di ogni impiegato – Ogni impiegato ha una serie di PERSONE A CARICO. Per ogni persona a carico, registriamo: nome, sesso, data di nascita e parentela con l’impiegato Disegno concettuale del database Company Descriviamo i tipi di entità per il database COMPANY. In accordo ai requirements possiamo identificare quattro tipi di entità: 1. DIPARTIMENTO Nome, Numero, {Sedi}, Manager, Datains_manager Nome e Numero sono entrambi attributi chiave 2. PROGETTO Nome, Numero, Luogo, Dip_controllo Nome e Numero sono entrambi attributi chiave Disegno concettuale del database Company (2) 3. IMPIEGATO Nome, SSN, Sesso, Indirizzo, Stipendio, DataNascita, Dipartimento, Supervisore SSN è un attributo chiave Nome e Indirizzo sono attributi composti (occorrerebbe verificare con l'utente se ha bisogno di riferire ai componenti individuali) 4. PERS_A_CARICO Sesso, DataNascita, Impiegato, Nome_pers_carico, Parentela Disegno concettuale del database Company (3) Dobbiamo però rappresentare: – Il fatto che un impiegato può lavorare su più progetti – Il numero di ore settimanali di un impiegato su ciascun progetto z Si può aggiungere un attributo a IMPIEGATO “Lavora_su” composto di due componenti semplici (Progetto, Ore) IMPIEGATO Nome (FName, Minit, LName), SSN, Sesso, Indirizzo, Stipendio, DataNascita, Dipartimento, Supervisore, {Lavora_su(Progetto, Ore)} z In alternativa, le stesse informazioni si potrebbero mantenere nel tipo di entità PROGETTO con un attributo composto – Addetti (Impiegato, Ore) Disegno concettuale del database Company (4) Esistono varie relazioni implicite: – L'attributo Manager di DIPARTIMENTO si riferisce a un impiegato che gestisce il dipartimento: – L'attributo Dip_controllo di PROGETTO si riferisce al dipartimento che controlla il progetto; – L'attributo Dipartimento di IMPIEGATO si riferisce al dipartimento per cui lavora l'impiegato; Nelle disegno iniziale queste associazioni tra entità sono rappresentabili come attributi, ma durante il processo di raffinamento nel modello ER questi riferimenti dovrebbero essere rappresentati come relazioni. RELAZIONI, RUOLI E VINCOLI STRUTTURALI Tipi e istanze di relazioni Le relazioni corrispondono a legami logici tra entità, significativi ai fini dell’applicazione di interesse. Un tipo di relazione è un’associazione tra n tipi di entità E1, E2,…,En. Le occorrenze o istanze di relazione associano n entità dei tipi di relazione richiesti Ogni tipo di entità è detto partecipare al tipo di relazione Il grado di un tipo di relazione è il numero di entità che vi partecipano. Se il grado è 2, la relazione è detta binaria Tipi e istanze di relazioni (2) Esempio: vogliamo rappresentare il fatto che ogni impiegato ei lavora per un dipartimento dj. Definiamo il tipo di relazione LAVORA_PER tra i due tipi di entità IMPIEGATO e DIPARTIMENTO: ogni relazione ri associa una entità IMPIEGATO ei con una entità DIPARTIMENTO dj. … Impiegato: Tipo di Entità d1 d2 … r1 r2 r3 r4 Lavora_Per: Relazione … e1 e2 e3 e4 Dipartimento: Tipo di Entità Grado di un tipo di relazione Il grado di un tipo di relazione è il numero di tipi di entità partecipanti Esempi: – LAVORA_PER è di grado 2 (binaria). – La relazione SUPPLY è un tipo di relazione ternaria, dove ogni istanza di relazione ri associa tre entità, un fornitore s, una parte p e un progetto j ogni volta che s fornisce la parte p al progetto j. e1 r1 e2 … Fornitore d1 r2 d2 … r3 r4 e1 … e2 … Parte Supply Progetto Le relazioni possono essere di qualsiasi grado ma le più ricorrenti sono quelle binarie. Rappresentazione di Relazioni In uno schema ER, un tipo di relazione ha un nome che lo identifica univocamente e viene rappresentato graficamente con un rombo, contenente il nome della relazione, e da linee che lo collegano ai tipi di entità che mette in relazione. Impiegato Lavora_Per Rappresentazione ER della relazione “Impiegato lavora per Dipartimento” Dipartimento Relazioni come attributi A volte (soprattutto in fase di disegno iniziale) può essere conveniente considerare un tipo di relazione come un attributo di una delle entità partecipanti, per semplificare la definizione dello schema. Le relazioni verranno poi esplicitate durante il raffinamento del progetto. Quando si considera una relazione binaria come attributo esistono ovviamente due alternative, in base a quale entità viene scelta per contenere l’attributo Relazioni come attributi: Esempio Il tipo di relazione LAVORA_PER può essere rappresentato: – Tramite un attributo Dipartimento nel tipo di entità IMPIEGATO. Per ogni entità impiegato si riferisce all'entità dipartimento in cui lavora. Il dominio dell'attributo Dipartimento è l’insieme di tutte le entità DIPARTIMENTO. oppure – tramite un attributo multivalued Impiegati del tipo di entità DIPARTIMENTO. Per ogni entità dipartimento il valore dell'attributo Impiegati è l'insieme degli impiegati che lavorano in quel dipartimento. Il dominio dell’attributo Impiegati è l'insieme delle entità IMPIEGATO. Se entrambi gli attributi sono utilizzati per rappresentare la relazione LAVORA_ PER, allora essi sono vincolati ad essere l'uno l'inverso dell'altro Nomi di Ruolo z Ogni entità che partecipa a qualche tipo di relazione riveste un ruolo particolare nella relazione. – Il nome di ruolo specifica il ruolo che riveste in ciascuna istanza di relazione una entità partecipante. z Esempio: nel tipo di relazione LAVORA_PER, – IMPIEGATO gioca il ruolo di impiegato o di addetto – DIPARTIMENTO gioca il ruolo di dipartimento o di datore di lavoro. Vincoli sui tipi di relazioni Ogni tipo di relazione ha un insieme di vincoli che limitano le combinazioni possibili di entità che possono partecipare ad istanze della relazione. Questi vincoli sono determinati dalla situazione del miniworld che le relazioni rappresentano. Esempio: – se la società ha la regola che ogni impiegato deve lavorare esattamente per un dipartimento, si vuole descrivere questo vincolo nello schema. Rapporto di cardinalità Deve essere indicato per ciascun tipo di entità che partecipa ad una relazione, e permette di specificare il numero minimo e massimo di istanze di relazione a cui le occorrenze delle entità coinvolte possono partecipare. Impiegato (1,1) Lavora_Per (0,N) Dipartimento Rappresentazione ER della relazione “Impiegato lavora per Dipartimento”, con rapporto di cardinalità N:1 • MAX: Ogni dipartimento può avere numerosi impiegati, e ciascun impiegato lavora per un solo dipartimento • MIN: Un dipartimento potrebbe non avere impiegati, mentre un impiegato deve sempre essere assegnato ad un dipartimento Rapporto di cardinalità E’ possibile assegnare un qualunque intero non negativo a un rapporto di cardinalità, con l’ovvio vincolo che la cardinalità minima deve essere minore o uguale alla cardinalità massima. Nella maggior parte dei casi si utilizzano solo tre valori: 0, 1 e N. – Il valore 0 per la cardinalità minima indica una partecipazione opzionale del tipo di entità alla relazione. – Il valore 1 per la cardinalità minima indica una partecipazione obbligatoria del tipo di entità alla relazione. Esiste una notazione alternativa….. Rapporto di cardinalità: Esempi La relazione binaria GESTISCE tra IMPIEGATO e DIPARTIMENTO è di rapporto di cardinalità 1:1 (un impiegato può gestire al più un dipartimento, ed un dipartimento deve sempre avere un solo manager) Impiegato e1 e2 e3 Gestisce r1 r2 … Impiegato Gestisce (1,1) Dipartimento d1 d2 d3 … r3 … e4 (0,1) Dipartimento Rapporto di cardinalità: Esempi La relazione binaria LAVORA_SU tra IMPIEGATO e PROGETTO è di rapporto di cardinalità M:N, (poiché un impiegato può lavorare su più progetti, e più impiegati possono lavorare sullo stesso progetto) Impiegato M Lavora_Su N Progetto r1 e1 r2 r3 r4 e2 e3 e4 p2 p3 Lavora_Su … r5 … … Impiegato p1 Progetto Attributi di Tipi di Relazioni (2) Gli attributi dei tipi di relazioni 1:1 e 1:N possono essere trasferiti a uno dei tipi di entità partecipanti. Es:per il tipo di relazione GESTISCE, la data di insediamento può essere l'attributo di IMPIEGATO oppure di DIPARTIMENTO, perché si tratta di un tipo di relazione 1:1. Per un tipo di relazione 1:N, un attributo di relazione può essere trasferito solo al tipo di entità dalla parte N della relazione. Es: nei tipo di relazione LAVORA_PER un attributo data_inizio per inizio del rapporto dell'impiegato con il dipartimento, può essere incluso come un attributo del tipo di entità IMPIEGATO. La scelta di considerare l’attributo nel tipo di entità o nel tipo di relazione è una scelta soggettiva del progettista di DB. Attributi di Tipi di Relazioni (3) Per tipi di relazioni M:N non è sempre possibile mantenere l'attributo in una delle due entità partecipanti in quanto tale attributo può essere determinato dalla combinazione delle entità (Ad esempio l'attributo Ore della relazione M:N LAVORA_SU è determinato dalla combinazione impiegato-progetto) RAFFINAMENTO DEL MODELLO ER RAFFINAMENTO DEL MODELLO ER z Si procede a cambiare gli attributi che rappresentano relazioni in tipi di relazioni. z I rapporti di cardinalità e il vincolo di partecipazione di ciascun tipo di relazione si determinano a partire dai requisiti; Se necessario si consulta l'utente. – Nell'esempio specifichiamo i seguenti tipi di relazioni 1. z GESTISCE, tipo di relazione 1:1 tra IMPIEGATO e DIPARTIMENTO. Partecipazione: IMPIEGATO: parziale DIPARTIMENTO: (richiesto a utente) totale Attributo: data_Ins RAFFINAMENTO DEL MODELLO ER 2. z 3. z LAVORA_PER, tipo di relazione 1:N tra DIPARTIMENTO e IMPIEGATO Partecipazione: DIPARTIMENTO : totale IMPIEGATO : totale CONTROLLA, tipo di relazione 1:N tra DIPARTIMENTO e PROGETTO Partecipazione: DIPARTIMENTO : totale PROGETTO : (richiesto a utente) parziale RAFFINAMENTO DEL MODELLO ER 4. z 5. z z SUPERVISIONE, tipo di relazione 1:N tra IMPIEGATO (ruolo supervisore) e IMPIEGATO (ruolo subordinato) Partecipazione: IMPIEGATO: (?) richiesto a utenti parziale IMPIEGATO: (?) richiesto a utenti parziale (non tutti gli impiegati sono supervisori e non tutti gli impiegati hanno un supervisore) LAVORA_SU, tipo di relazione M:N tra IMPIEGATO e PROGETTO. Partecipazione: IMPIEGATO totale PROGETTO totale Attributo:Ore RAFFINAMENTO DEL MODELLO ER 6. z z A_CARICO, tipo di relazione 1:N tra IMPIEGATO e PERS_CARICO. Partecipazione: IMPIEGATO parziale PERS_A_CARICO : totale Si eliminano quindi tutti gli attributi che sono stati convertiti in relazioni. E importante eliminare la ridondanza, che può essere eventualmente aggiunta in fasi successive MODELLO ER RISULTANTE Numero Nome Cognome LAVORA_PER N 1 Indirizzo Nominativo Sesso Data_Ins Salario 1 SSN DIPARTIMENTO GESTISCE 1 DataN CONTROLLA Ore supervisor supervisee SUPERVISIONA N M LAVORA_SU N N PROGETTO 1 HA_A_CARICO Nome N Sesso DataN Locazione Numero P_A_CARICO Nome 1 NumeroDip IMPIEGATO 1 Locazioni Nome Parentela 3. Disegno del database logico Consiste nella traduzione dello schema concettuale nel modello dei dati del DBMS z Il risultato è uno schema logico, espresso nel DDL del DBMS z In questa fase si considerano anche aspetti legati a: z integrità e consistenza (vincoli) z efficienza Descrive in maniera corretta ed efficiente tutte le informazioni contenute nel modell E/R. Ristrutturazione del modello E/R. z Traduzione verso il modello Logico. z Obbiettivo: semplificare e Ottimizzare il progetto. z Progettazione logica nel modello reticolare Abbiamo notato come la progettazione logica possa essere articolata in due sottofasi e come solo la seconda di esse (la \traduzione") dipenda effettivamente dal modello logico di interesse. z Per tradurre schemi E-R ristrutturati in schemi reticolari. Per certi aspetti, la situazione e ancora piu semplice che per il modello relazionale, perche si puo far corrispondere tipi record alle entità e tipi set alle associazioni. z Progettazione logica nel modello reticolare (2) z Per le associzioni, si deve pero notare che un tipo set corrisponde ad una associazione uno a molti fra tipi record diversi, per cui dovra essere necessario prestare particolare attenzione ai casi piu complessi, e cioe alle associazioni molti a molti, a quelle ternarie (o piu che ternarie) e a quelle ricorsive. Relazione uno a molti Una associazione uno a molti puo essere tradotta direttamente con un tipo set. abbiamo due tipi record e un tipo set. Relazione molti a molti Una associazione molti a molti puo essere tradotta direttamente con un tipo set. abbiamo due tipi record e un tipo set. Conclusioni: La traduzione del Modello E/R si adatta molto di pù seplicemente verso un modello relazionale in quanto logicamente più semplice e lineare. z L'organizzazione dei dati del modello reticolare ricorda piu le strutture fisiche dei dati che le proprieta intrinseche dei dati stessi. z Piu complicato molto più veloce(presenza di punatori) z Presenza di una lista circolare dall’owen, da ciascuna occorrenza del member e possibile risalire all'owner. z 4. Disegno del database fisico z Produce lo schema fisico della base di dati ricevendo in ingresso lo schema logico. z In questa ultima fase si operano scelte spesso strettamente dipendenti dallo specifico DBMS utilizzato z Ad esempio, lo stesso schema logico può essere fisicamente rappresentato in modo diverso in DB2 e in Oracle, al fine di meglio sfruttare le caratteristiche dei due DBMS z Il risultato è lo schema fisico, che descrive le strutture di memorizzazione e accesso ai dati (tablespace, clustering, indici, ecc.) Riassumiamo z z z z z La progettazione di un sistema informativo è guidata dai dati, e si avvale di una metodologia che consta di diverse fasi Ogni fase produce uno schema, facendo uso di uno specifico modello Per la progettazione concettuale si fa uso di un modello concettuale che, astraendo da aspetti specifici dei DBMS, rappresenta un valido compromesso tra ciò che si dovrà realizzare e la realtà che si deve modellare Tutti i modelli concettuali si basano su alcuni meccanismi di astrazione fondamentali: classificazione, aggregazione, generalizzazione Operazioni Consentite z z z z z z z z z z z z z Affinche’ un RDBMS possa dirsi relazionale deve essere in grado di eseguire le tre operazioni relazionali di base: la proiezione, la selezione e il join. La Proiezione e’ una visualizzazione "verticale" della tabella (solo alcune colonne). La Selezione e’ una visualizzazione "orizzontale" della tabella (solo alcune righe che soddisfano una condizione). Il Join e’ l' unione di record che sono memorizzati su tabelle diverse. Esistono diversi tipi di join: il prodotto cartesiano, il join naturale, il self join e l' outer join. Il Prodotto cartesiano di due tabelle T1 e T2 e’ un insieme con tutte le possibili coppie di ogni record T1 con ogni record T2. Il prodotto cartesiano completo non ha alcun interesse, occorre quindi selezionare da questo le righe significative, cioe’ quelle in cui il campo in comune tra le tabelle in join ha un contenuto uguale. Queste sono le condizioni di join che legano insieme due o piu’ tabelle in un Join naturale. Il Self join e’ un join di una tabella con se stessa. L' Outer join e’ un join tra due tabelle su una delle quali il record in join puo’ mancare ma il record dell' altra tabella viene visualizzato comunque. Tra le caratteristiche di un database relazionale vi e’ la possibilita’ di eseguire operazioni insiemistiche sulle righe estratte da due o piu’ tabelle: unione, intersezione e differenza. L' Unione consiste nell' estrazione di tutte le righe che compaiono in almeno una delle tabelle. L' Intersezione consiste nell' estrazione delle righe comuni a tutte le tabelle. La Differenza consiste nell' estrazione delle righe che compaiono nella prima tabella ma non nella seconda. Join: Database CPLATAM CPLSAS CPLUSER Nome Data_Nasc ita Lavoro Nome Studi Master pasquale 25/03/77 consulente pasquale Laureato Y Select studi, lavoro from cpluser.Tab1 A, cplsas.Tab2 B where A.Nome=B.Nome Output: Laureato Consulente 1 row selected Database orientati agli oggetti L’OODB (Object Oriented DataBase è un modello più recente di database che nasce dall’esigenza di gestire informazioni multimediali: immagini, audio, video, documenti e risorse Internet. Insieme ai dati nel database sono specificate le modalità di accesso più adatte al formato che si sta trattando: i metodi e i dati sono inglobati nelle classi proprio come prescrive il paradigma della programmazione Object Oriented. Esempi di DBMS orientati agli oggetti sono Versant, Objectstore e Poet