Schlüsselproblem

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

  • Schlüsselproblem

    Hallöchen,

    ich versuche gerade einen kleinen Shop zu programmieren. Zwei kleine Verständnisprobleme habe ich bei der Indizierung.

    Die Benutzer sollen mit einer Kombination aus laufender Nummer und Jahr eine Kennung erhalten, damit man in jedem Jahr neu hochzählen kann. Also z.B. der 527 Benutzer dieses Jahres erhält die Nummer 52704, der 433 Benutzer nächsten Jahres die Nummer 43305. Wie trage ich das jetzt von der Suchgeschwindigkeit her in die Datenbank ein? Folgende Überlegungen:
    1. Nummer wie im obigen Beispiel in eine Spalte. Indizierung als Primärschlüssel oder Unique? Und ist es günstiger die Jahreszahl rechts oder links anzuordnen?
    2. Nummer in zwei Spalten. Über beide Spalten Primärschlüssel. Und wieder Jahreszahl in die erste oder zweite Spalte?

    Das zweite Problem besteht bei den Kategorien. Sagen wir mal Hauptkategorie in Spalte C, Unterkategorie in Spalte D, Merkmal in Spalte E.
    Alle drei Spalten werden als Index deklariert. Wenn ich es nun richtig kapiert habe, muss die WHERE-Abfrage immer von links erfolgen. Also:
    SELECT lala WHERE irgentwas in Spalte C, irgentwas in Spalte D, irgentwas in Spalte E.
    Wie ist es jetzt aber, wenn nur die Hauptkategorie gewählt wird + Merkmal, also:
    SELECT ... WHERE irgentwas in Spalte C, irgentwas in Spalte E.
    Klappt das auch?

    Habe schon viele Buch- und Internetseiten hinter mir, ohne Erfolg. Wäre prima, wenn hier einer Rat weiss.

    Schöne Grüße, Mike.

  • #2
    jo, klappt auch.

    allerdings solltest du and statt der Kommata verwenden
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Besten Dank, War schon ganz verzweifelt.
      Vielleicht hat ja auch noch einer zum ersten Teil nen Tip.

      Kommentar


      • #4
        das erste Problem ging ein wenig unter.

        1. Wenn in eine Spalte, dann das Jahr nach vorne
        2. aber besser zwei Spalten; sonst gibt´s ab dem 1000. User im Jahr Probleme
        3. noch besser: du benutzt intern ein auto-increment und speicherst das Jahr (bzw. das gesamte Datum) der Registrierung extra.

        Dann gibt´s nämlich auch keine Probleme bei zwei gleichzeitigen Anmeldungen.
        Und die laufende Nummer pro Jahr lässt sich auch im Nachhinein noch ziemlich schmerzlos ermitteln.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Hey Titus,

          erst mal schönen Dank.

          Habe also, alles in eine Spalte zu packen, abgehakt. Aber zum Verständnis. Wieso kommt es ab dem 1000 User zu Problemen?

          Und bei deinem Punkt 3: Ist es nicht ein Geschwindigkeitsnachteil mit lfd Nummer und dem kompletten Registrierungsdatum zu arbeiten, da hier mehr Zahlen abgefragt werden, als bloss eine zweistellige Jahreszahl?
          Nach Handbuch benötigt Date 3 Bytes, ein Tinyint nur 1 Byte.

          Auch müsste man es ja irgentwie schaffen, das bei der Jahreswende, Autoincrement wieder bei 1 anfängt. Glaube, darüber stand schon mal was im Forum, konntes aber eben nicht finden.

          Kommentar


          • #6
            Code:
            CREATE TABLE customer(
            cust_year YEAR NOT NULL,
            cust_id INT(10) auto_increment NOT NULL,
            cust_pass char(32),
            PRIMARY KEY (cust_year, cust_id)
            )
            1. ausprobieren
            2. wohlfühlen
            3. wissen, dass der höchste auto_increment-wert je gruppe wieder genutzt wird, wenn du ihn löschst
              Code:
              2004 | 1
              2004 | 2
              2005 | 1
              2005 | 2
              2005 | 3
              löschst du 2004 - 2, und legst für 2004 einen neuen eintrag an, dann bekommt der wieder die 2 und nicht die 3
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Prima,

              probiere das gleich aus.

              Kommentar

              Lädt...
              X