PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL : Tabelle in Tabelle anlegen



DanDanger
09-09-2003, 15:32
Hallo,

ich habe folgendes Problem :
In einer Kundendatenbank sollen zu jedem Kunden seine Bestellungen aufgelistet werden.
Die "Bestell-Daten" werden in einer separaten Tabelle ausgelagert die folgenden
Aufbau hat :
Bestell.Nr(varchar) --- KundenNr(unsigned int) --- Datum(varchar) --- Bestellte Artikel

Das was mir nun Probleme bereitet ist die Spalte "Bestellte Artikel".
Da eine Bestellung Üblicherweise aus mehr als einem Artikel besteht, müsste ich hier sozusagen eine "Tabelle in der Tabelle" anlegen.
Meine Frage : Geht sowas, und wenn ja : Wie ????

Neugierige Grüsse
DanDanger

TrollSlayer
09-09-2003, 17:59
Ich würde eine separate tabelle für die artikel anlegen: z.B.:
ArtNr(unsigned int), Bezeichnung(varchar)
und diese dann über einen fremdschlüßel in deine kundentabelle einbinden.

DanDanger
09-09-2003, 20:48
Ich würde eine separate tabelle für die artikel anlegen: z.B.:
ArtNr(unsigned int), Bezeichnung(varchar)
und diese dann über einen fremdschlüßel in deine kundentabelle einbinden.


Nun, alle Artikel liegen schon in einer seperaten Tabelle.
Was meinst Du denn mit "Fremdschlüßel" (bin MySQL Neuling) ??

Das Problem ist ja, das ich nicht weiss, wie viele Artikel in EINER Bestellung vorkommen.

Im Ideal-Fall sollte die Bestell-Tabelle ungefähr so ausehen :



Kunde Artikel
===========================
Kunde_A Artikel_X
Artikel_Y
.....
Artikel_N
-----------------------------------
Kunde_B Artikel_Q
Artikel_W
.....
-----------------------------------
(...... u.s.w. ........)


Mein Problem ist : eine "normale" SQL-Tabelle kann ja pro "Zelle" nur EINEN Wert Speichern.
Das Problem bei dieser Tabelle ist aber, das die "Artikel-Zelle" pro Kunde mehrere werte (nämlich "Zeiger" auf die jeweiligen Artikel) Speichern muss.

Neugierige Grüsse
DanDanger

TrollSlayer
09-09-2003, 21:04
Dann vielleicht sowas:
ein Tabelle Betsellungen mit:
(bestellNr, kundenNr, datum) mit bestellNr als Schlüßel
eine mit Artikeln:
(atrikelNr, preis, ...) mit atrikelNr als Schlüßell
und ein Tabelle BestellPos mit:
(posNr, bestellNr, atrikelNr, menge) mit posNr als Schlüßel
in der letzten speicherst du die atrikel-nummern mit zugehöriger bestellNr.
Beispiel:
ein kunde (kundeNr 42) bestellt (in der bestellung 100) atrikeln mit den nummern 1, 2, 3.
Bestellungen sieht dann so aus:
(100, 42, 9.9.2003)
BestellPos:
posNr | bestellNr | atrikelNr | menge
-----------------------------------------------------
1 | 100 | 1 | 1
2 | 100 | 2 | 1
3 | 100 | 3 | 1

die artikel aus der bestellung kriegst du mit z.B.:
SELECT atrikelNr FROM BestellPos WHERE bestellNr = 100

DanDanger
10-09-2003, 03:40
JO, so geht's !

Wenn's wirklich keine Möglichkeit gibt, Tabellen in Tabellen anzulegen, werd ich's wohl so machen.

DANKE :-)

elrond
10-09-2003, 12:04
@DanDanger

ohne Dir zu nahetreten zu wollen: Es könnte Sinn machen wenn Du dich mal mit den Themen Relationale Datenbanken / Datenbankdesign auseinandersetzt.:o

kehj
10-09-2003, 13:02
Original geschrieben von elrond
@DanDanger
Es könnte Sinn machen wenn Du dich mal mit den Themen Relationale Datenbanken / Datenbankdesign auseinandersetzt.:o

