Lo que necesito es una migración para aplicar una restricción única a una combinación de columnas. es decir, para una people
mesa, una combinación de first_name
, last_Name
y Dob
debe ser único.
ruby-on-rails
database
rangalo
fuente
fuente
Según howmanyofme.com, "hay 46,427 personas llamadas John Smith" solo en los Estados Unidos. Eso es alrededor de 127 años de días. Como esto está muy por encima del promedio de vida de un ser humano, esto significa que un choque DOB es matemáticamente seguro.
Todo lo que digo es que esa combinación particular de campos únicos podría conducir a una frustración extrema entre usuarios y clientes en el futuro.
Considere algo que sea realmente único, como un número de identificación nacional, si corresponde.
(Me doy cuenta de que llego muy tarde a la fiesta con este, pero podría ayudar a los futuros lectores).
fuente
Es posible que desee agregar una restricción sin un índice. Esto dependerá de la base de datos que esté utilizando. A continuación se muestra un código de migración de muestra para Postgres.
(tracking_number, carrier)
es una lista de las columnas que desea usar para la restricción.Hay diferentes restricciones que puede agregar. Lee los documentos
fuente
add_index
método. ;)pg_constraint
tabla.Hola Puede agregar un índice único en su migración a las columnas, por ejemplo
o índices únicos separados para cada columna
fuente
En el ejemplo típico de una tabla de unión entre usuarios y publicaciones:
Intentar crear dos registros similares arrojará un error de base de datos (Postgres en mi caso):
por ejemplo haciendo eso:
Ejemplo completamente ejecutable: https://gist.github.com/Dorian/9d641ca78dad8eb64736173614d97ced
db/schema.rb
generado: https://gist.github.com/Dorian/a8449287fa62b88463f48da986c1744afuente
Por razones de integridad y para evitar confusiones, aquí hay 3 formas de hacer lo mismo:
Agregar una restricción única con nombre a una combinación de columnas en Rails 5.2+
Supongamos que tenemos una tabla de ubicaciones que pertenece a un anunciante y tiene una columna reference_code y solo desea 1 código de referencia por anunciante. entonces desea agregar una restricción única a una combinación de columnas y nombrarla.
Hacer:
rails g migration AddUniquenessConstraintToLocations
Y haga que su migración se parezca a esta línea:
O esta versión de bloque.
O esta versión de SQL sin formato
Cualquiera de estos tendrá el mismo resultado, verifique su
schema.rb
fuente