Une migration pour ajouter contrainte unique pour une combinaison de colonnes
Ce dont j'ai besoin est une migration d'appliquer la contrainte unique à une combinaison de colonnes. c'est à dire pour un people
table, une combinaison de first_name
, last_Name
et Dob
doit être unique.
Vous devez vous connecter pour publier un commentaire.
add_index :people, [:firstname, :lastname, :dob], :unique => true
Selon howmanyofme.com "Il y a 46,427 personnes du nom de John Smith" dans les seuls États-unis. C'est à propos de 127 ans, de jours. Car c'est bien au cours de la durée de vie moyenne d'un être humain, cela signifie qu'un DOB clash est mathématiquement certain.
Tout ce que je dis, c'est que la combinaison de champs uniques pourrait conduire à l'extrême de l'utilisateur/client de la frustration à l'avenir.
Envisager quelque chose qui est en fait unique, comme un numéro national d'identification, le cas échéant.
(Je me rends compte que je suis très en retard à la fête, mais il pourrait aider les futurs lecteurs.)
Vous voudrez peut-être ajouter une contrainte sans index. Cela dépendra de la base de données que vous utilisez. Ci-dessous un exemple de migration de code pour Postgres.
(tracking_number, carrier)
une liste des colonnes que vous souhaitez utiliser pour la contrainte.Il y a des contraintes différentes que vous pouvez ajouter. Lire les docs
add_index
méthode. 😉pg_constraint
table.Salut Vous pouvez ajouter un index unique dans votre migration vers les colonnes par exemple
ou de séparer les index uniques pour chaque colonne
Dans l'exemple typique d'une table de jointure entre les utilisateurs et les postes de:
En essayant de créer deux dossiers de jeter une erreur de base de données (Postgres dans mon cas):
par exemple faire:
Entièrement praticable exemple: https://gist.github.com/Dorian/9d641ca78dad8eb64736173614d97ced
db/schema.rb
généré: https://gist.github.com/Dorian/a8449287fa62b88463f48da986c1744a