Modellare Database con UML

UML ( Unified Modeling Language ) è diventato uno standard per la modellazione di applicazioni scritte con linguaggi ad oggetti, ne abbiamo parlato in un articolo di qualche giorno fa. Per quanto riguarda la modellazione della struttura di un database, il formalismo più utilizzato è quello dei diagrammi E-R ( Entità-Relazione ) dei quali abbiamo parlato in un altro articolo di questo blog. UML può essere utilizzato però anche per i database, con il vantaggio di poter passare direttamente da un’analisi object-oriented ad una progettazione che prenda in considerazione tabelle, strutture dati ed algoritmi senza utilizzare formalismi differenti. In pratica, se nell’analisi vengono identificate le classi di oggetti come Clienti e Fatture, si può decidere di mappare alcune di queste classi su tabelle di database senza dover convertire il diagramma UML di analisi in uno schema E-R. Alcuni strumenti consentono perfino di generare automaticamente gli script di creazione delle tabelle a partire dai diagrammi creati.
In UML ci sono molti tipi di diagrammi per rappresentare i diversi aspetti dell’applicazione, ma occorre prenderne in considerazione uno soltanto per descrivere la struttura di un database, i Class Diagram.


Class Diagram UML

Come si può notare dalla figura, ogni classe viene rappresentata tramite un rettangolo che viene suddiviso in tre sezioni. Nella prima sezione viene inserito il nome della classe, nella seconda vengono inseriti gli attributi e nella terza vengono indicate le operazioni che gli oggetti della classe possono compiere. Nel caso una classe venga convertita in una tabella di un database, quest’ultima parte non verrà presa in considerazione.
Una relazione di ereditarietà viene rappresentata da una freccia dalla punta bianca che parte dalla classe derivata fino alla classe base. Una relazione di aggregazione, invece, viene rappresentata tramite una linea che congiunge le due classi, con un rombo dalla parte della classe che mantiene i riferimenti agli oggetti dell’altra classe; questo rombo sarà pieno per indicare che non si tratta di un semplice riferimento, bensì di una relazione di appartenenza. Ai due estremi della linea è poi possibile indicare la cardinalità della relazione, cioè il numero di oggetti coinvolti.
Per convertire il diagramma UML in database occorre seguire alcune regole, ovviamente la prima operazione da fare è creare una tabella per ogni classe definita ed un campo per ognuno dei suoi attributi. L’operazione successiva riguarda la definizione della chiave primaria per ognuna delle tabelle definite. La definizione delle chiavi primarie può essere sfruttata per implementare le associazioni fra le classi del diagramma e l’aggiunta di una chiave straniera all’interno della tabella collegata. Nel caso ci sia un rombo pieno nel diagramma UML, potranno essere applicate ulteriori considerazioni: se la cardinalità dell’associazione è 1:1 si può includere la seconda tabella nella principale, mentre per associazioni 1:N si potrà applicare un vincolo di integrità referenziale tra le tabelle.
Un diagramma UML può anche descrivere il comportamento associato alle varie classi e questo può essere utilizzato anche per i database. Un moderno DBMS difatti, offre diversi strumenti al suo interno per effettuare un’operazione come il calcolo dello sconto o la promozione di alcuni impiegati, in quest’ultimo caso potrebbe essere utile utilizzare le stored procedure, che rispetto all’implementazione sul lato client offrono maggiore sicurezza perché risiedono direttamente sul server.
I class diagram di UML costituiscono una valida alternativa ai diagrammi E-R per la modellazione della struttura di un database relazionale, semanticamente le due notazioni si equivalgono, però l’uso dei class diagram consente di uniformare la progettazione delle applicazioni a quelle delle fonti dati per i software gestionali.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Database e contrassegnata con . Contrassegna il permalink.