none
Guardar imagen en Base de Datos? RRS feed

  • Pregunta

  • Buenas,

    Deseo guardar una imagen para cada registro de una tabla, sin embargo, tengo la duda si debo guardarla físicamente en una columna de la tabla o debo guardar simplemente la ruta (varchar) y la imagen guardarla en una carpeta del Servidor de aplicaciones.


    lunes, 24 de junio de 2019 13:47

Respuestas

  • Te propongo una tercera alternativa que junta las ventajas de las dos opciones que has mencionado:

    Define en la tabla una columna binaria como FILESTREAM. En esa columna almacenas el binario de la imagen.

    Esto hace que el servidor automáticamente guarde el binario de la imagen en una carpeta en disco, logrando el mismo rendimiento de entrada/salida que si hubieras guardado tú la imagen en una ruta y almacenado la ruta. Pero desde el punto de vista del código cliente se comporta como un campo binario de la tabla, con lo que recuperas la imagen directamente igual que si la hubieses guardado físicamente en una columna de la tabla.

    Ventajas:

    • Respeta permisos de la tabla igual que si la imagen estuviera dentro del campo binario (si la guardass en disco tienes que preocuparte tú de los permisos de acceso a la carpeta en disco además de preocuparte de los de la base de datos).
    • Se garantiza la integridad de datos. Por ejemplo, si borras el registro se borra también la imagen de la carpeta. Es transaccional. Mientras que si almacenases la ruta de la imagen podría ser que por un error de programación se te "desincronicen" las imágenes que hay en la carpeta y las rutas que hay en la tabla.
    • El backup de la base de datos salva también el Filestream. Si pusieras las imágenes en una carpeta, tendrías que hacer dos backups, uno de la carpeta y otro de la base de datos, y asegurarte de que se mantienen sincronizados (¿qué pasa si agregan oborran una imagen después de hacer uno de los dos backups pero antes de hacer el otro? Te quedan los dos almacenamientos inconsistentes si tienes que restaurar el backup).
    • El Filestream funciona en todas las ediciones de SQL Server, incluida la Express. Con la ventaja de que en la Express lo que metas en el Filestream no cuenta de cara al límite máximo de 10GB de la base de datos.

    lunes, 24 de junio de 2019 15:52