sql >> Database >  >> RDS >> Mysql

Abstracte klasse van UML naar ER-diagram. Mogelijk ? Hoe?

Er zijn in principe drie keuzes om generalisatie te vertalen naar een databasemodel

1. Eén tafel per betonklasse

Tabellen maken Admin , Teacher en Student . Elk van deze tabellen bevat kolommen voor alle attributen en relaties van User

  • Pro
    • Alle velden van een concrete subklasse staan ​​in dezelfde tabel, dus er is geen join nodig om alle studentgegevens te krijgen
    • Eenvoudige gegevensvalidatiebeperkingen (zoals verplichte velden voor Student )
  • Con
    • Alle velden van User worden gedupliceerd in elke subklassetabel
    • Buitenlandse sleutels voor User moeten worden opgesplitst in drie FK-velden. Een voor Admin , een voor Teacher en één voor Student .

2. Op tafel voor hele generalisatieset

In dit geval heb je slechts één tafelaanroep User die alle velden van User . bevat + alle velden van alle subklassen van User

  • Pro
    • Alle velden staan ​​in dezelfde tabel, dus er is geen join nodig om alle User te krijgen gegevens
    • Geen splitsing van FK's naar User
  • Con
    • Er zijn een aantal velden die nooit worden gebruikt. Alle velden specifiek voor Student en Teacher worden nooit ingevuld voor Admins en vice versa
    • Gegevensvalidatie zoals verplichte velden voor een concrete klas zoals Student vrij complex worden omdat het niet langer een eenvoudige Not Null . is beperking.

3. Eén tafel per betonklasse en één voor de superklasse

In dit geval maakt u tabellen aan voor elk van de concrete subklassen en maakt u een tabel aan voor de klasse User . Elk van de concrete subklasse-tabellen heeft een verplichte FK tot User

  • Pro
    • Meest genormaliseerde schema:geen herhaalde velden voor de kenmerken van de gebruiker en geen ongebruikte velden.
    • Geen splitsing van FK's naar User
    • Eenvoudige gegevensvalidatiebeperkingen (zoals verplichte velden voor Student )
  • Con
    • Je moet twee tabellen opvragen als je alle gegevens van een Student wilt hebben
    • Complexe validatieregels om ervoor te zorgen dat elke User record heeft precies één Admin , Teacher of Student opnemen.

Welke van deze opties je kiest, hangt af van een aantal dingen, zoals het aantal subklassen, het aantal attributen in een subklasse of superklasse, het aantal FK's voor de superklasse en waarschijnlijk een paar andere dingen die ik niet heb gedaan denk aan.




  1. Doorgaan met while-lus na uitzondering in SQL?

  2. Oracle JDBC DriverManager.getConnection() loopt vast

  3. Hoe kan ik de standaard karakterset/sortering in mijn MySQL achterhalen?

  4. Kan een MySQL SELECT-instructie werken zonder kolomnamen op te geven?