¿Cuándo debo usar el tipo de datos XML en SQL Server?

15

¿Cuándo debo usar el tipo de datos XML en Microsoft SQL Server?

FarligOpptreden
fuente

Respuestas:

1

He hecho algo similar cuando serializo datos de objetos a XML para almacenamiento. Esto elimina la carga de tener tablas, columnas y relaciones en su lugar para contener datos de objetos complejos. El proceso se puede ayudar mediante el uso de un esquema con el que se ajusta el resultado XML, y las tablas de la base de datos se pueden usar para metainformación sobre los objetos en cuestión. En mi caso, expandir el esquema de la base de datos para acomodar el diseño del objeto sería una gran tarea.

Grant Palin
fuente
Esta respuesta coincide con mi opinión la más cercana. Puede consultar los datos subyacentes utilizando XQuery también si necesita devolver un conjunto de datos normal basado en tablas o construir un nuevo formato para el resultado. Mi pregunta originalmente se hacía cuando es factible usar XML, afirmando que tengo mis propias opiniones y me gustaría escuchar la opinión de los demás y su respuesta explica un caso de uso real y factible.
FarligOpptreden
11

Personalmente, nunca he usado el tipo de campo XML en SQL Server antes, y he realizado mucha programación de base de datos desde que agregaron esta característica. Siempre me pareció una sobrecarga programática y de rendimiento para usar contenido XML en una base de datos de forma nativa. Sinceramente, pensé que era un truco, porque todos estaban en el tren XML en un momento a principios de la década de 2000. "Oh, XML está activo, así que vamos a agregarlo a SQL Server para que no nos veamos pasados".

El mejor caso de negocios que puedo ver podría estar en la grabación de mensajes de datos basados ​​en XML que ha recibido en los que es posible que desee ver su estructura y datos, pero desea mantener la integridad del mensaje original por razones comerciales o legales. La sobrecarga podría ser demasiado grande para traducir el XML en una estructura de tabla, pero el uso de las capacidades XML en SQL Server podría reducir el costo de examinar los datos lo suficiente como para justificar su uso.

Probablemente haya docenas de otras razones por las que querría usarlo, pero francamente creo que debería considerar otros caminos hacia la felicidad antes de volverse loco con XML en SQL Server a menos que tenga razones comerciales muy específicas para hacerlo. Utilice un campo varchar (max) o de texto si tiene más sentido.

Sólo mi opinión, por supuesto :)

CokoBWare
fuente
Sé que esto es a) años después de publicar esta respuesta original, yb) no necesariamente relevante para XML, pero sigo sintiendo lo mismo sobre XML que ahora sobre la inclusión de métodos JSON en SQL Server.
CokoBWare
Supongo que la llegada de las opciones modernas de almacenamiento NoSQL (e híbrido) hace que la pregunta original sea redundante, ya que mi opinión en ese entonces estaba más orientada al almacenamiento de datos no estructurados de una manera que no creara un esquema arcano en la base de datos.
FarligOpptreden
8

Solo he encontrado algunos escenarios en los que buscaría activamente el uso del tipo de datos XML en SQL Server. Esto está fuera de mi cabeza, en orden de menor a mayor interés:

  • Almacenar / archivar respuestas XML generadas por otras aplicaciones
    • Por ejemplo, utilizamos Application Integration Framework (AIF) para comunicarnos entre una aplicación Silverlight personalizada y Dynamics AX. Almacenamos mensajes entrantes y salientes en la base de datos para ayudar a solucionar la comunicación entre esas aplicaciones
    • Debido a que el tipo de campo es XML en lugar de un tipo de cadena genérico (es decir, VARCHAR), podemos usar XQuery para consultar específicamente mensajes que coincidan con algunos criterios específicos. Esto sería mucho más difícil con una cadena simple como la coincidencia
  • Almacenamiento en caché / persistencia de un mensaje de respuesta compuesto
    • Actualice el campo XML con un activador o código de aplicación, que imitaría una columna calculada
    • En lugar de regenerar constantemente una respuesta XML a una aplicación de llamada basada, incurriría en gastos generales solo cuando se inserta la fila, en lugar de en cada llamada
    • Esto funciona mejor cuando los SELECT son mucho más frecuentes que las ACTUALIZACIONES / INSERTOS, lo que tiende a ser cierto para la mayoría de las aplicaciones
  • Almacenar múltiples valores en un solo campo
    • Una de las prácticas que he visto es el uso del tipo de datos XML para almacenar una colección de valores en un solo campo
    • Una ventaja es que no necesita diseñar un conjunto adicional de tablas para un almacén simple de clave / valor
    • Una desventaja de esto es que los datos no están completamente normalizados, lo que hace que las consultas sean menos obvias
    • Sin embargo, como se mencionó anteriormente, puede usar XQuery en ese campo XML para seleccionar filas que coincidan con los criterios de identificación, lo que neutraliza parcialmente el impacto de no estar completamente normalizado.

