1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Hilfe bei Datenbankstruktur

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von macsvenson, 17 Dezember 2018.

  1. macsvenson

    macsvenson Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
    macsvenson gefällt das.
  3. macsvenson

    macsvenson Benutzer

    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.....
     
  4. macsvenson

    macsvenson Benutzer

    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.
     
  5. castorp

    castorp Datenbank-Guru

    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
     
    macsvenson gefällt das.
  6. macsvenson

    macsvenson Benutzer

    Kann der primary key aus 2 IDs bestehen, so dass es diese Kombination nur 1 mal gibt?
     
  7. castorp

    castorp Datenbank-Guru

    Natürlich kann er das. Warum sollte das nicht möglich sein?
     
  8. macsvenson

    macsvenson Benutzer

    also müsste ich der 3.Tabelle noch die Paar_ID als primary key hinzufügen?

    Tabelle 3
    Paar_ID - Box_ID - EZ_ID - EZ_Menge
     
  9. castorp

    castorp Datenbank-Guru

    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)
     
  10. macsvenson

    macsvenson Benutzer

    Ahh..., verstanden - so werde ich mich mal heran wagen ;-)

    Danke castorp für deine Hilfe!
     
  11. macsvenson

    macsvenson Benutzer

    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?
     
  12. akretschmer

    akretschmer Datenbank-Guru

    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?
     
  13. macsvenson

    macsvenson Benutzer

    indem ich der DB in der Weihnachtstabelle die Zusammensetzung (w + generierte Nummer 001) definieren könnte. Geht nicht oder?
     
  14. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  15. macsvenson

    macsvenson Benutzer

    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?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden