Datenbank Objekte

Datenbank Objekte

am 04.01.2006 20:49:12 von nikolai.onken

Hallo,

ich habe ein Problem beim Design meiner DB.
Ich arbeite mit einem Framework und wollte fragen was der beste weg ist
um object orientierte extends in einer DB wiederzugeben (MySQL 5).
Ich habe z.B. eine Klasse

class Instruments
{
protected $name;
protected $description;
protected $price;
}

dann habe ich eine Klasse
class Guitars extends Instruments
{
protected $amount_of_strings
}
und
class Pianos extends Instruments
{
protected $amount_of_keys;
protected $type;
}

Bis jetzt habe ich es so gelöst das ich eine Tabelle 'Instruments'
habe und dann z.B. eine Tabelle Guitars in der ich einen foreign key
nach Instruments habe.
Das macht es aber sehr schwer Daten auszuwerten oder Suchanfragen
durchzufüren, da ich wissen muss welche Tabellen existieren und welche
nicht. Ich könnte also nicht einfach eine neue Klasse Violins extends
Instrument erstellen ohne den gesamten Code der auf die Klasse
Instruments zugreift zu aktualisieren.
Auch kann ich nicht eine Suchanfrage durchführen in der ich z.B. alle
Instrumente durchsuche die eine Seriennummer haben.
Ich hoffe es ist deutlich was ich meine.
Ich würde mich sehr über eine Antwort freuen.
Viele Grüße,

Nikolai Onken

Re: Datenbank Objekte

am 05.01.2006 10:19:39 von Dominik Echterbruch

Nikolai Onken wrote:
[Klassen Guitars und Violins erben von Klasse Instruments]
>
> Bis jetzt habe ich es so gelöst das ich eine Tabelle 'Instruments'
> habe und dann z.B. eine Tabelle Guitars in der ich einen foreign key
> nach Instruments habe.
> Das macht es aber sehr schwer Daten auszuwerten oder Suchanfragen
> durchzufüren, da ich wissen muss welche Tabellen existieren und welche
> nicht. Ich könnte also nicht einfach eine neue Klasse Violins extends
> Instrument erstellen ohne den gesamten Code der auf die Klasse
> Instruments zugreift zu aktualisieren.
> Auch kann ich nicht eine Suchanfrage durchführen in der ich z.B. alle
> Instrumente durchsuche die eine Seriennummer haben.


Auf die Gefahr hin, wieder mal geschlagen zu werden (viele Leute hier
finden dein Design gut):
Mach eine Tabelle, die alle gemeinsamen Attribute aufnimmt. Dann machst
du eine Tabelle, die die zusätzlichen Attribute eines Instruments mit
dem dazu gehörenden Wert aufnimmt. Also in etwa so was:

CREATE TABLE Instrument (
id int unsigned not null auto_increment,
name char(20),
attribute1 char(20),
attribute2 char(20),
attribute3 char(20)
);

CREATE TABLE Attribute (
id int unsigned not null auto_increment,
instrument int unsigned not null,
name char(20),
value char(20)
);

Das kann man so weit treiben, daß in Instrument nur noch die
Instrumentnamen stehen hat, alle Attribute in Attribute stehen und die
Namen der Attribute in einer dritten Tabelle ausgelagert hat. Ob du das
Konzept weiter verfeinern willst, überlasse ich aber dir.


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: Datenbank Objekte

am 05.01.2006 11:57:57 von nikolai.onken

Hmm - funktioniert so eigentlich Google Base? Da kann ich ja auch
einfach eigene Parameter definieren.
Wenn ich die Tabellenstruktur so aufbaue wie du vorgeschlagen hast ist
es dann Sinvoll eine weitere Tabelle 'Attribute_Def' zu erstellen, wo
ich definiere welche Werte ein Attribut z.B. annehmen darf? Auch
möchte ich vermeiden dass ich einmal ein Attribut Serien_Nr habe und
dann z.B. serien_nummer habe.
Vielen Dank für deine Antwort!
Viele Grüße,

Nikolai

Re: Datenbank Objekte

am 05.01.2006 12:17:47 von Dominik Echterbruch

Nikolai Onken wrote:
> Hmm - funktioniert so eigentlich Google Base? Da kann ich ja auch
> einfach eigene Parameter definieren.

Keine Ahnung. Kenne ich nicht...

> Wenn ich die Tabellenstruktur so aufbaue wie du vorgeschlagen hast ist
> es dann Sinvoll eine weitere Tabelle 'Attribute_Def' zu erstellen, wo
> ich definiere welche Werte ein Attribut z.B. annehmen darf? Auch
> möchte ich vermeiden dass ich einmal ein Attribut Serien_Nr habe und
> dann z.B. serien_nummer habe.

Ob das für dich und deinen Anwendungsfall sinnvoll ist, kannst nur du
selber beantworten. Aber ich rate jetzt einfach mal, daß es in der
Mehrheit der Fälle Sinn macht. Wie gesagt kannst du diese Modell
beliebig erweitern und andere Ideen mit dran schrauben.

Vielleicht ein kleines Beispiel aus unserer Warenwirtschaft. Dort gibt
es Tabellen für:
- Produkte
- Eigenschaften der Produkte
- Bestellungen
- Zuordnung, welche Produkte bestellt wurden
- Eigenschaften der bestellten Produkte

Hintergrund ist, daß alle Produkte bei der Bestellung speziell für den
Kunden angepasst werden. Deshalb müssen für alle bestellten Produkte pro
Bestellung alle Eigenschaften hinterlegt werden.


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: Datenbank Objekte

am 06.01.2006 19:13:10 von nikolai.onken

Hallo Dominik,

danke für deine Hilfe!!
Hat mir sehr weitergeholfen.
Viele Grüße,

Nikolai