2017-04-04 2 views
-2

Möglicherweise nicht die richtige Verwendung des Wortes idempotent ... aber hören Sie mir zu.Schienen Datenbankstruktur idempotent?

Ist es bei Rails-Datenbankmigrationen möglich, die Reihenfolge der Spalten in einer Datenbank zu ändern? Ich bin mir bewusst, dass Rails-Migrationen Ihnen erlauben, Ihre Datenbank bis zum endgültigen erwarteten Status zu haben, da Sie von einem anfänglichen Zustand migrieren, aber sagen, dass Sie einen neuen Computer oder etwas einrichten - erwarten Sie den gleichen Zustand inklusive Spalte Bestellung?

EDIT:

Diese Frage weniger basiert auf etwas, was ich tun möchte, und basierend auf einer Änderung der Vorhersage. Ich habe eine vorhandene Anwendung und ich möchte voraussagen, wenn ich eine andere Benutzereinrichtung auf ihrem Computer habe, wenn sie die genaue Spaltenreihenfolge haben, die ich auf einem Hostcomputer habe, und wenn dieser Hostcomputer von Zustand zu Zustand wechselt, dass die Reihenfolge nicht ändert. Ändert sich die Bestellung auf einer frischen Maschine? Es scheint so zu sein.

+1

Was meinst du mit "Spaltenreihenfolge"? Physische Reihenfolge der Spalten in einer Datei auf der Festplatte? Ist es wichtig? –

+2

Warum würden Sie einen Daten-Dump ohne Header machen? Sich auf (implizite) Spaltenreihenfolge zu verlassen, tendiert dazu, nicht so gut zu funktionieren. Die Reihenfolge kann in verschiedenen Umgebungen unterschiedlich sein, wenn Migrationen in unterschiedlichen Aufträgen angewendet werden (wenn beispielsweise zwei Zweige Spalten zu derselben Tabelle hinzufügen). Es empfiehlt sich, die Spalten explizit in der gewünschten Reihenfolge aufzulisten oder die Spalten aus der fraglichen Abfrage zu lesen. Wenn Sie Daten ablegen, fügen Sie die Spaltennamen in die Daten ein. –

Antwort

0

Die Spaltenreihenfolge ist datenbankabhängig, daher stehen keine Rails-Migrationshilfen zur Verfügung, um die Spalten neu anzuordnen. Abhängig von Ihrer Datenbank können Sie jedoch möglicherweise datenbankspezifisches SQL direkt ausführen, um Spalten neu zu ordnen.

Ich glaube, dass sich diese Änderung in Ihrer schema.rb Datei widerspiegelt - die als kanonischer Zustand Ihrer Datenbank gedacht ist und von der aus neue Instanzen Ihrer App gestartet werden sollten - aber ich würde nicht darauf zählen, Die Spaltenreihenfolge spielt für Rails keine Rolle und kann daher nicht wie erwartet beibehalten werden. Wenn Sie absolut sicher sein wollen, dass Ihre Struktur genau erhalten ist, wechseln Sie zu structure.sql.

EDIT: Um OPs Adresse bearbeiten, die Reihenfolge der Spalten wahrscheinlich die gleichen für Benutzer auf der gleichen Datenbank und Datenbankversion sein, wenn sie exakt die gleichen Schritte verwenden, um eine Datenbank Bootstrap (zB db:migrate:reset und db:reset db:migrate kann zu unterschiedlichen Ergebnissen führen) . Wenn Sie structure.sql verwenden, sollten beide Benutzer in der Lage sein, db:reset db:migrate zu verwenden und identische Ergebnisse zu erhalten.

Beachten Sie jedoch, dass die Datenbanktheorie Zeilen als "Tupel" bezeichnet, da Dinge wie "Reihenfolge der Spalten in einer Tabelle" absolut keinen Einfluss auf die logische Operation haben. Schreiben Sie keinen Code, der von einer bestimmten Spaltenreihenfolge abhängt.