Ankündigung

Einklappen
Keine Ankündigung bisher.

Kleines Beziehungsproblem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kleines Beziehungsproblem

    Hallo Leute,
    ich bin grade am Planen einer Datenbank für ein neues Projekt. Allerdings bekomme ich das Beziehungsmodell nicht aufgelöst. Es gibt die Teilnehmer (= Users). Jeder Teilnehmer hat eine Sportart (= categories) die ihm gut liegt (z.B. Ballspiele, Geschicklichkeitsspiele, Ausdauerspiele). Abhängig von der Sportart kann er ein Spiel (= games) besonders gut (z.B. im Abhängig von den Ballspielen Fußball und Basketball).
    Das heißt, jemand kann gut in Fußball sein und hat dann zwangsläufig die Sportart Ballspiele. Er kann auch Ballspiele als Sportart haben und kein besonderes Spiel favorisieren. Er kann aber nicht Fußball gewählt haben und nicht die Ballspiele ausgewählt haben.
    Entsprechend müsste ich noch eine Abhängigkeit zwischen Sportart und Spiel einbauen. z.B. category als Fremdschlüssel in der games-Tabelle. Aber dann baue ich mir ein Kreislauf aus Abhänigkeiten.
    Ich blicke es grade nicht, wie ich die Abhängigkeit zwischen der category und den games gestalten soll.

    So würde der SQL-Code zur Zeit vermutlich aussehen (vereinfacht):
    Code:
    CREATE TABLE IF NOT EXISTS `users` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `email` VARCHAR(255) NOT NULL,
      `password` VARCHAR(255) NOT NULL,
      PRIMARY KEY (`id`))
    ENGINE = InnoDB
    
    CREATE TABLE IF NOT EXISTS `categories` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(255) NOT NULL,
      `description` TEXT NULL DEFAULT NULL,
      PRIMARY KEY (`id`))
    ENGINE = InnoDB
    
    CREATE TABLE IF NOT EXISTS `games` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(255) NOT NULL,
      `description` TEXT NULL DEFAULT NULL,
      PRIMARY KEY (`id`))
    ENGINE = InnoDB
    
    CREATE TABLE IF NOT EXISTS `users_categories` (
      `user` INT NOT NULL,
      `category` INT NOT NULL,
      PRIMARY KEY (`id`),
      CONSTRAINT `user`
        FOREIGN KEY (`user`)
        REFERENCES `users` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `category`
        FOREIGN KEY (`category`)
        REFERENCES `categories (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    
    CREATE TABLE IF NOT EXISTS `users_games` (
      `users` INT NOT NULL,
      `game` INT NOT NULL,
      CONSTRAINT `user`
        FOREIGN KEY (`users`)
        REFERENCES `users` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `game`
        FOREIGN KEY (`game`)
        REFERENCES `games` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    Habt ihr die Idee, die mir grade nicht ins Auge fällt?

    EDIT: Beziehungsweise, ist es überhaupt ein Problem? Mir liegt noch so im Halbschatten meines Hirns, dass unser Datenbanklehrer uns erzählt hätte, Kreisläufe in den Beziehungen sind blöd.

    Liebe Grüße
    Kansas

  • #2
    Du solltest dann Ballspiele allgemein als Spielauswahl zulassen.

    Code:
    id   categorie    game
    1    2            Ballspiele allgemein
    2    2            Fussball
    3    2            Basketball
    usw.
    
    id   categorie
    1    Ausdauerspiele
    2    Ballspiele
    ...

    Kommentar


    • #3
      Fussball "ist ein" Ballspiel. Basketball "ist ein" Ballspiel. Wasserball "ist ein Ballspiel".
      Fussball "ist ein" Mannschaftssport. Basketball "ist ein" Mannschaftssport. Wasserball "ist ein" Mannschaftssport.

      Also werden konkrete Sportarten in allgemeine Kategorien gesteckt.
      Kategorie: Ballspiel, Mannschaftssport
      Sportart: Fussball, Basketball, Wasseball

      Sobald eine Sportart in eine (oder mehrere) Kategorien eingeordnet wurde (games_categories), "erbt" ein User diese Kategorie durch die jeweilige Sportart(en) die ihm zugeordnet sind (users_games). Automagisch.
      Die Beziehung "user" zu "category" ist Mumpitz...
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar

      Lädt...
      X