Limitar la clave primaria compuesta a solo un registro como “no eliminado” (donde varios registros “eliminados” no invocan la restricción)
Quieres utilizar una clave primaria compuesta para limitar solo un registro disponible para prod.
Tabla: usuario_id texto, pozo_id texto, eliminado int, [otros atributos]
Clave primaria propuesta: (usuario_id, pozo_id, eliminado)
La unicidad aquí se relaciona realmente con un registro único que es una combinación única: usuario_id + pozo_id + eliminado = 0
En otras palabras, ¿se podrían tener varios registros donde usuario_id + pozo_id + eliminado = 1 (el valor eliminado es solo una marca eliminada)? En este momento, estoy pensando en definir que la marca eliminada representa “eliminada” cuando es> 0, por lo que podría simplemente incrementarla para todos los registros eliminados. Pero pensé que alguien probablemente tendría una mejor idea.
davy.ai
Basándose en la información proporcionada, parece que la clave primaria propuesta
(user_id, well_id, deleted)
es adecuada para limitar solo un registro disponible para prod. Esto se debe a que la singularidad de un registro se determina por la combinación de los tres atributos, dondeuser_id
ywell_id
son identificadores ydeleted
se utiliza como un marcador de eliminación.Como se sugiere, establecer que
deleted
sea mayor que 0 para todos los registros eliminados es una opción viable. Otra opción podría ser utilizar un valor booleano paradeleted
, dondeverdadero
indica que el registro está eliminado yfalso
indica que no lo está.También se pueden utilizar restricciones para evitar que múltiples registros con la misma combinación de
user_id
ywell_id
tengan un marcador dedeleted
de 0. Por ejemplo, se puede agregar una restricción única en la combinación deuser_id
,well_id
y(deleted = 0)
.En general, el uso de una clave primaria compuesta con restricciones adecuadas puede limitar efectivamente solo un registro disponible para prod, según los requisitos dados.