Interne Reihennummer (oder so)

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

  • Interne Reihennummer (oder so)

    Da ich noch überhaupt keine Ahnung von Datenbanken habe (absoluter Voll-Newbie), frage ich hier:

    Jede Reihe in einer Tabelle hat doch sicher eine Reihennummer, oder?
    Also eine Nummer, die angibt, die wievielte Reihe sie ist...

    Ich habe auch eine Spalte, die ID heißt, gemacht (mit auto_increment), die das gleiche macht, es sei denn, es wird eine Zeile gelöscht! Dann haben die übrigen Reihen ihre alten Nummern und eine Lücke entsteht:

    Erst so:
    1 BAUM dfr
    2 BLUME hsdfhg
    3 HUMMEL fgdhhfg

    Dann eine gelöscht:
    1 BAUM dfr
    3 HUMMEL fgdhhfg

    Nun will ich aber eine Angabe, die mir sagt, dass HUMMEL nun in der 2. Zeile steht und nicht mehr in der 3., was aber die ID sagt...

    Deshalb:
    Wie kann ich
    1) sehen, welche Reihe es ist
    -oder-
    2) die IDs so einstellen, dass sie immer die Reihennummer sind, also dass bei einer Löschung alle nach dem gelöschten Punkt eins runter zählen... ok?

  • #2
    Bau doch in der Ausgabe ein Zähler ein...
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      ?!?!?!?!?!?!?!?!

      Kommentar


      • #4
        Die interne ID ist nicht dazu da um duie Aussage zu treffen der wievielte Eintrag der Record in der Datenbanktabelle ist. Die interne ID ist eine eindeutige Identifikation des Records und dient zum Aufbau von Relationen.

        Stell Dir vor Du hast einen Kundeintrag.

        ID=4711
        Name=Otto
        Vorname=Pimpelhuber

        In einer anderen Tabelle verknüpfst Du den Kundeneintrag mit einer Bestellung:

        ID=2241
        KundenID=4711
        Bestellmenge=7
        Bestellgegenstand=Gurkenglas

        Würdes Du jetzt einen Kundeneintrag löschen und die ID der Kundentabelle "synchronisieren" müßte auch der Relationseintrag in der Tabelle Bestellung mitupgedatet werden, sonst würden die Gurken von einem anderen bestellt worden sein.

        Tja da gibt es sicher noch viele Tabellen, die auf eine Interne ID einer anderen Tabelle weisen. Auch dort müßte überall die ID "synchronisiert" werden.

        Beispiel Tabelle:
        Zahlungseingang:
        ID=88321
        KundenID=4711

        Außerdem ist die Position des Satzes relativ. Wenn Du nach einem Kriterium sortieren würdest, so würde der Satz an einer anderen Position angezeigt werden.

        Ich hoffe das war so halbwegs verständlich.

        Kommentar


        • #5
          na du machst doch irgendwo zB:
          while($row = mysql_fetch_row($result)){
          // hier einen Zähler einbauen zB:
          $i++;
          print $1;
          }
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            Mit anderen Worten:
            Wenn Du einen primären Index änderen willst kommst Du nicht umhin sämtliche Relationen manuell zu ändern.

            Ich denke man muß sich dessen bewußt sein, daß die ID eine Identifikation darstellt und nichts anderes,
            und sollte so belassen werden, wie sie ist und nicht aus kosmetischen Gründen geändert werden,
            um beispielsweise "unschöne" Löcher zu stopfen. Was ist schon unschön?
            Die Gefahr ist einfach zu groß durch Manipulationen dieser Art die Relationen zu zerstören.
            Mit diesen "unschönen Löchern" sollten Anwender gar nicht konfrontiert werden.

            Ob eine ID den Wert 3 oder 785789 aufweist ist doch im Rahmen eines relationalen Datenmodells
            absolut belanglos. Verknüpfungen über IDs dienen der Relationsfunktionalität im Hintergrund.
            Im Normalfall sollte der Benutzer keine Kenntnis vom ID-Inhalt haben müssen.

            Kommentar

            Lädt...
            X