Effiziente Möglichkeit, um nachbestellbare Artikel in einer Datenbank zu speichern [geschlossen]
Ich habe also eine Tabelle mit Benutzerfavoriten. Es gibt ein paar Millionen Zeilen.
Derzeit haben sie nur drei Spalten:id
(pk),userId
undsomeFkRef
. Es gibt einen IndexuserId
damit ich die Favoriten eines Benutzers schnell auswählen kann.
Derzeit werden diese von bestelltid
das ist effektiv nur die Reihenfolge der Einfügung. Wir möchten dem Benutzer die Möglichkeit bieten, seine Favoriten nachzubestellen, wahrscheinlich durch eine Art Drag & Drop-Interaktion.
Meine erste (und ich vermute naive) Herangehensweise wäre, einfach eine hinzuzufügenorder
Spalte und ein zusammengesetzter Index überuserId
,order
. Wenn der Benutzer jedoch nach dem Nachdenken seinen Artikel um einen bestimmten Abstand über die Liste bewegt, benötigen alle Zwischenzeilen zwischen der Startposition und der Endposition des Artikels ihreorder
Spalte neu berechnet und damit auch der Index.
Das ist (höchstwahrscheinlich) schlecht.
Bevor ich ewig versuche, genau zu quantifizieren, wie schlimm das ist, frage ich mich, ob es eine bessere tabellenbasierte Darstellung gibt, die mit den oben beschriebenen Operationen billiger zu manipulieren ist.