1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Schubladenmodell ?

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von koiku, 1 Dezember 2011.

  1. koiku

    koiku Neuer Benutzer

    Hallo,

    ich mache gerade ein Praktikum und soll da eine Datenbank modellieren. Seit drei Tagen sitze ich jetzt dran und komm nicht weiter. Ich versuch mal die Aufgabe zu beschreiben.
    Die Aufgabe besteht darin das man verschiedene Schubladen hat in denen verschiedene Gegenständen sich befinden. Gesucht werden soll nach den Gegenständen und als Ergebnis soll man die passende Schublade erhalten. Klingt jetzt noch einfach, aber leider sollen nur die Schubladen angezeigt werden die nur die gesuchten Gegenstände oder weniger enthalten.

    Noch ein Beispiel zur verdeutlichen, weil ich mir nicht sicher bin ob das so verständlich ist :p

    Schublade A enthält: Papier, Lineal, Stift
    Schublade B enthält: Papier, Lineal, Anspitzer
    Schublade C enthält: Papier, Lineal, Stift, Anspitzer

    Gesucht wird: Papier, Lineal, Stift, Anspitzer
    Ergebnis: A, C
    Gesucht wird: Papier, Lineal, Stift
    Ergebnis: A
    Gesucht wird: Papier, Lineal, Anspitzer
    Ergebnis: B

    Mein Problem ist jetzt das ich nicht weiß wie eine optimale Datenbank für das Problem aussehen könnte.

    mfg koiku
     
  2. ukulele

    ukulele Datenbank-Guru

    Ich denke nicht das es hier Sinn macht, eine Datenbank zu konstruieren die bewusst gegen die Grundsätze für die 3. Normalform verstößt. Man kann sicher ausprobieren, ob es damit "schneller" läuft, wenn hier Geschwindigkeit der Maßstab ist. Dein Problem liegt glaube ich weniger im Aufbau der Datenbank als in der Abfrage auf das gewünschte Ergebniss.

    Zum Testen reicht erstmal eine Tabelle für Schubladeninhalte.

    Code:
    CREATE TABLE inhalt(    schublade CHAR(1),inhalt VARCHAR(20) );
     
    INSERT INTO inhalt VALUES('A','Papier');
    INSERT INTO inhalt VALUES('A','Lineal');
    INSERT INTO inhalt VALUES('A','Stift');
    INSERT INTO inhalt VALUES('B','Papier');
    INSERT INTO inhalt VALUES('B','Lineal');
    INSERT INTO inhalt VALUES('B','Anspitzer');
    INSERT INTO inhalt VALUES('C','Papier');
    INSERT INTO inhalt VALUES('C','Lineal');
    INSERT INTO inhalt VALUES('C','Stift');
    INSERT INTO inhalt VALUES('C','Anspitzer');
    Suchen würde ich dann nach Schubladen, in denen andere Gegenstände als die gewünschten sind und die aus dem Ergebniss deine Suche nach gewünschten Gegenständen oder einfach aller Schubladen ausschließen (Ob das effektiv ist bei großen Datenmengen sei jetzt mal dahin gestellt).

    Code:
    SELECT    *
    FROM    inhalt
    WHERE (    inhalt = 'Papier'
    OR        inhalt = 'Lineal'
    OR        inhalt = 'Stift' )
    AND        schublade NOT IN (    SELECT    DISTINCT schublade
                                FROM    inhalt
                                WHERE    inhalt != 'Papier'
                                AND        inhalt != 'Lineal'
                                AND        inhalt != 'Stift' )
    PS: Ich verstehe die Aufgabe so das bei deinem Beispiel
    auch B richtig wäre, weil es auch gesuchte Gegenstände (nur eben nicht alle) enthält.
     
    koiku gefällt das.
  3. koiku

    koiku Neuer Benutzer

    Ja genau du hast es richtig verstanden, hatte B oben vergessen.

    Und DANKESEHR :) so hatte ich die Tabelle auch am Anfang modelliert, nur die Abfrage war falsch, hatte ohne DISTINCT gearbeitet und da kamen dann auch falsche Werte raus.

    mfg koiku
     
  4. ukulele

    ukulele Datenbank-Guru

    DISTINCT sollte aber keinen Unterschied machen, ich weiss nichtmal ob es schneller ist.

    Bei der Datenbank ist die Inhalte Tabelle natürlich eigentlich eine Zwischentabelle mit IDs die auf den Inhalt und auf die jeweilge Schublade zeigen. Das macht aber erst Sinn, wenn es komplexer wird.

    Kann auch sein das es noch eleganter geht.
     

Diese Seite empfehlen