Skip to content

Instantly share code, notes, and snippets.

@javierav
Last active February 21, 2024 12:24
Show Gist options
  • Save javierav/4b3cf2a1a1505c23f4e9c6591ed3c45e to your computer and use it in GitHub Desktop.
Save javierav/4b3cf2a1a1505c23f4e9c6591ed3c45e to your computer and use it in GitHub Desktop.

Indices

SQLite

En SQLite un índice único sobre un campo de texto es sensible a mayúsculas (case-sensitive), lo que quiere decir que podremos insertar un registro "Javier" y otro "javier" ya que se consideran diferentes.

PostgreSQL

En PostgreSQL un índice único sobre un campo de texto también es sensible a mayúsculas (case-sensitive), lo que quiere decir que podremos insertar un registro "Javier" y otro "javier" ya que se consideran diferentes.

Rails

Si queremos aplicar una validación a nuestro modelo que impida crear un registro duplicado, deberemos añadir:

validates :name, uniqueness: true

O su equivalente

validates :name, uniqueness: { case_sensitive: true }

Siendo esta validación igualmente sensible a mayúsculas, comportándose de la misma forma que se comporta el índice de la base de datos.

Si queremos que no sea sensible a mayúsculas y que se consideren el mismo registro "javier" que "Javier", deberemos indicarlo en la validación:

validates :name, uniqueness: { case_sensitive: false }

Aunque esto sólo nos lo garantiza a nivel de código, porque el índice de la base de datos seguirá siendo sensible a mayúsculas y podría llegar a darse una condición de carrera en la que se inserten dos registros que no cumplan el criterio de unicidad que esperamos. Esto puede ser especialmente un problema en campos tipo email 1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment