2017-03-02 4 views
0

Die allgemeine Frage hier - für SQL, kann ich auf "neuesten Eintrag ist immer am höchsten Index" oder etwas in diesem Sinne?SQL-Tabelle für die Liste der Transaktionen - Sortierung erforderlich?

Insbesondere verwende ich sqlalchemy (Python-basierte ORM) und eine SQLite-Datenbank (sqlite_autoincrement = True), um Auszahlungen und Rücksendungen für einige Elemente zu verfolgen. Ich habe dafür eine "Darlehens" -Tabelle. Es scheint mir, dass alle neuen Einträge (immer über ORM in Python) an einen höheren Primärschlüssel-Index angehängt werden. Ist dies ein zuverlässiges Verhalten und überträgt es sich auf andere SQL-Datenbanken?

Anders ausgedrückt, wenn ich überprüfen möchte, ob ein Artikel zuletzt zurückgegeben oder ausgeliehen wurde, würde ich einfach eine Abfrage in der Tabelle Darlehen für alle Vorkommen dieses Elements, kann ich die "letzte" zurückgegeben Zeile, um diejenige zu sein, die zuletzt hinzugefügt wurde?

Antwort

1

Nein, verlassen Sie sich niemals auf solch ein Verhalten, niemals! Jede Garantie sollte durch das logische (relationale) Modell bereitgestellt werden, nicht durch den Motor, der als Black Box behandelt werden kann. Wenn Sie das "letzte" eingegebene Element finden müssen, müssen Sie sich auf ein Feld verlassen, das vom Modell garantiert wird, dass es einen solchen Wert enthält: eine Identitätsspalte oder eine Sequenz.

+0

Also ich denke, die implizite Frage zu Ihrer Antwort ist "bietet diese ORM (sqlalchemy) eine solche Garantie"? Und für sqlite mit Autoincrement, denke ich, kann es (nicht sehr sicher, und hoffen, dass jemand mir das sagen). Wenn dies der Fall ist, bedeutet das, dass ich mich auf dieses Verhalten verlassen sollte, oder sollte ich noch Tracker-Einheiten (für meinen Kontext, Datum und Uhrzeit) in jede Zeile zum Sortieren einfügen? –

+0

Ich glaube nicht, dass es die Aufgabe des ORM ist, so etwas zu tun. Wenn die Datenbank dies nicht standardmäßig unterstützt, liegt es in Ihrer Verantwortung, einen solchen Mechanismus zu implementieren. Wie auch immer, ich denke "Autoincrement", obwohl die Dokumentation darauf hindeutet, es zu verwenden, wenn es nicht notwendig ist, wird in Ordnung sein. –

0

Wenn Sie eine AUTOINCREMENT-Spalte verwenden, SQLite guarantees, dass die Reihenfolge der IDs monoton zunimmt.

Wenn jedoch die Zeit der Abhebungen/Rücksendungen wichtig ist, wäre es besser, diese Zeit in der Datenbank zu speichern.

Verwandte Themen