sql >> Database >  >> RDS >> Database

Een databasemodel vanaf nul maken

Dus u wilt uw eerste databasemodel maken, maar u weet niet hoe u moet beginnen? Lees verder!

Ik neem aan dat je al een beetje weet over tabellen, kolommen en relaties. Als je dat niet doet, bekijk dan onze videozelfstudies voordat je verder gaat.

Begin met een systeembeschrijving

U moet altijd beginnen met het maken van een databasemodel met een beschrijving van een systeem. In een klassikale situatie krijg je een systeembeschrijving van een docent. In het echte leven is het opstellen van een beschrijving een proces op zich. Ik ga er maar vanuit dat je de beschrijving hebt. Het maakt niet uit of het je is gegeven door je klant, je baas, je leraar of dat je het zelf hebt opgeschreven.

Bekijk de beschrijving en markeer alle zelfstandige naamwoorden . De zelfstandige naamwoorden in de beschrijving kunnen grofweg worden onderverdeeld in drie categorieën:tabellen, attributen en voorbeelden.

  • Tafels vertegenwoordigen primaire entiteiten in het systeem:mensen, fysieke objecten, gebeurtenissen, transacties, enz.
  • Kenmerken zijn eigenschappen die zijn gekoppeld aan een primaire entiteit. Ze beschrijven kenmerken van uw entiteit. In het databasemodel zijn dit de kolommen in uw tabellen.
  • Voorbeelden zijn precies dat, voorbeelden. Ze helpen u de gegevenstypen . te begrijpen van bepaalde attributen en ze helpen je de relatie . te begrijpen tussen verschillende entiteiten.

Beginnen met een beschrijving heeft het voordeel dat je gedwongen wordt dezelfde woordenlijst . te gebruiken als uw gebruikers. Als je een systeem maakt voor een basisschool, moet je het over leerlingen hebben. Als je een soortgelijk systeem voor een universiteit maakt, moet je het over studenten hebben.

Tabellen, relaties, kolommen

  1. Zodra uw zelfstandige naamwoorden zijn gemarkeerd, identificeert u de tabellen . Je hoeft niet alles tegelijk te modelleren. Focus eerst op de kernfunctionaliteit van het systeem.
  2. Als je de tabellen hebt, bepaal dan de relaties tussen de tafels. Deze stap zou kunnen leiden tot de introductie van nieuwe tussentabellen.
  3. Voeg ten slotte de kolommen toe naar de tafels.

Op dit punt moet u de beschrijving opnieuw lezen en kijken of er iets ontbreekt. Ik verzeker je dat er iets aan toe te voegen is. Voeg de nieuwe tabellen, de nieuwe relaties en de nieuwe kolommen toe. Lees de beschrijving nog eens...

Dingen om in gedachten te houden

Het maken van een databasemodel is een iteratief Verwerken. Probeer niet alles tegelijk te modelleren. Begin met de kernentiteiten van uw systeem. U kunt later meer details toevoegen.

Het is oké om vragen . te stellen . Hoe nauwkeurig de beschrijving ook is, u zult altijd twijfels hebben. Er zal altijd iets onderbelicht zijn. Stel vragen over de dingen waar je niet zeker van bent. Als je geen vragen kunt stellen, maak dan een redelijke aanname en noteer de aanname die je doet.

Er is altijd meer dan één manier om elk systeem te modelleren. Sommige modellen zijn duidelijk slecht, maar bij de meeste is het moeilijk te beoordelen of ze goed of fout zijn. Het model hangt af van wat het doel van het systeem is, hoe gegevens in het systeem komen, zelfs van de persoonlijke smaak van de ontwerper. Naarmate u meer ervaring opdoet, krijgt u meer vertrouwen in uw ontwerpbeslissingen.

Voorbeeld:autoverhuursysteem

Als voorbeeld zullen we een databasemodel maken voor een autoverhuursysteem. Bekijk eerst een beschrijving van het systeem:

Een autoverhuurbedrijf verhuurt auto's aan klanten. Het bedrijf bezit meerdere auto's. Elke auto heeft een merk, modelnaam, productiejaar, kilometerstand, kleur, enzovoort. Auto's zijn onderverdeeld in verschillende categorieën:klein, middelgroot, groot, limousines.

Het bedrijf heeft veel locaties waar u een auto kunt huren. De verhuurlocaties bevinden zich in verschillende steden door het hele land. Er kan meer dan één bedrijfslocatie in een stad zijn.

Iedereen ouder dan 21 jaar met een geldig rijbewijs kan een auto huren. Klanten jonger dan 25 of ouder dan 75 jaar betalen andere (hogere) kosten dan andere klanten.