Dicho todo esto, el 99% del tiempo, no necesito absolutamente un campo XML al diseñar un esquema.

Taylor Gerring
fuente
4

Las pocas veces que he visto el tipo de datos XML en el servidor SQL se ha utilizado básicamente como un campo que se ha consultado como cualquier otro en la base de datos, lo que puede tener algunas implicaciones de rendimiento muy malas si tiene una gran cantidad de datos . Hay una razón por la que se llama servidor SQL y no servidor XML. :-) Las consultas que van en contra del XML simplemente no son tan rápidas como hacer una consulta de selección regular.

Sin embargo, pude ver que se usa para almacenar XML que no se consulta tanto, por ejemplo, almacenar el documento XML completo en un tipo de datos XML, pero tener los campos de búsqueda (claves) almacenados por separado con el documento XML. De esa manera, puede consultar su información más rápido y extraer el documento XML cuando llegue al punto donde desea ver el documento completo. De hecho, tuve que regresar y hacer esto con un número de aplicaciones en las que las personas intentaron usar el tipo de datos XML como un campo muy consultado y los datos crecieron hasta el punto en que la consulta se volvió demasiado lenta.

mwgriffith
fuente
4

He usado campos de tipo XML principalmente para fines de registro relacionados con servicios web ASMX o servicios WCF. Puede guardar la solicitud o los mensajes de respuesta.

La mayoría de las veces, guarda el XML en la base de datos con fines de referencia, no para su actividad comercial habitual (no para consultarlo cada 5 segundos desde el código). Si lo hace, determine los campos que generalmente consulta o usa la mayor parte del tiempo y cree columnas separadas para ellos. De esa forma, cuando guarde el XML en la base de datos, puede extraer estos campos y guardarlos en sus columnas correspondientes. Más adelante, al recuperarlos, no necesitará consultar el documento XML, solo puede usar las columnas que creó para este propósito.

La vida es mas que esto
fuente
1

Estos son los escenarios que vienen a la mente de inmediato cuando se consideran las condiciones que deberían existir para permitir los campos Xml en SQL Server:

  • datos binarios codificados para el intercambio donde desea ácido como control del recurso
  • fragmentos de documentos que se reconstituirán en su totalidad utilizando información dinámica
  • El usuario envió documentos o fragmentos que desea aislar y, al menos, de manera provisional, mantenga el sistema de archivos directamente.
JustinC
fuente
-2

Uso XML ampliamente en aplicaciones cliente-servidor para guardar datos estructurados en una sola llamada a la base de datos. Como ejemplo, tome una factura con líneas de detalle. Es simple hacer que el cliente serialice el objeto comercial en XML y lo pase a un proceso almacenado en una sola llamada. El proceso decide si se requiere una inserción o actualización; puede obtener el ID de la factura principal (una columna de identidad) para asignar a los registros detallados, todo dentro de una transacción del lado del servidor y sin que el cliente tenga que hacer varios viajes de ida y vuelta. No necesito más o menos 20 parámetros para especificar el registro de encabezado y no tengo que hacer una llamada para cada línea de factura. Además, a menudo es posible realizar cambios de esquema o introducir registros / auditorías, sin tener que tocar al cliente.

Rik Bradley
fuente
Estoy desconcertado de por qué los votos negativos. ¿Algún downvoters quiere iluminarme?
Rik Bradley