2k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von novator Mitglied (121 Punkte)
Hallo zusammen,
ich habe folgendes vor:
In einer mysql-db sollen Auftragsdaten gespeichert werden, die der Kunde in ein Formular eingibt. Es gibt also jeweils einen Auftrag, mit mehreren Positionen. So weit so gut.

Jetzt zur Frage:
Ich habe bisher zwei Ansätze gefunden, wie das datenbankseitig zu lösen wäre.

1. Ansatz: Es gibt eine gemeinsame Tabelle und dort neben den allgemeinen Auftragsdaten (Bestellnummer, Lieferdatum, ....) zwei Datenfelder, welche die Produkte betreffen. In einem werden die Produkt_ids gespeichert und im anderen die dazu gehörigen Stückzeilen. Jeweils durch Kommata getrennt.

2. Ansatz: Es gibt zwei Tabellen. In einer Tabelle stehen die allgemeinen Auftragsdaten, in der anderen Tabelle sind die Produktdetaildaten (also produkt_id und produkt_menge). Für jede Position ein Datensatz. Die beiden Tabellen sind mittels 1:n-Verknüpfung miteinander verbunden.

Welcher Ansatz ist nun richtig, oder stimmen beide?
Oder bin ich ganz auf dem Holzweg?

Würde mich über eure professionelle Meinung freuen!
vielen Dank im Voraus.
lg

2 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
...die dazu gehörigen Stückzeilen

meinst Du Stückzahlen?

Der zweite Ansatzt ist sicher der professionellere.

Also, ich habe das so verstanden, dass der erste Ansatz so aussieht:

Bestellnummer | Lieferdatum | Produkt_ids | Stückzahlen
12345 | 24.07.2012 | 12, 24, 256 | 2, 8, 16
12346 | 24.07.2012 | 23, 42, 303 | 2, 4, 2
...

Im Prinzip gibts hier auch eine 1:n Beziehung, wie beim zweiten Ansatz, nur dass man die 'Verwaltung' hier selbst programmieren muss.

Die Spalte Produkt_ids ist prinzipiell auch eine Tabelle (ich nenne sie Tabelle B) mit n Datensätzen, die genau einem Datensatz in der anderen Tabelle (einer Bestellnummer) zugeordnet ist.

Die Spalte Stückzahlen ist sozusagen die zweite Spalte der Tabelle B. Die Verknüpfung besteht durch die position in der Spalte (die erste Zahl von Stückzahlen gehört zur ersten Zahl von Produkt_ids).

Fazit:
Strukturell ist beides das selbe, aber der erste Ansatz verschleiert die Struktur, ist langsamer, unübersichtlich und fehleranfällig, und erfordert langfristig mehr Programmieraufwand.
Kurzfristig war es vermutlich an irgendeiner Stelle einfacher, das 'mal eben schnell' so zu machen.
0 Punkte
Beantwortet von novator Mitglied (121 Punkte)
Hallo Kicia,

vielen Dank für deine super Antwort!
Ich werde mich dann an die von dir empfohlene zweite Variante halten.
Wenn ich mich schon damit beschäftige, möchte ich auch einen gewissen Anspruch an die Professionalität stellen :-)

Liebe Grüße & schönen Tag!
...