sql >> Databáze >  >> RDS >> Mysql

Abstraktní třída z UML do ER diagramu. Možný ? Jak?

V zásadě existují tři možnosti, jak převést zobecnění do databázového modelu

1. Jedna tabulka na betonovou třídu

Vytvořte tabulky Admin , Teacher a Student . Každá z těchto tabulek obsahuje sloupce pro všechny atributy a vztahy User

  • Pro
    • Všechna pole konkrétní podtřídy jsou ve stejné tabulce, takže k získání všech dat studentů není potřeba spojení
    • Snadná omezení ověřování dat (jako jsou povinná pole pro Student )
  • Kon
    • Všechna pole User jsou duplikovány v každé tabulce podtříd
    • Cizí klíče pro User musí být rozdělena do tří polí FK. Jeden pro Admin , jeden pro Teacher a jeden pro Student .

2. Na stole pro celou sadu zobecnění

V tomto případě máte pouze jedno volání tabulky User který obsahuje všechna pole User + všechna pole všech podtříd User

  • Pro
    • Všechna pole jsou ve stejné tabulce, takže k získání všech User není potřeba spojení údaje
    • Žádné rozdělení FK na User
  • Kon
    • Existuje spousta polí, která se nikdy nepoužívají. Všechna pole specifická pro Student a Teacher se u Admins nikdy nevyplňují a naopak
    • Ověření dat, jako jsou povinná pole pro konkrétní třídu, jako je Student se stává poměrně složitým, protože již není jednoduchým Not Null omezení.

3. Jedna tabulka pro konkrétní třídu a jedna pro nadtřídu

V tomto případě vytvoříte tabulky pro každou z konkrétních podtříd a vytvoříte tabulku pro třídu User . Každá z konkrétních tabulek podtříd má povinný FK pro User

  • Pro
    • Nejnormalizovanější schéma:Žádná opakovaná pole pro atributy uživatele a žádná nepoužívaná pole.
    • Žádné rozdělení FK na User
    • Snadná omezení ověřování dat (jako jsou povinná pole pro Student )
  • Kon
    • Pokud chcete všechna data Student, musíte zadat dotaz do dvou tabulek
    • Složitá ověřovací pravidla, která zajistí, aby každý User záznam má právě jednoho Admin , Teacher nebo Student záznam.

Kterou z těchto možností zvolíte, závisí na řadě věcí, jako je počet podtříd, počet atributů v podtřídě nebo nadtřídě, počet FK do nadtřídy a pravděpodobně na několika dalších věcech, které jsem neznal. přemýšlejte.




  1. Postgres Notify nefunguje s logickou replikací

  2. se nepodařilo otevřít stream:Žádný takový soubor nebo adresář v

  3. Přihlášení funguje pouze pro posledního uživatele v databázi

  4. Vynutit MySQL, aby vrátilo duplikáty z klauzule WHERE IN bez použití JOIN/UNION?