sql >> Database teknologi >  >> RDS >> Mysql

Abstrakt klasse fra UML til ER diagram. Muligt ? Hvordan?

Der er grundlæggende tre muligheder for at oversætte generalisering til en databasemodel

1. Et bord pr. betonklasse

Opret tabeller Admin , Teacher og Student . Hver af disse tabeller indeholder kolonner for alle attributter og relationer for User

  • Pro
    • Alle felter i en konkret underklasse er i den samme tabel, så der er ikke behov for join for at få alle elevdata
    • Lette datavalideringsbegrænsninger (såsom obligatoriske felter for Student )
  • Kont
    • Alle felter for User duplikeres i hver underklassetabel
    • Fremmednøgler til User skal opdeles i tre FK-felter. En til Admin , en for Teacher og en til Student .

2. På bordet for hele generaliseringssæt

I dette tilfælde har du kun ét tabelkald User der indeholder alle felter for User + alle felter i alle underklasser af User

  • Pro
    • Alle felter er i samme tabel, så det er ikke nødvendigt at tilslutte sig for at få alle User data
    • Ingen opdeling af FK'er til User
  • Kont
    • Der er en masse felter, som aldrig bliver brugt. Alle felter, der er specifikke for Student og Teacher er aldrig udfyldt for Admins og omvendt
    • Datavalidering såsom obligatoriske felter for en konkret klasse såsom Student bliver ret kompleks, da det ikke længere er en simpel Not Null begrænsning.

3. Et bord pr. betonklasse og et til superklassen

I dette tilfælde opretter du tabeller for hver af de konkrete underklasser, og du opretter en tabel for klassen User . Hver af de konkrete underklassetabeller har en obligatorisk FK til User

  • Pro
    • Mest normaliserede skema:Ingen gentagne felter for brugerens attributter og ingen ubrugte felter.
    • Ingen opdeling af FK'er til User
    • Lette datavalideringsbegrænsninger (såsom obligatoriske felter for Student )
  • Kont
    • Du skal forespørge to tabeller, hvis du vil have alle data fra en Student
    • Komplekse valideringsregler for at sikre, at hver User record har præcis én Admin , Teacher eller Student optage.

Hvilken af ​​disse muligheder du vælger afhænger af en række ting såsom antallet af underklasser, antallet af attributter i enten underklasse eller superklasse, antallet af FK'er til superklassen og sikkert et par andre ting, jeg ikke gjorde. tænke over.




  1. Bruger du flere Oracle JDBC-drivere i én Java-applikation?

  2. forskel mellem ON-klausul og brug af klausul i sql

  3. Hvordan fjerner man kun kontinuerlige dubletter, men ikke alle dubletter i en udvalgt forespørgsel (MySQL)?

  4. Dynamisk konvertering af streng til kolonnenavn. MySQL