Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Best-Practice-Frage für MySQL:Bestellung nach ID oder Datum?

Wenn es gibt Wenn Sie wahrscheinlich zwei mit demselben Datum hinzugefügt bekommen, benötigen Sie wahrscheinlich:

SELECT balance FROM my_table ORDER BY date_added DESC,id DESC LIMIT 1;

(beachten Sie die 'descending'-Klausel in beiden Feldern).

Sie müssen jedoch berücksichtigen, was passieren soll, wenn jemand einen Anpassungseintrag vom 2. Februar hinzufügt, der das Datum 31. Januar erhält, um sicherzustellen, dass der Monat Januar vollständig ist. Es wird eine ID haben, die größer ist als die am 1. Februar.

Im Allgemeinen arbeiten Buchhaltungssysteme nur mit dem Datum. Vielleicht könnten Sie uns warum sagen Die Reihenfolge ist wichtig, wir könnten andere Vorschläge machen.

Als Antwort auf Ihren Kommentar:

Ich würde ein paar Ratschläge geben - das ist alles, was mir sofort einfallen würde, normalerweise spreche ich viel mehr "Ratschläge" mit noch weniger Ermutigung aus :-) Die ersten beiden, eher datenbankbezogen als buchhalterisch, sind:

Erledige zuerst alles in dritter Normalform und kehren nur zurück, wenn und wenn Sie Leistungsprobleme haben. Dies erspart Ihnen viel Ärger mit doppelten Daten, die möglicherweise aus dem Takt geraten. Selbst wenn Sie zurücksetzen, verwenden Sie Trigger und andere DBMS-Funktionen, um sicherzustellen, dass die Daten nicht aus dem Takt geraten.

Ein Beispiel:Wenn Sie Ihre Suche in einer Spalte „last_name“ beschleunigen möchten, können Sie eine Spalte „upper_last_name“ (indiziert) erstellen und diese dann verwenden, um Datensätze zu finden, die mit Ihrem bereits großgeschriebenen Suchbegriff übereinstimmen. Dies ist fast immer schneller als die zeilenweise Funktion upper(last_name) . Sie können einen Insert/Update-Trigger verwenden, um sicherzustellen, dass der obere_Nachname immer richtig eingestellt ist, und dies verursacht nur dann Kosten, wenn sich der Name ändert, nicht bei jeder Suche.

Zweitens sollten Sie Daten nicht einmal über Tabellen hinweg duplizieren (wie Ihr aktuelles Schema), es sei denn, Sie können dieselben Trigger-Tricks anwenden, um sicherzustellen, dass die Daten nicht aus dem Takt geraten. Was wird Ihr Kunde tun, wenn Sie ihm eine Rechnung senden, bei der der Endsaldo nicht mit dem Startsaldo plus Einkäufen übereinstimmt? Das wird Ihr Unternehmen nicht sehr professionell aussehen lassen :-)

Drittens (und das hat eher mit der Buchhaltung zu tun) müssen Sie sich im Allgemeinen keine Gedanken über die Anzahl der Transaktionen machen, wenn Sie Salden im laufenden Betrieb berechnen. Das liegt daran, dass Buchhaltungssysteme normalerweise eine Rollover-Funktion am Jahresende haben, die die Eröffnungssalden zurücksetzt.

So müssen Sie normalerweise nie mehr als die Daten eines Jahres auf einmal verarbeiten, was nicht so mühsam ist, es sei denn, Sie sind die US-Regierung oder Microsoft.