Ce dont j'ai besoin est une migration pour appliquer une contrainte unique à une combinaison de colonnes. c'est-à-dire pour une people
table, une combinaison de first_name
, last_Name
et Dob
doit être unique.
ruby-on-rails
database
Rangalo
la source
la source
Selon howmanyofme.com, "Il y a 46 427 personnes nommées John Smith" rien qu'aux États-Unis. Cela fait environ 127 ans de jours. Comme c'est bien au-dessus de la durée de vie moyenne d'un être humain, cela signifie qu'un conflit DOB est mathématiquement certain.
Tout ce que je dis, c'est que cette combinaison particulière de champs uniques pourrait conduire à une frustration extrême des utilisateurs / clients à l'avenir.
Considérez quelque chose qui est en fait unique, comme un numéro d'identification national, le cas échéant.
(Je me rends compte que je suis très en retard à la fête avec celui-ci, mais cela pourrait aider les futurs lecteurs.)
la source
Vous souhaiterez peut-être ajouter une contrainte sans index. Cela dépendra de la base de données que vous utilisez. Voici un exemple de code de migration pour Postgres.
(tracking_number, carrier)
est une liste des colonnes que vous souhaitez utiliser pour la contrainte.Vous pouvez ajouter différentes contraintes. Lire la documentation
la source
add_index
méthode. ;)pg_constraint
table.Salut Vous pouvez ajouter un index unique dans votre migration aux colonnes par exemple
ou des index uniques séparés pour chaque colonne
la source
Dans l'exemple typique d'une table de jointure entre les utilisateurs et les publications:
Essayer de créer deux enregistrements similaires générera une erreur de base de données (Postgres dans mon cas):
par exemple faire ça:
Exemple entièrement exécutable: https://gist.github.com/Dorian/9d641ca78dad8eb64736173614d97ced
db/schema.rb
généré: https://gist.github.com/Dorian/a8449287fa62b88463f48da986c1744ala source
Par souci d'exhaustivité et pour éviter toute confusion, voici 3 façons de faire la même chose:
Ajouter une contrainte unique nommée à une combinaison de colonnes dans Rails 5.2+
Supposons que nous ayons une table Emplacements qui appartient à un annonceur et que la colonne référence_code et que vous ne souhaitiez qu'un seul code de référence par annonceur. vous voulez donc ajouter une contrainte unique à une combinaison de colonnes et la nommer.
Faire:
rails g migration AddUniquenessConstraintToLocations
Et donnez à votre migration un aspect similaire à celui-ci:
OU cette version de bloc.
OU cette version SQL brute
Chacun de ceux-ci aura le même résultat, vérifiez votre
schema.rb
la source