Anfängerfrage zu MYSQL

Geehrtes Forum,

ich beschäftige mich seit Kurzem mit MySQL, da ich eine Datenbank aufbauen möchte. Als Einstieg benutze ich das Handbuch, das auf der MySQL Homepage zu finden ist. Auch ein Buch habe ich mir bestellt, dies befindet sich aber noch auf dem Postweg.

Nun zu meiner Frage: Angenommen meine Datenbank umfasst Abspielgeräte, dann könnte meine Datenbank etwa so aussehen (Produkt | Type):

Produkt A | VHS
Produkt B | DVD
Produkt C | VHS
Produkt D | Blueray
Produkt E | HDD

Allerdings gibt es auch Kombi Geräte, etwa Player, die DVDs und Blueray Discs abspielen können. Wie muss ich in diesem Fall meine Datenbank gestalten?

Hallo,

Nun zu meiner Frage: Angenommen meine Datenbank umfasst
Abspielgeräte, dann könnte meine Datenbank etwa so aussehen
(Produkt | Type):

Produkt A | VHS
Produkt B | DVD
Produkt C | VHS
Produkt D | Blueray
Produkt E | HDD

Allerdings gibt es auch Kombi Geräte, etwa Player, die DVDs
und Blueray Discs abspielen können. Wie muss ich in diesem
Fall meine Datenbank gestalten?

Du speicherst die Produkte und Typen in unterschiedlichen Tabellen und stellt Die verbindung über eine dritte her.

Produkte

ID | Name
-----------------
1 | Produkt A
2 | Produkt B

Typen

ID| Bezeichnung
--------------
1 | VHS
2 | DVD
3 | Blueray
4 | HDD

Verknüpfung

Produkt\_ID | Typ\_ID
-------------------
1 | 1
2 | 2
2 | 3

Ein Beispiel findest du auch auf Wikipedia

HTH
Heavy

Danke für dein Posting, Heavy. Für mich - als Laie - sieht diese Lösung etwas kompliziert aus. Was ist denn von folgendem Ansatz zu halten:

(Produkt | VHS | DVD | BLUERAY | HDD)

Produkt A | Yes | No | No | No
Produkt B | No | Yes | No | No

Hi,
für mich - als Profi - rollen sich bei mir sofort die Fußnägel hoch wenn ich deine vereinfachte Sicht auf das real existierende Problem sehe.
Die Lösung von Heavy ist die richtig und nicht weiter zu vereinfachen.

Gruss
Joey

Moin, sax,

Was ist denn von folgendem Ansatz zu halten:

(Produkt | VHS | DVD | BLUERAY | HDD)

Produkt A | Yes | No | No | No
Produkt B | No | Yes | No | No

nichts, weil mit dem nächsten Gerätetyp die Datenbank struktur geändert werden muss. Im Konzept von Heavy werden dann einfach Inhalte gepflegt.

Gruß Ralf

Hallo Ralf,

danke für die Erklärung. Um das Beispiel etwas praxisnäher zu gestalten könnte ich noch weitere Informationen in meine Datenbank eintragen, wie etwa die UVP, das Gewicht sowie die Farbe des Abspielgerätes. Bei der Farbe habe ich den Fall, dass ein Gerät auch mehrfarbig sein. Könnte meine Datenbank nun so aussehen:

Produkt
ID | Name | UVP | Gewicht

1 | Produkt A | 225 | 2500
2 | Produkt B | 330 | 1450
3 | Produkt C | 170 | 2700

Typen
ID | Bezeichnung

1 | VHS
2 | DVD
3 | Blueray
4 | HDD

Finish
ID | Farbe

1 | Schwarz
2 | Silber
3 | Blau

Verknuepfung_Produkt_Typ
Produkt-ID | Typ-ID |

1 | 1
2 | 2
2 | 3

Verknuepfung_Produkt_Finish

1 | 1
1 | 3
2 | 3

Ich habe mittlerweile meine Datenbank auf Papier visualisiert. Da es sich um eine sehr kompakte Datenbank handelt, hält sich der Aufwand zum Glück in Grenzen. Allerdings stehe ich vor einer neuen Herausforderung. Angenommen in meiner Datenbank befinden sich Notebooks und ich möchte darin eintragen ob diese über eine Bluetooth Karte verfügen. Wenn Bluetooth vorhanden ist, möchte ich auch den Hersteller der Karte sowie die Buetooth Version speichern. Wie könnte eine solche Datenbank aussehen? Ich nehme an alles in eine Tabelle mit einer Spalte „Bluetooth“, einer Spalte „Hersteler“ und einer Spalte „Version“ ist nicht die eleganteste Lösung, oder?

Notebook
Produkt_ID | Notebook_Name |Bluetooth| Hersteller | Version |

1 | Megabook | No | NULL | NULL |
2 | Gigabook | Yes | Hersteller A| 3.0 |
3 | Ultrabook | Yes | Hersteller B| 2.0 |

Moin, sax,

vorab: ich bevorzuge eine etwas kompaktere Notation, weil die Beispiele kaum Erkenntnisgewinn bringen.

Da ein Produkt nur einen Typ haben kann, ist dafür keine eigene Zuordnungstabelle nötig:

**Produkt** (<u>Produkt_Id</u>, Name, UVP, Gewicht, FS\_Typ\_Id, ...)
**Typ** (<u>Typ_Id</u>, Typname, ...)
**Finish** (<u>FS_Produkt_Id</u>, <u>FS_Farbe_Id</u>, ...)
**Farbe** (<u>Farbe_Id</u>, Farbname, ...)

in Worten (Keys unterstrichen, FS sind Fremdschlüssel):

Produkt.FS_Typ_Id verweist auf Typ.Typ_Id, dort findet sich die Angabe zur Abspieltechnik; damit ist die 1:n-Beziehung Typ zu Produkt abgebildet. Finish.FS_Produkt_Id und Finish.FS_Farbe_Id sind Schlüsselbestandteile, so wird die m:n-Beziehung Finish zu Farbe umgesetzt.

Gruß Ralf

Moin, sax,

ist nicht die eleganteste Lösung, oder?

darauf kommt es nicht an - entscheidend ist der Informationbedarf des Anwenders.

Bemerkung am Rande: Mit den pre-Tags sehen Tabellen auch nach dem Abschicken noch aus wie solche:

Produkt\_ID | Notebook\_Name |Bluetooth| Hersteller | Version|
--------------------------------------------------------------
1 | Megabook | No | NULL | NULL |
2 | Gigabook | Yes | Hersteller A| 3.0 |
3 | Ultrabook | Yes | Hersteller B| 2.0 |

Gruß Ralf