Nel tutorial di oggi imparerai come utilizzare un'utilità di modellazione visiva del database per disegnare un diagramma di database e generare automaticamente SQL. In particolare, esamineremo come utilizzare MySQL Workbench, uno strumento di progettazione di database visuale multipiattaforma.
Cos'è MySQL Workbench?
MySQL Workbench è un potente strumento sviluppato da MySQL con tre aree principali di funzionalità:
- Sviluppo SQL :Sostituisce il browser delle query MySQL. Consente all'utente di connettersi a un database esistente e modificare ed eseguire query SQL.
- Modellazione dei dati :Progettazione e modellazione di database visivi completi.
- Amministrazione del database :sostituisce l'amministratore MySQL. Interfaccia grafica per avviare/arrestare server, creare account utente, modificare file di configurazione, ecc.
In questo tutorial, ci concentreremo sulla Modellazione dei dati aspetto per creare un database da zero, quindi dare una rapida occhiata all'editor SQL per eseguire il nostro script SQL generato e creare il database all'interno di MySQL.
MySQL Workbench è disponibile per Windows, Linux e Mac OSX. Esistono due diverse edizioni:la Community OSS Edition e la commerciale Standard Edition . L'edizione della community è Open Source e con licenza GPL, come ti aspetteresti. È completamente funzionante ed è quello che useremo in questo articolo. L'edizione commerciale aggiunge alcune funzionalità extra, come la convalida di schemi e modelli o la generazione della documentazione.
Nota:questo tutorial è basato sulla Community OSS Edition versione 5.2 (5.2.16), attualmente in versione beta al momento della stesura (aprile 2010).
Pianificazione del nostro database
Per imparare a usare MySQL Workbench, useremo un database molto semplice per le lezioni online come esempio. Supponiamo che un gruppo di insegnanti voglia offrire lezioni online per diverse materie, utilizzando Skype o qualsiasi altro software di videoconferenza. Per il nostro piccolo progetto, abbiamo deciso di memorizzare le seguenti informazioni:
Quando disegniamo il nostro diagramma, avremo bisogno di conoscere anche le relazioni tra questi gruppi di dati; quindi è meglio pensarci ora!
- Un insegnante può insegnare molte materie
- Una materia può essere insegnata da molti insegnanti
- Ogni classe ha un solo insegnante
- Un insegnante può insegnare in molte classi
- Uno studente può frequentare più classi
- Una classe ha molti studenti
- Una lezione può avere diverse ore (in una settimana)
- In un giorno e in un'ora particolari, possono esserci più classi
- Una lezione riguarda un argomento
- Una materia può essere insegnata in più classi
A questo punto, abbiamo tutte le informazioni che ci servono per incontrare la star di questo spettacolo...
Invia in MySQL Workbench
È ora di lanciare Workbench. Nella parte della modellazione dei dati della schermata iniziale, facciamo clic su "Crea nuovo modello EER" , e viene visualizzata la seguente schermata:
Quando creiamo un nuovo modello di database, contiene lo schema mydb predefinito. Possiamo rinominarlo e usarlo come nostro schema DB. Un modello di database può avere diversi schemi.
Il catalogo a destra mostrerà ogni elemento del nostro schema e ci consentirà di trascinare e rilasciare gli elementi nei diagrammi, se necessario.
Avere le sezioni separate per gli schemi fisici e i diagrammi EER e la possibilità di includere diversi schemi in un modello di database può creare confusione. La prossima sezione spiega questi concetti e come sono correlati.
Chiarire i concetti
Lo schema fisico contiene tutti i pezzi necessari per definire il database:tabelle, colonne, tipi, indici, vincoli, ecc. Questo è ciò che stiamo veramente definendo. Ogni oggetto aggiunto nel modello grafico viene visualizzato anche nello schema fisico. È, infatti, un modo visivo per definire il nostro schema.
Possiamo avere più schemi per lo stesso modello di database nello stesso modo in cui possiamo avere più database in un server MySQL. Ogni schema sarà un database MySQL. Ad esempio, nella schermata successiva, abbiamo due schede dello schema:
Se generiamo lo script SQL, avremo due istruzioni CREATE DATABASE separate - in realtà avremo CREATE SCHEMA che è solo un sinonimo.
CREATE SCHEMA IF NOT EXISTS `schema1`; CREATE SCHEMA IF NOT EXISTS `schema2`;
"EER sta per Extended (o Enhanced) Entity-Relation . I diagrammi EER sono solo un modo per modellare i dati e le relazioni tra i dati utilizzando simboli standard"
Saranno elencati come database all'interno dell'host del server MySQL quando si utilizza SHOW DATABASES.
Ora, cos'è un diagramma EER?. EER sta per Extended (o Enhanced) Entity-Relation>. I diagrammi EER sono solo un modo per modellare i dati e le relazioni tra i dati utilizzando simboli standard. I modelli EER possono essere complessi, ma MySQL Workbench utilizza solo un sottoinsieme di tutti i possibili elementi grafici, perché lo scopo di questo diagramma (in questo strumento) è di mappare ogni elemento allo schema fisico.
Possiamo usare un diagramma EER per definire l'intero database o solo piccole parti. Ad esempio, possiamo avere uno schema con cinque tabelle definite e quindi creare un nuovo diagramma per definire altre due tabelle utilizzando l'editor visivo. Il diagramma conterrà solo due tabelle, ma anche queste due tabelle saranno incluse nello schema, insieme alle cinque precedenti.
Creazione delle nostre tabelle
Torna al nostro esempio iniziale; dobbiamo rinominare lo schema predefinito facendo doppio clic sul nome. A questo punto, abbiamo due possibilità:possiamo iniziare ad aggiungere tabelle al nostro schema fisico usando l'icona aggiungi tabella, oppure possiamo avviare un diagramma EER e aggiungere tutte le tabelle lì.
Preferisco aggiungere un nuovo diagramma dall'inizio e creare il mio schema visivamente; tuttavia, per mostrare come farlo con entrambi i metodi, creeremo le prime due tabelle nella scheda dello schema, quindi continueremo con il diagramma EER.
Quando fai clic su Aggiungi tabella icona, l'editor della tabella si apre come una scheda di seguito:
Usando l'editor di tabelle, cambiamo il nome della tabella e passiamo alla scheda delle colonne (nelle schede sotto l'editor) per inserire le nostre colonne. Possiamo scegliere il tipo di dati (c'è un elenco a discesa con tutti i tipi di dati MySQL), assegnare un valore predefinito, se necessario, e abbiamo sette caselle di controllo per contrassegnare una delle seguenti proprietà:
- PK - Chiave primaria
- NN - Non nullo
- UQ - Unico
- BIN - Binario
- ONU - Non firmato
- ZF - Riempimento zero
- AI - Incremento automatico
Vai visivo
Questo è un modo per aggiungere le nostre tabelle, anche se possiamo anche crearle usando i diagrammi. Se facciamo clic su Aggiungi diagramma icona ora, inizieremo un nuovo diagramma vuoto e non è quello che vogliamo. Vogliamo che le due tabelle che abbiamo appena creato siano nel diagramma.
Se andiamo al menu, selezioniamo Modello/Crea diagramma da oggetti catalogo , ora abbiamo il nostro diagramma e siamo pronti per continuare.
Seleziona l'icona della tabella a sinistra; il puntatore si trasforma in una mano con un tavolino. Quindi, fai clic in un punto qualsiasi dell'area di disegno per creare una nuova tabella.
Ora devi solo fare doppio clic sulla tabella e appare la scheda dell'editor per modificare il nome, le colonne, i tipi, ecc., allo stesso modo di prima.
Dopo aver inserito i dettagli della colonna per le nuove tabelle, saremo pronti per iniziare a disegnare le relazioni.
Disegnare relazioni
Nella barra degli strumenti verticale a sinistra sono disponibili sei strumenti per creare relazioni.
Non preoccuparti per l'ultimo, lo spiegheremo più tardi. Per le relazioni 1:1 e 1:n, abbiamo due diversi tipi di simboli:identificativi e non identificativi. Cosa significa?
Una relazione è considerata identificativa quando una tabella dipende interamente dall'esistenza dell'altra.
Una relazione è considerata identificativa quando una tabella dipende interamente dall'esistenza dell'altra. Una riga in quella tabella dipende da una riga nell'altra tabella. Un esempio comune è avere una tabella separata per memorizzare i telefoni per gli utenti. Potrebbe essere necessario averlo in un'altra tabella, perché possono esserci più telefoni per un utente, ma ogni riga in quella tabella dipende interamente dall'utente:appartiene all'utente.
Dovresti essere consapevole del fatto che le relazioni hanno alcune implicazioni. Se vogliamo creare le tabelle fisiche in MySQL, le relazioni devono essere mappate in qualche modo. Esistono alcune regole per mappare le relazioni nelle tabelle:
- Relazioni 1:1 . La chiave primaria per una delle tabelle è inclusa come chiave esterna nell'altra tabella.
- 1:n relazioni . La chiave primaria della tabella sul lato '1' viene aggiunta come chiave esterna nella tabella sul lato 'n'.
- n:m relazioni . Viene creata una nuova tabella (tabella join). La chiave primaria è composta dalle chiavi primarie delle due tabelle originali.
Le relazioni di identificazione vengono in genere utilizzate per le tabelle di join create da una relazione molti-a-molti. Queste nuove tabelle dipendono interamente dalle due tabelle originali.
Inoltre, nel caso di relazioni di identificazione 1:1 e 1:n, la chiave esterna introdotta farà parte della chiave primaria per quella tabella, formando una chiave primaria composita.
La buona notizia è che MySQL Workbench conosce queste regole meglio della maggior parte di noi. Disegniamo semplicemente le nostre linee e le chiavi esterne o le tabelle di join verranno automaticamente create. Possiamo anche scegliere di farlo manualmente, come vedremo a breve.
Per disegnare una relazione, fare clic sull'icona, quindi fare clic sulle due tabelle da mettere in relazione. Per le relazioni uno-a-molti, fare clic prima sulla tabella laterale "molti" e poi sulla tabella laterale "uno". Vediamo come fare per la relazione n:m insegnanti-materia, e per la relazione 1:n insegnanti-classi.
Il nome predefinito assegnato alle chiavi esterne e alle tabelle di join può essere modificato globalmente nella scheda Modifica/Preferenze/Modello o solo per il presente progetto in Modello/Opzioni modello .
Se non vogliamo che tabelle e chiavi esterne vengano generate in questo modo, possiamo usare il misterioso "sesto simbolo".
Il "sesto simbolo" crea una relazione utilizzando colonne esistenti, il che significa che hai già incluso le chiavi esterne necessarie nelle tue tabelle e creato le tabelle di join necessarie (n:m tabelle di mappatura). Poiché abbiamo già creato queste tabelle Join, non abbiamo bisogno di n:m relazioni; solo 1:n è disponibile.
Quando abbiamo tutte le nostre relazioni definite, il nostro diagramma dovrebbe apparire così:
Tieni presente che abbiamo utilizzato la notazione MySQL Workbench predefinita per i diagrammi, ma puoi cambiarla in Modello/Notazione oggetto e Notazione modello/relazione. Questo è un esempio del nostro modello in notazione classica:
A questo punto, il nostro modello è pronto e possiamo generare l'SQL per creare il database MySQL.
Generazione SQL
Seleziona File/Esporta/Forward Engineer SQL CREATE Script . Mancano solo tre schermate di procedura guidata per generare il nostro file!
Abbiamo anche la possibilità di rivedere e modificare l'SQL generato prima di salvarlo:
E questo è tutto. Facendo clic su Fine, lo script SQL verrà generato e salvato. Ora possiamo usarlo in qualsiasi modo desideriamo. Possiamo caricarlo usando il client MySQL da riga di comando:
mysql> SOURCE nomescript.sql
Oppure possiamo usare MySQL Workbench per completare il lavoro, connettendoci al nostro server MySQL ed eseguendo lo script.
Connessione a un server MySQL
Seleziona Database/Gestisci connessioni dal menu e fai clic su NUOVO .
Se non desideri impostare la password qui, ti verrà richiesta quando necessario. Fare clic su "Test connessione" per verificare se i parametri sono corretti, quindi fare clic su chiudi.
Ora, per caricare lo script, utilizzeremo l'editor SQL. Nel menu principale seleziona Database/Database query; una finestra chiede di selezionare una connessione, quindi si apre la scheda dell'editor SQL.
Ora fai clic sull'icona del fulmine per eseguire lo script SQL e il tuo database verrà generato!
Avremmo anche potuto generare il database MySQL direttamente dal modello, senza fare riferimento al file vero e proprio, utilizzando Database/Forward Engineer dal menu; tuttavia, trovo utile generare lo script e poi usarlo come desidero.