Voordat een auto wordt gehuurd, maakt een klant meestal een reservering voor een auto. Een klant specificeert de data waarop de auto wordt gehuurd, de ophaallocatie, de inleverlocatie en de categorie auto die hij wil huren. Een klant kan aangeven dat hij wat extra apparatuur in de auto wil, bijvoorbeeld een GPS, een autostoeltje voor een kind, enz.

Wanneer een klant een auto huurt, geeft hij de ophaal- en inleverlocatie en de inleverdatum op. De klant kan verschillende soorten verzekeringen afsluiten. Hij kan ook besluiten dat hij geen verzekering nodig heeft omdat de verzekering anders wordt gedekt, bijvoorbeeld door zijn creditcardmaatschappij. De klant kan extra opties kiezen zoals de mogelijkheid van een vroege drop-off, verschillende tankopties, enz.

De klant betaalt de kosten wanneer hij de auto inlevert.

We beginnen met het markeren van alle zelfstandige naamwoorden: 

De volgende stap is het vinden van tafels . We zoeken naar de basisentiteiten in het systeem. Om te beginnen moet je in ieder geval deze hebben:auto, klant, locatie, stad, uitrusting, (auto)categorie, verzekering. We zetten ze in het schema. Ik heb de id toegevoegd kolom in elke tabel omdat elke tabel een soort id zou moeten hebben. U kunt de primaire sleutel altijd later wijzigen.




De basissysteementiteiten zitten in het model, maar je moet opmerken dat we de kernfunctionaliteit van het systeem missen:autoverhuur en reserveringen. Onthoud wat we in het begin zeiden:tabellen zijn niet alleen fysieke objecten, maar ook gebeurtenissen en transacties. U moet reservation toevoegen en rental ook als tafels. Hier gaan we:




Nu voegen we de verwijzingen tussen de tabellen in het model toe. Ik heb de referenties genummerd zoals ik ze heb toegevoegd. De notitie naast elke referentie vertelt u wanneer deze is toegevoegd:

  1. Elke auto behoort tot een categorie,
  2. Elke reservering is voor een categorie auto's,
  3. Elke locatie bevindt zich in een stad,
  4. Elke reservering heeft een ophaal- en een afleverlocatie,
  5. Elke reservering wordt gemaakt door een klant,
  6. Elke verhuur wordt gemaakt door een klant,
  7. Elke huur is voor een bepaalde auto,
  8. Elke verhuur heeft een ophaal- en een afleverlocatie.
  9. Elke verhuur is verbonden aan een bepaalde verzekering. Maar is er maar één verzekering voor elke verhuur? Nee. Er kunnen veel verzekeringen verbonden zijn aan een verhuur (verzekering tegen voertuigschade, tegen persoonlijk letsel, tegen letsel aan andermans auto, ...). Ik heb een tussentabel toegevoegd met de naam rental_insurance verbonden met rental en insurance tabellen.



We missen nog steeds de referentie tussen auto en uitrusting. Is apparatuur permanent aan een auto bevestigd of kan deze van de ene auto naar de andere worden verplaatst? Er is geen antwoord op die vraag in de beschrijving, dus we zullen een redelijke veronderstelling maken:ja, het kan worden verplaatst. We voegen een nieuwe tabel toe car_equipment en verwijzingen tussen car en equipment .

We verwijderen het company tafel. Het verhuurbedrijf is impliciet aanwezig in het systeem. Een ander bedrijf heeft immers een eigen systeem en een eigen database.




Ten slotte voegen we de kolommen en hun datatypes toe. We merken ook dat er geen verband is tussen reservation en equipment . Maar is de reservering gemaakt voor een bepaald apparaat? Nee, het is gemaakt voor een type uitrusting:we voegen de tabel equipment_category toe en verbind de tabellen reservation en equipment ernaar toe.




Zijn we klaar? Lees de beschrijving nog eens. Ons databasemodel laat nog steeds de kosten weg. Nou...

Dat is een oefening voor de lezer. (Maar als u geen zin heeft om uw vaardigheden op het gebied van databasemodellering te oefenen, vindt u hier een kant-en-klare databasestructuur voor een autoverhuurbedrijf.)


  1. SQL:door komma's gescheiden tekenreeks ontleden en gebruiken als join

  2. MySQL Bestel op een nummer, Nulls duren

  3. C#:Oracle Data Type Equivalentie met OracleDbType

  4. JSON_REMOVE() – Gegevens verwijderen uit een JSON-document in MySQL