PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Generalization SQL


AtTheDriveIn
2009-04-08, 10:57:34
Hi

Es geht darum Generalisierungen in SQL zu implementieren. Wie macht man das? Gibt es da ein Design pattern?

Bsp: (Pseudocode)


create table Vehicle
{
V_ID
Manufacturer
Color
...
}


create table Car
{
V_ID
PS
fuel
...
}

create table boat
{
V_ID
GRT
home_port
...
}

create table TÜV
{
T_ID
V_ID [References Car(V_ID)]
date_of_inspection
...
}

create table Owner
{
O_ID
V_ID [References Vehicle(V_ID)]
...
}



Gemeinsamkeiten sind in Vehicle ausgelagert. So hat jedes Fahrzeug einen Owner, allerdings muss nur ein Auto zum TÜV.

Das Problem, wie ist so eine Hierachie in SQL abzubilden? Wie stehen die V_ID von Vehicle, Car und Boat in Verbindung?


Ich hoffe ihr könnt mir folgen. :)

robobimbo
2009-04-08, 11:34:14
im ER wird es als IST Beziehung abggebildet, das heisst keiner der Detailtypen kann ohne Eine Zeile im Vehikeltype existieren, sie sind sogenannte Weak Entities.

Der Vehikeltyp nimmt 0 oder 1 mal an dieser Beziehung teil, jeder Detailtyp mindestens 1 mal oder maximal 1 mal- in der min max Notation gesprochen.

In der gebräuchlicheren Notation ist es eine [Vehikel] 1:0..1 [Detailtyp] Beziehung.

pest
2009-04-08, 11:47:51
meinst du nicht ISA-Beziehung?

AtTheDriveIn
2009-04-08, 11:49:55
im ER wird es als IST Beziehung abggebildet, das heisst keiner der Detailtypen kann ohne Eine Zeile im Vehikeltype existieren, sie sind sogenannte Weak Entities.

Der Vehikeltyp nimmt 0 oder 1 mal an dieser Beziehung teil, jeder Detailtyp mindestens 1 mal oder maximal 1 mal- in der min max Notation gesprochen.

In der gebräuchlicheren Notation ist es eine [Vehikel] 1:0..1 [Detailtyp] Beziehung.


0 oder 1 mal?
Es können also in Vehicle Datensetze vorkommen, die kein Car oder Boat sind?
Das soll bei mir nicht der Fall sein, also ist es eine 1:1 Beziehung, vollständige Überdeckung.

Wie stelle ich sicher das Einträge die ich bspweise in Car neu mache in Vehicle übernommen werden? Trigger?
Oder trägt man in Vehicle ein und übernimmt in Car und Boat?

Fragen über Fragen :)

robobimbo
2009-04-08, 13:33:13
klar, es gibt einen vehicle datensatz der einen zugehörigen datensatz im car hat, aber natürlich keinen im boat

@pest, ja "is a" wär korrekter :)

Gast
2009-04-08, 15:07:05
...
Wie stelle ich sicher das Einträge die ich bspweise in Car neu mache in Vehicle übernommen werden? Trigger?
...
Formulier mal deutlich, was du wissen willst. Aber ich denk, foreign key dürfte da ausreichen.

AtTheDriveIn
2009-04-08, 15:33:23
klar, es gibt einen vehicle datensatz der einen zugehörigen datensatz im car hat, aber natürlich keinen im boat

@pest, ja "is a" wär korrekter :)

[Vehikel] 1:0..1 [Detailtyp] also 1:c besagt aber, das ein Dataset in Vehicle mit 0 oder 1 Dataset im Detailtyp in Verbindung steht. Es könnten -auf mein Beispiel gemünzt- also in Vehicle auch Flugzeuge eingetragen sein.

Formulier mal deutlich, was du wissen willst. Aber ich denk, foreign key dürfte da ausreichen.

Ich möchte ein Tupel eintragen und es soll dann automatisch in die andere Tabelle übernommen werden. Wobei die "andere" Tabelle eben von der Heransgehensweise abhängt, die wie gesagt mir noch nicht 100%ig klar ist.

Also ich trage ein Car ein und in Vehicle wird ebenfalls ein Tupel angelegt. Oder ich trage ein Vehicle ein -kennzeichne es als Car- und es wird automatisch ein Tupel in Car angelegt.
Welche Keys dann auf welche verweisen ist in der Frage included. :)

Vielleicht ist das Ganze auch mit Views zu erschlagen, das gilt es eben herauszufinden.