Was ich brauche, ist eine Migration, um eine eindeutige Einschränkung auf eine Kombination von Spalten anzuwenden. dh für eine people
Tabelle, eine Kombination aus first_name
, last_Name
und Dob
sollte eindeutig sein.
ruby-on-rails
database
Rangalo
quelle
quelle
Laut howmanyofme.com gibt es allein in den USA "46.427 Menschen namens John Smith". Das sind ungefähr 127 Jahre. Da dies weit über der durchschnittlichen Lebenserwartung eines Menschen liegt, bedeutet dies, dass ein DOB-Konflikt mathematisch sicher ist.
Ich sage nur, dass diese bestimmte Kombination einzigartiger Felder in Zukunft zu extremer Frustration zwischen Benutzern und Kunden führen kann.
Betrachten Sie etwas, das tatsächlich einzigartig ist, wie gegebenenfalls eine nationale Identifikationsnummer.
(Mir ist klar, dass ich mit diesem sehr spät zur Party komme, aber es könnte zukünftigen Lesern helfen.)
quelle
Möglicherweise möchten Sie eine Einschränkung ohne Index hinzufügen. Dies hängt davon ab, welche Datenbank Sie verwenden. Unten finden Sie einen Beispiel für einen Migrationscode für Postgres.
(tracking_number, carrier)
ist eine Liste der Spalten, die Sie für die Einschränkung verwenden möchten.Es gibt verschiedene Einschränkungen, die Sie hinzufügen können. Lesen Sie die Dokumente
quelle
add_index
Methode. ;)pg_constraint
Tabelle hinzugefügt wird .Hallo, Sie können den Spalten beispielsweise einen eindeutigen Index für Ihre Migration hinzufügen
oder separate eindeutige Indizes für jede Spalte
quelle
Im typischen Beispiel einer Join-Tabelle zwischen Benutzern und Posts:
Der Versuch, zwei ähnliche Datensätze zu erstellen, führt zu einem Datenbankfehler (in meinem Fall Postgres):
zB das tun:
Vollständig ausführbares Beispiel: https://gist.github.com/Dorian/9d641ca78dad8eb64736173614d97ced
db/schema.rb
generiert: https://gist.github.com/Dorian/a8449287fa62b88463f48da986c1744aquelle
Der Vollständigkeit halber und um Verwirrung zu vermeiden, gibt es drei Möglichkeiten, dasselbe zu tun:
Hinzufügen einer benannten eindeutigen Einschränkung zu einer Kombination von Spalten in Rails 5.2+
Angenommen, wir haben eine Standorttabelle, die zu einem Werbetreibenden gehört und die Spalte reference_code enthält, und Sie möchten nur 1 Referenzcode pro Werbetreibendem. Sie möchten also einer Kombination von Spalten eine eindeutige Einschränkung hinzufügen und sie benennen.
Machen:
rails g migration AddUniquenessConstraintToLocations
Und lassen Sie Ihre Migration entweder so aussehen wie diesen einen Liner:
ODER diese Blockversion.
ODER diese unformatierte SQL-Version
Alle diese haben das gleiche Ergebnis, überprüfen Sie Ihre
schema.rb
quelle