In de tutorial van vandaag leert u hoe u een visueel hulpprogramma voor databasemodellering gebruikt om een databasediagram te tekenen en automatisch SQL te genereren. We zullen in het bijzonder bespreken hoe u MySQL Workbench kunt gebruiken, een platformonafhankelijke, visuele database-ontwerptool.
Wat is MySQL Workbench?
MySQL Workbench is een krachtige tool ontwikkeld door MySQL met drie primaire functionaliteitsgebieden:
- SQL-ontwikkeling :Vervangt de MySQL-querybrowser. Hiermee kan de gebruiker verbinding maken met een bestaande database en SQL-query's bewerken en uitvoeren.
- Gegevensmodellering :Compleet visueel database-ontwerp en modellering.
- Databasebeheer :Vervangt de MySQL-beheerder. Grafische interface om servers te starten/stoppen, gebruikersaccounts aan te maken, configuratiebestanden te bewerken, enz.
In deze zelfstudie concentreren we ons op de Gegevensmodellering aspect om vanaf het begin een database te maken, en kijk dan snel naar de SQL-editor om ons gegenereerde SQL-script uit te voeren en de database in MySQL te maken.
MySQL Workbench is beschikbaar voor Windows, Linux en Mac OSX. Er zijn twee verschillende edities:de Community OSS-editie en de commerciële Standaardeditie . De community-editie is Open Source en GPL-licentie, zoals je zou verwachten. Het is volledig functioneel en is degene die we in dit artikel zullen gebruiken. De commerciële editie voegt wat extra functionaliteiten toe, zoals schema- en modelvalidatie of het genereren van documentatie.
Opmerking:deze tutorial is gebaseerd op de Community OSS-editie versie 5.2 (5.2.16), momenteel in bètaversie op het moment van schrijven (april 2010).
Onze database plannen
Om te leren hoe u MySQL Workbench kunt gebruiken, gebruiken we als voorbeeld een zeer eenvoudige database voor online lessen. Stel dat een groep docenten online lessen wil aanbieden voor verschillende vakken, met behulp van Skype of andere videoconferentiesoftware. Voor ons kleine project hebben we besloten dat we de volgende informatie moeten opslaan:
Bij het tekenen van ons diagram moeten we ook de relaties tussen deze groepen gegevens kennen; dus daar kunnen we nu maar beter over nadenken!
- Eén leraar kan veel vakken geven
- Eén vak kan door veel docenten worden gegeven
- Elke klas heeft maar één leraar
- Eén leraar kan veel lessen geven
- Eén leerling kan meerdere lessen bijwonen
- Eén klas heeft veel leerlingen
- Eén les kan meerdere uren duren (in een week)
- Op een bepaalde dag en uur kunnen er meerdere lessen zijn
- Een les gaat over één onderwerp
- Eén vak kan in meerdere lessen worden onderwezen
Op dit moment hebben we alle informatie die we nodig hebben om de ster van deze show te ontmoeten...
MySQL Workbench insturen
Het is tijd om Workbench te lanceren. In het datamodelleringsgedeelte van het startscherm klikken we op 'Create new EER Model' , en het volgende scherm verschijnt:
Wanneer we een nieuw databasemodel maken, bevat dit het standaard mydb-schema. We kunnen het hernoemen en gebruiken als ons DB-schema. Een databasemodel kan verschillende schema's hebben.
De catalogus aan de rechterkant toont elk element in ons schema en stelt ons in staat om indien nodig elementen naar diagrammen te slepen en neer te zetten.
Het kan verwarrend zijn om de afzonderlijke secties voor fysieke schema's en EER-diagrammen te hebben en de mogelijkheid om meerdere schema's in één databasemodel op te nemen. In het volgende gedeelte worden deze concepten uitgelegd en hoe ze verband houden.
Concepten verduidelijken
Het fysieke schema bevat alle benodigde onderdelen om de database te definiëren:tabellen, kolommen, typen, indexen, beperkingen, enz. Dit is wat we echt definiëren. Elk object dat in het grafische model wordt toegevoegd, wordt ook weergegeven in het fysieke schema. Het is in feite een visuele manier om ons schema te definiëren.
We kunnen verschillende schema's hebben voor hetzelfde databasemodel op dezelfde manier als we verschillende databases in een MySQL-server kunnen hebben. Elk schema is een MySQL-database. In het volgende scherm hebben we bijvoorbeeld twee schematabbladen:
Als we het SQL-script genereren, hebben we twee afzonderlijke CREATE DATABASE-instructies - eigenlijk hebben we CREATE SCHEMA, wat slechts een synoniem is.
CREATE SCHEMA IF NOT EXISTS `schema1`; CREATE SCHEMA IF NOT EXISTS `schema2`;
"EER staat voor Extended (of Enhanced) Entity-Relationship . EER-diagrammen zijn slechts een manier om de gegevens en de relaties tussen gegevens te modelleren met behulp van standaardsymbolen"
Ze worden weergegeven als databases binnen de MySQL-serverhost bij het gebruik van SHOW DATABASES.
Wat is nu een EER-diagram?. EER staat voor Extended (of Enhanced) Entity-Relationship>. EER-diagrammen zijn slechts een manier om de gegevens en de relaties tussen gegevens te modelleren met behulp van standaardsymbolen. EER-modellen kunnen complex zijn, maar MySQL Workbench gebruikt slechts een subset van alle mogelijke grafische elementen, omdat het doel van dit diagram (in deze tool) is om elk element toe te wijzen aan het fysieke schema.
We kunnen een EER-diagram gebruiken om de hele database te definiëren, of alleen kleine delen. We kunnen bijvoorbeeld een schema met vijf tabellen definiëren en vervolgens een nieuw diagram maken om nog twee tabellen te definiëren met behulp van de visuele editor. Het diagram zal slechts twee tabellen bevatten, maar die twee tabellen zullen ook in het schema worden opgenomen, samen met de vorige vijf.
Onze tabellen maken
Terug naar ons eerste voorbeeld; we moeten het standaardschema hernoemen door op de naam te dubbelklikken. Op dit moment hebben we twee mogelijkheden:we kunnen beginnen met het toevoegen van tabellen aan ons fysieke schema met behulp van het pictogram Tabel toevoegen, of we kunnen een EER-diagram starten en alle tabellen daar toevoegen.
Ik geef er de voorkeur aan om vanaf het begin een nieuw diagram toe te voegen en mijn schema visueel te maken; om echter te laten zien hoe u dit met beide methoden kunt doen, gaan we de eerste twee tabellen maken op het schematabblad en vervolgens doorgaan met het EER-diagram.
Wanneer u op Tabel toevoegen . klikt icoon, wordt de tabeleditor geopend als een tabblad hieronder:
Met behulp van de tabeleditor wijzigen we de tabelnaam en schakelen we over naar het tabblad kolommen (in de tabbladen onder de editor) om onze kolommen in te voeren. We kunnen het gegevenstype kiezen (er is een vervolgkeuzelijst met alle MySQL-gegevenstypen), indien nodig een standaardwaarde toewijzen en we hebben zeven selectievakjes om een van de volgende eigenschappen te markeren:
- PK - Primaire sleutel
- NN - Niet null
- UQ - Uniek
- BIN - Binair
- VN - Niet ondertekend
- ZF - Nulvulling
- AI - Automatisch verhogen
Ga visueel
Dit is een manier om onze tabellen toe te voegen, hoewel we ze ook kunnen maken met behulp van de diagrammen. Als we klikken op Diagram toevoegen icoon nu, zullen we een nieuw, leeg diagram beginnen, en dat is niet wat we willen. We willen dat de twee tabellen die we zojuist hebben gemaakt in het diagram staan.
Als we naar het menu gaan, selecteer Diagram modelleren/maken uit catalogusobjecten , nu hebben we ons diagram en zijn we klaar om verder te gaan.
Selecteer het tabelpictogram aan de linkerkant; de aanwijzer verandert in een hand met een tafeltje. Klik vervolgens ergens in het canvas om een nieuwe tabel te maken.
Nu hoef je alleen maar op de tabel te dubbelklikken en het editortabblad verschijnt om de naam, kolommen, typen, enz. te bewerken - op dezelfde manier als voorheen.
Nadat we de kolomdetails voor de nieuwe tabellen hebben ingevoerd, zijn we klaar om de relaties te tekenen.
Relaties tekenen
In de verticale werkbalk aan de linkerkant hebben we zes tools beschikbaar om relaties te creëren.
Maak je geen zorgen over de laatste, we zullen het later uitleggen. Voor de 1:1 en 1:n relaties hebben we twee verschillende soorten symbolen:identificerend en niet-identificerend. Wat betekent dat?
Een relatie wordt beschouwd als identificerend wanneer de ene tabel volledig afhankelijk is van de andere om te bestaan.
Een relatie wordt beschouwd als identificerend wanneer de ene tabel volledig afhankelijk is van de andere om te bestaan. Een rij in die tabel hangt af van een rij in de andere tabel. Een veelvoorkomend voorbeeld is om een aparte tafel te hebben om telefoons voor gebruikers op te bergen. Het kan nodig zijn om het in een andere tabel te hebben, omdat er meerdere telefoons voor één gebruiker kunnen zijn, maar elke rij in die tabel is volledig afhankelijk van de gebruiker - het hoort bij aan de gebruiker.
U moet zich ervan bewust zijn dat relaties enkele implicaties hebben. Als we de fysieke tabellen in MySQL willen maken, moeten relaties op de een of andere manier in kaart worden gebracht. Er zijn een paar regels om relaties in tabellen in kaart te brengen:
- 1:1 relaties . Primaire sleutel voor een van de tabellen is opgenomen als refererende sleutel in de andere tabel.
- 1:n relaties . Primaire sleutel van de tabel in de '1'-kant wordt toegevoegd als externe sleutel in de tabel in de 'n'-kant.
- n:m relaties . Er wordt een nieuwe tabel (join-tabel) gemaakt. De primaire sleutel is samengesteld uit de primaire sleutels van de twee originele tabellen.
Identificerende relaties worden meestal gebruikt voor de join-tabellen die zijn gemaakt op basis van een veel-op-veel-relatie. Deze nieuwe tabellen zijn volledig afhankelijk van de twee originele tabellen.
In het geval van 1:1 en 1:n identificerende relaties, zal de ingevoerde externe sleutel ook deel uitmaken van de primaire sleutel voor die tabel, waardoor een samengestelde primaire sleutel wordt gevormd.
Het goede nieuws is dat MySQL Workbench deze regels beter kent dan de meesten van ons. We tekenen gewoon onze lijnen en de externe sleutels of join-tabellen worden automatisch gemaakt. We kunnen er ook voor kiezen om het handmatig te doen, zoals we binnenkort zullen zien.
Om een relatie te tekenen, klikt u op het pictogram en vervolgens op de twee tabellen die u wilt relateren. Voor één-op-veel relaties klikt u eerst op de "veel" bijzettafel en vervolgens op de "één" bijzettafel. Laten we eens kijken hoe we dit kunnen doen voor de n:m leraar-onderwerpen-relatie, en voor de 1:n leraren-klassen.
De standaardnaam die is toegewezen voor de externe sleutels en voor de samenvoegtabellen kan globaal worden gewijzigd in Bewerken/Voorkeuren/Model Tab , of alleen voor het huidige project in Model/Model Options .
Als we niet willen dat tabellen en externe sleutels op deze manier worden gegenereerd, kunnen we het mysterieuze "zesde symbool" gebruiken.
Het "zesde symbool" maakt een relatie aan met behulp van bestaande kolommen, wat betekent dat u de benodigde externe sleutels al in uw tabellen hebt opgenomen en de benodigde join-tabellen hebt gemaakt (n:m-toewijzingstabellen). Omdat we deze Join-tabellen al hebben gemaakt, hebben we geen n:m-relaties nodig; alleen 1:n is beschikbaar.
Als we al onze relaties hebben gedefinieerd, zou ons diagram er als volgt uit moeten zien:
Houd er rekening mee dat we de standaard MySQL Workbench-notatie voor de diagrammen hebben gebruikt, maar u kunt dit wijzigen in Model/Object Notation en model-/relatienotatie. Dit is een voorbeeld van ons model in klassieke notatie:
Op dit punt is ons model klaar en kunnen we de SQL genereren om de MySQL-database te maken.
SQL genereren
Selecteer File/Export/Forward Engineer SQL CREATE Script . We zijn slechts drie wizardschermen verwijderd van het genereren van ons bestand!
We hebben zelfs de mogelijkheid om de gegenereerde SQL te bekijken en te bewerken voordat deze wordt opgeslagen:
En dat is het. Als u op Voltooien klikt, wordt het SQL-script gegenereerd en opgeslagen. Nu kunnen we het gebruiken op elke manier die we willen. We kunnen het laden met behulp van de opdrachtregel mysql-client:
mysql> SOURCE scriptName.sql
Of we kunnen MySQL Workbench gebruiken om het werk af te maken, door verbinding te maken met onze MySQL-server en het script uit te voeren.
Verbinding maken met een MySQL-server
Selecteer Database/Beheer verbindingen in het menu en klik op NIEUW .
Als u het wachtwoord hier niet wilt instellen, wordt u hier zo nodig om gevraagd. Klik op "Verbinding testen" om te controleren of uw parameters correct zijn en klik vervolgens op sluiten.
Om het script nu te laden, gebruiken we de SQL-editor. Selecteer in het hoofdmenu Database/Query Database; een venster vraagt u om een verbinding te selecteren en vervolgens wordt het tabblad SQL-editor geopend.
Klik nu op het bliksempictogram om het SQL-script uit te voeren en uw database wordt gegenereerd!
We hadden de MySQL-database ook rechtstreeks vanuit het model kunnen genereren, zonder naar het eigenlijke bestand te verwijzen, met behulp van Database/Forward Engineer uit het menu; ik vind het echter handig om het script te genereren en het vervolgens te gebruiken zoals ik wil.