Vererbung - Hierarchien bei SQL

pac89

Neuer Benutzer
Beiträge
4
hallo,
muss folgende isA-Beziehung (s.Bild) in SQL umsetzen. Hab im Internet verschiedene Lösungen gefunden von denen ich nicht weiß welche richtig ist. Hier sind sie:

Lösungsvorschlag 1): Erstelle für jede Subklassen-Entity eine eigene Tabelle. Und füge den Schlüssel des Oberklasse-Entities als Fremdschlüssel in die Tabellen der Subklassen-Entitites.

Lösungvorschlag 2): Keine Tabelle für Oberklasse erstellen. Nur Tabellen für Subtypen.

Lösungsvorschlag 3): Schlüsselwort "UNDER" für bei der Erstellung der Tabellen für Subklassen verwenden.



welche davon ist jetzt richtig? Kann mir da jmd. weiterhelfen?
 

Anhänge

  • bild.png
    bild.png
    16,9 KB · Aufrufe: 5
Werbung:
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.846
Bitte versuche das mal in Worten zu erklären.

Mmmhhhh, ich erkläre es mal in SQL:

Code:
test=*# create table verkehrsmittel (id int primary key, name text);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "verkehrsmittel_pkey" for table "verkehrsmittel"
CREATE TABLE                                                                                                   
Time: 28,188 ms                                                                                                
test=*# create table bus (plaetze int) inherits (verkehrsmittel);
CREATE TABLE                                                     
Time: 24,414 ms                                                  
test=*# create table bahn (plaetze int) inherits (verkehrsmittel);
CREATE TABLE                                                      
Time: 31,411 ms                                                   
test=*# create table carsharing (fahrzeugtyp text) inherits (verkehrsmittel);
CREATE TABLE                                                                 
Time: 3,577 ms                                                               
test=*# insert into bus values (1,'bus1',10);
INSERT 0 1
Time: 0,417 ms
test=*# insert into bahn values (2,'bahn1',30);
INSERT 0 1
Time: 0,335 ms
test=*# insert into carsharing values (3,'carsharing1','opel manta');
INSERT 0 1
Time: 0,436 ms
test=*# select * from verkehrsmittel ;
 id |    name
----+-------------
  1 | bus1
  2 | bahn1
  3 | carsharing1
(3 rows)

Time: 0,352 ms
test=*# select * from bahn ;
 id | name  | plaetze
----+-------+---------
  2 | bahn1 |      30
(1 row)

Time: 0,155 ms
test=*# select * from carsharing ;
 id |    name     | fahrzeugtyp
----+-------------+-------------
  3 | carsharing1 | opel manta
(1 row)

Time: 0,155 ms
test=*# drop table verkehrsmittel cascade;
NOTICE:  drop cascades to 3 other objects
DETAIL:  drop cascades to table bus
drop cascades to table bahn
drop cascades to table carsharing
DROP TABLE
Time: 1,952 ms

Suchst Du sowas? Also eine Tabelle Verkehrsmittel als allgemeiner Container, wo dann Bus, Bahn und Carsharing als abgeleitete Tabellen ihre speziellen Merkmale haben.

Das hab ich jetzt in PostgreSQL gemacht, ob das so in MySQL geht weiß ich nicht.
 
Oben