Wenn Sie eine Datenbank verwenden, müssen Sie häufig in der richtigen Reihenfolge auf Datensätze zugreifen. Wenn ich beispielsweise ein Blog habe, möchte ich meine Blog-Posts in beliebiger Reihenfolge neu anordnen können. Diese Einträge haben oft viele Beziehungen, daher scheint eine relationale Datenbank sinnvoll zu sein.
Die gebräuchliche Lösung, die ich gesehen habe, ist das Hinzufügen einer Ganzzahlspalte order
:
CREATE TABLE AS your_table (id, title, sort_order)
AS VALUES
(0, 'Lorem ipsum', 3),
(1, 'Dolor sit', 2),
(2, 'Amet, consect', 0),
(3, 'Elit fusce', 1);
Dann können wir die Zeilen sortieren order
, um sie in der richtigen Reihenfolge zu erhalten.
Dies scheint jedoch ungeschickt:
- Wenn ich Datensatz 0 an den Anfang verschieben möchte, muss ich jeden Datensatz neu anordnen
- Wenn ich einen neuen Datensatz in der Mitte einfügen möchte, muss ich jeden Datensatz danach neu anordnen
- Wenn ich einen Datensatz entfernen möchte, muss ich jeden Datensatz danach neu anordnen
Es ist leicht, sich Situationen wie die folgenden vorzustellen:
- Zwei Datensätze haben das gleiche
order
- Es gibt Lücken
order
zwischen den Datensätzen
Diese können aus einer Reihe von Gründen relativ leicht vorkommen.
Dies ist der Ansatz, den Anwendungen wie Joomla verfolgen:
Sie könnten argumentieren, dass die Benutzeroberfläche hier schlecht ist und dass Menschen, anstatt Zahlen direkt zu bearbeiten, Pfeile oder Drag-and-Drop verwenden sollten - und Sie hätten wahrscheinlich Recht. Aber hinter den Kulissen passiert das Gleiche.
Einige Leute haben vorgeschlagen, eine Dezimalzahl zum Speichern der Reihenfolge zu verwenden, sodass Sie "2.5" verwenden können, um einen Datensatz zwischen den Datensätzen in Reihenfolge 2 und 3 einzufügen seltsame Dezimalstellen (wo hören Sie auf? 2,75? 2,875? 2,8125?)
Gibt es eine bessere Möglichkeit, Bestellungen in einer Tabelle zu speichern?
orders
und dem ddl behoben .