El diseño orientado a objetos alienta el uso de objetos inmutables para mejorar la seguridad y el rendimiento del hilo. Me pregunto si esto se traslada a las bases de datos relacionales.Base de datos: insertar nuevas filas o actualizar las existentes?
¿Será mejor que actualice las filas existentes o inserte nuevas que actúen como sobrescrituras?
- caso de uso
- Cada empleado se asocia con exactamente una empresa
- empleados cambian de empresa en el tiempo.
- El nombre del empleado debe ser único.
- esquema
- Empleado [nombre, compañía]
Opción 1: Cada vez que un empleado cambia de compañía, insertar un nuevo [nombre, compañía] fila del empleado. La aplicación recibe instrucciones para omitir las filas más antiguas (que se eliminan en una cadena de fondo a lo largo del tiempo). Opción 2: Cada vez que un empleado cambia de compañía, actualice la fila existente.
La opción 1 me recuerda a los objetos inmutables, ya que es seguro para la ejecución de subprocesos (sin necesidad de bloqueos). Por otro lado, cada vez que el empleado cambia de compañía, tengo que clonar todos los objetos asociados y señalarlos en el nuevo registro. Además, no está claro cómo evitar que los Empleados duplicados se creen por error.
La opción 2 facilita la prevención de empleados duplicados, pero tiene la desventaja de devolver asociaciones potencialmente inconsistentes en el aislamiento de transacciones READ_COMMITTED.
Es fácil recortar un seguimiento de auditoría inmutable, para valores adecuadamente pequeños de "inmutable". Pero en serio, * es * bueno almacenar los datos de auditoría en una tabla diferente. Los datos en la tabla de auditoría no se refieren a la entidad en la tabla original; se trata de la fila. –