Ich wette darauf, daß es Sinn macht ;)
Im Ernst: benutze keine Datenbank, wenn du nicht weißt, wie es funktioniert...

elrond
10-09-2003, 13:05
Original geschrieben von kehj
Im Ernst: benutze keine Datenbank, wenn du nicht weißt, wie es funktioniert... http://www.kurts-smilies.de/respekt.gif

...und ich hatte schon Angst als Klugscheißer beschimpft zu werden...:D

kehj
10-09-2003, 14:40
Was heißt hier "Klugscheißer"?

Ich halte es für 'n ziemliches Problem, wenn Leute Dinge machen, von denen sie keine Ahnung haben. (Ist allgemein gesprochen, nicht auf den Autor dieses Thread bezogen)
Auch wenn ich das gelegenlich auch so mache, sollte man doch wenigstens ein grundlegendes Verständnis für die eingesetzte Technik haben. Oder sehe ich das falsch?

Es erspart IMHO Aufregung und spart Nerven...
Und wie das genannt wird, ist mir ziemlich wurscht

kehj

elrond
10-09-2003, 14:42
http://www.kurts-smilies.de/dito.gif

ich seh's genauso...

DanDanger
10-09-2003, 23:22
Hallo,



Ich halte es für 'n ziemliches Problem, wenn Leute Dinge machen, von denen sie keine Ahnung haben. (Ist allgemein gesprochen, nicht auf den Autor dieses Thread bezogen)
Auch wenn ich das gelegenlich auch so mache, sollte man doch wenigstens ein grundlegendes Verständnis für die eingesetzte Technik haben. Oder sehe ich das falsch?



Na ja, jeder hat mal klein Angefangen......
Ich hab' mir ein paar Bücher (MySQL vom Addison-Wesley-Verlag) + Online-Doku's durchgelesen, aber die gingen meist nicht weiter als Tabellen anlegen und Verknüpfen mit diversen SELECT-Anfragen.
Also dachte ich mir : "Learning by Doing", und fing an, mit einer kleinen Demo-Datenbank aus einem Online-Tutorial herumzuexperimentieren.

Da ich noch MySQL-Anfänger bin, dachte ich "Frag mal im Forum...", die 'Ahnung' kommt dann beim Programmieren...

Ich glaube nicht, das meine Frage soooo Grudsätzlich ist, denn meines Wissens kann ein Eintrag in einer Tabelle nur auf EINEN Eintrag einer anderen verweisen.





Gruss
DanDanger

PS : Wie habt Ihr das MySQL-Zeug denn gelernt ???
Könnt Ihr mir event. "gute" MySQL-Literatur (am Besten für die C-API) empfehlen ????

kehj
11-09-2003, 08:17
Original geschrieben von DanDanger

Na ja, jeder hat mal klein Angefangen......
Ich hab' mir ein paar Bücher (MySQL vom Addison-Wesley-Verlag) + Online-Doku's durchgelesen, aber die gingen meist nicht weiter als Tabellen anlegen und Verknüpfen mit diversen SELECT-Anfragen.

Ich hab das MySQL-Buch auch kurz durchgeblättert, ist wirklich nur sehr grundlegend. Interessant für dein Problem ist das Kapitel über Normalisierung einer Datenbank. Es ist zugegebenermaßen sehr kurz (und wahrscheinlich nicht so leicht zu verstehen), aber es ist wichtig.



Also dachte ich mir : "Learning by Doing", und fing an, mit einer kleinen Demo-Datenbank aus einem Online-Tutorial herumzuexperimentieren.

Da ich noch MySQL-Anfänger bin, dachte ich "Frag mal im Forum...", die 'Ahnung' kommt dann beim Programmieren...


OK, dann beschreib doch einfach mal, was du speichern willst.
Wenn ich dich richtig verstanden habe, gibt es

a) Kunden (Kundennummer, Adresse, ...)
b) Waren (Warennummer, Warenname, Preis, ...)
c) Bestellungen (Kunde, Ware, Anzahl, Lieferdatum, ...)

