Hilfe bei Datenbankstruktur

macsvenson

Benutzer
Beiträge
14
Hallo liebes Forum,

mir stellt sich folgendes Problem.....

Ich habe 2 Tabellen

Tabelle 1 - (Einzel-Geschenke)
EZ_ID - EZ_Name - EZ_Größe - EZ_Gewicht

Tabelle 2 - (Geschenkbox)
Box_ID - Box_Name - EZ_Name

Anhand der Bezeichnungen ist ersichtlich worum es geht. Tabelle 1 beinhaltet alle Einzelgeschenke und Tabelle 2 die Geschenksets oder -boxen. In einer Geschenkbox befinden sich meherer gleiche und unterschiedliche Einzelgeschenke.
Und genau dieser Wert der jeweiligen Einzelgeschenke in der Box fehlt mir. Wie binde ich diesen Wert ein? Über eine 3. Tabelle?

Danke macsvenson
 
Werbung:
Ja. Einzelgeschenke hat ja eine ID / primary key. Dasselbe auch je Box. In einer weiteren Tabelle dann Paare von Box und Einzelgeschenk. Alternativ, wenn Du z.B. PostgreSQL hast, könnte man auch in der Tabelle der Boxen ein Array-Feld mit den einzelnen ID's nehmen, allerdings würden dann die ForeignKey-Constraints drauf gehen. Also nicht so gut.
 
Müsste die 3. Tabelle nicht aus Einzelgeschenk und Menge bestehen?
Eine Box besteht z.B. aus 3xEZ_ID1 + 4xEZ_ID2 + 2xEZ_ID3.

Ich bin auf MySQL beschränkt.....
 
Meinst du es so....

3. Tabelle (Paare Einzelgeschenke - Boxen)
Box_ID - EZ_ID - EZ_Menge

Ich muss für jedes Einz elgeschenk in der Box eine Zeile erstellen mit deren Menge. Und es gibt hier keinen primary key.
 
3. Tabelle (Paare Einzelgeschenke - Boxen)
Box_ID - EZ_ID - EZ_Menge

Ich muss für jedes Einzelgeschenk in der Box eine Zeile erstellen mit deren Menge. Und es gibt hier keinen primary key.
Korrekt. Das ist eine klassische many-to-many mapping Tabelle.

Eine Tabelle ohne Primary Key ist eine schlechte Idee.
Der Primary Key für die Tabelle wäre (box_id, ez_id)da jedes Einzelgeschenk nur einmal pro Box vorkommen darf
 
Nein, (box_id, ez_id) als Primary Key ist völlig ausreichend. Es sei denn Du erlaubst, dass das selbe Einzelgeschenk mehrfach (mit unterschiedlichen Mengen) in einer Box enthalten sein darf.

Code:
create table box_inhalt
(
  box_id integer not null,
  ez_id integer not null,
  menge integer not null,
  foreign key (box_id) references box (box_id),
  foreign key (ez_id) references geschenk (ez_id),
  primary key (box_id, ez_id)
);
(Oder so ähnlich)
 
Die Einzelgeschenke unterteilen sich in Weihnachts-, Oster- und Geburtstagsgeschenke. Ich habe jetzt für die 3 Einzelgeschenksorten je eine Tabelle generiert. Die ID ist int(3) und steht auf AUTO_INCREMENT. Normalerweise sollte diese in der Form "w001" (für das 1. Weihnachtsgeschenk) dargestellt werden.

Bekommt man die ID in dieser Form mit der automatischen Nummernvergabe hin?
 
woher soll die DB bei der Vergabe wissen, ob das nun ein 'w' für Weihnachten oder ein 'o' für Ostern oder ein 'g' für Geburtstag sein soll?
 
ach so, ja, 3 Tabellen. Die vierte ist dann für Pfingsten, dann noch Männertag, Hochzeitstag, ...

tl;dr
falsches Konzept, das skaliert nicht. Eine Tabelle und eine Spalte mit dem Anlaß. Bei der Ausgabe kannst dann je nach dem, was da drin steht, ein 'w' oder 'o' oder 'm' oder $whatver davorpacken. Davon abgesehen, daß so ein künstlich generierte Key einen eher geringen Anschauungswert hat.
 
Werbung:
so, mit nur einer Tabelle war das ja erst angedacht. Da ich aber gleich die IDs als Artikelnummern verwenden möchte, geht das nicht mit w001 und g001, weil die 001 gibt es ja nur 1x bei einer Tabelle. Deshalb wollte ich das dann auf verschiedene Tabellen bringen ;-(
Wie würdest du das machen?
 
Zurück
Oben