¿Es posible?
Mi caso de uso es una tabla contable, con el requisito de que una vez que se crea un registro, debe ser de solo lectura, es decir, nadie debe poder editarlo ni eliminarlo. Esto solo se aplica a la tabla contable y a las tablas que tienen una relación directa con ella: hay otras tablas en el mismo esquema que se actualizarán / eliminarán de la forma habitual.
Tengo entendido que, para fines de integridad de datos, este tipo de restricciones deberían aplicarse en la capa de la base de datos, pero no puedo encontrar una forma limpia y ampliamente aceptada de hacerlo; este es un caso de uso en el que sería mejor hacerlo en la capa de aplicación?
Lo ideal sería una forma de hacerlo en SQL simple, para ser agnóstico de lo que se utiliza la plataforma DB, ya que puede estar sujeto a cambios, pero me doy cuenta de que puede ser demasiado pedir, por lo que si tiene para ser dependiente de la plataforma, se prefiere algún sabor de MySQL.
¡Gracias!
fuente
Los permisos parecen ser la opción obvia, sin embargo, también puede usar el ARCHIVE Storage Engine . Este motor de tablas está diseñado para registrar grandes cantidades de datos que no cambiarán:
La diferencia con los permisos es que alguien con privilegios extendidos aún podría cambiar los datos en la mayoría de los otros tipos de tablas, mientras que ARCHIVE no permite que nadie altere los datos que ya están en la tabla.
fuente
REPLACE
es una especie deUPDATE
! "REPLACE funciona exactamente como INSERT, excepto que si una fila anterior de la tabla tiene el mismo valor que una fila nueva para una CLAVE PRIMARIA o un índice ÚNICO, la fila anterior se elimina antes de insertar la nueva fila. Consulte la Sección 13.2.5 , "INSERT Sintaxis". "Busque en " Arquitectura de punto en el tiempo " o " Arquitectura de base de datos temporal "
Diseño de bases de datos: un punto en la arquitectura del tiempo
Base de datos temporal
La idea básica de ambos es que necesita agregar datos sin eliminarlos, o almacenar datos de tal manera que pueda extraer los datos tal como existen actualmente ... o existían en una fecha y hora anterior.
pregunta relacionada aquí: cómo-crear-un-punto-en-tiempo-arquitectura-en-mysql ,
fuente