Richtig? Kannst du die Liste vervollständigen?



PS : Wie habt Ihr das MySQL-Zeug denn gelernt ???

Ich hab 'ne Vorlesung dazu gehört. Und mußte gerade den ganzen Theorie-Kram in meinen Kopf prügeln ;)

kehj

elrond
11-09-2003, 08:20
die Frage die du dir stellen solltest hat ersmal nichts mit dem datenbanksystem MySQL zu tun sondern mit dem Thema Datenbankdesign.
Wenn du ein Buch zum Thema hast, vertiefe dich doch einfach noch einmal in die Kapitel, in denen es um die sogenannte Normalisierung (Stichworte 1. bis 3. Normalform) geht. Dann wirst Du feststellen , daß die hier gefundene Lösung ein ganz elementarer Bestandteil des Themas ist...

edit: ops, war ich wohl zu langsam...http://www.kurts-smilies.de/hm2.gif

DanDanger
11-09-2003, 08:55
Hallo,

erstmal : Danke für die Antworten.



OK, dann beschreib doch einfach mal, was du speichern willst.
Wenn ich dich richtig verstanden habe, gibt es

a) Kunden (Kundennummer, Adresse, ...)
b) Waren (Warennummer, Warenname, Preis, ...)
c) Bestellungen (Kunde, Ware, Anzahl, Lieferdatum, ...)


Genau, mehr will ich nicht Speichern.

ABER : Ich glaub, ich werd' Euren Rat befolgen, und mich nochmal Durch die Literatur Wälzen....
Es ist wohl besser, ich komme selbst auf die Lösung (vor allem, wenn es um ein (scheinbar) so Grundsätzliches Problem geht).

Gruss
DanDanger

elrond
11-09-2003, 09:02
du kannst, wenn die tabellen-struktur fertig ist, die sachen ja noch mal posten um die Meinungen/Hinweise einzuholen.

bis dahin viel spaß

PS: Noch ein Tip: ich habe, zum DB-Design immer Papier und Bleistift in der Hand bevor ich das am Rechner mache. Wenn ich erst ein Bild von einer DB habe kann nichts mehr passieren...

kehj
11-09-2003, 10:20
Moin,

wenn du es alleine lösen willst - OK. Ich hätte sonst vorgeschlagen, in aller Ruhe erstmal die Beziehungen zwischen den "Objekten" zu modellieren und dann daraus die Tabellenstruktur abzuleiten.
Ich würde zu Entity-Relationship Diagrammen greifen (so hab ich's gelernt), damit kann man solche Sachen IMHO ziemlich gut und einfach modellieren.

Meine Meinung
kehj

Gaert
11-09-2003, 10:42
Servus,

ich geb auch mal noch kurz meinen Senf dazu...

Auf http://www.fabforce.net findest du den DB Designer4.
Das ist ein richtig gutes CASE und Prototyping Tool für MySQL - noch dazu Open-Source. Es ist nicht sehr bekannt, aber meiner Meinung nach ein exzellentes Programm.

Ich mach meine ER Modelle und Tabellenschemata zwar auch meistens erstmal auf Papier, aber wenns etwas komplexer wird kommst du um ein CASE Tool meistens nicht rum.

Gruß,

Gaert

elrond
11-09-2003, 14:57
@kehj

genauso habe ich es mener Azubi auch beigebracht...:o

kehj
11-09-2003, 15:20
Ich habe vor dem Entwurfsprozeß auch erstmal ziemlich ungläubig gestanden. Aber wenn man einmal das Prinzip verstanden hat, ist es wirklich simpel.

Einfach nur nach bekanntem Schema. Zumindestens wenn man bei den grundlegenden Dingen bleibt. Bei der 4. Normalform hab ich dann auch keinen Bock mehr gehabt.
(Wie hieß die doch gleich? Die hat irgend 'n wilden Namen)

Na ja, es ist dann doch keine Kernphysik... ;) ;)

MfG