¿Qué tan geniales son los tipos de datos definidos por el usuario en SQL Server? [cerrado]

StackOverflow https://stackoverflow.com/questions/657568

Pregunta

¿Los tipos de datos definidos por el usuario en SQL Server son algo que un usuario intermedio de SQL debe saber y usar?

¿Cuáles son los pros y los contras del uso de UDT?

¿Fue útil?

Solución

Nunca los use es mi consejo. Estás en un mundo de dolor si alguna vez tienes que cambiar la definición. Tal vez esto ha mejorado desde SQL Server 2000 y alguien con más familiaridad con las versiones más nuevas puede decirle si ahora es seguro meterse en el agua, pero hasta que tenga confirmación de esto y lo haya comprobado yo mismo con una prueba, no lo haría No lo ponga en mi sistema de producción.

Mira esta pregunta para más detalles: Cómo cambiar el tipo base de un UDT en SQL Server 2005?

Otros consejos

no utilizo UDT basados ??en código porque no creo que la complejidad adicional justifique las ventajas. do utilizo UDT de T-SQL porque hay muy poca complejidad adicional para que las ventajas valgan la pena. (¡Gracias a Marc_s por señalar que mi publicación original estaba incompleta!)

Acerca de los UDT basados ??en código

Piénselo de esta manera: si su proyecto tiene un componente de código administrado (su aplicación) y un componente de base de datos (SQL Server), ¿qué ventaja real obtiene al definir el código administrado en la base de datos? ¿En mi experiencia? Ninguno.

La implementación es más difícil porque tendrá que agregar ensamblajes a su implementación de base de datos y alterar estos ensamblajes, agregar archivos, etc. dentro de SQL Server. También tendrá que encender el CLR en SQL Server (no es gran cosa, pero nadie me ha demostrado que esto no tendrá una penalización de rendimiento / memoria). Al final, tendrá exactamente lo que hubiera tenido si simplemente hubiera diseñado esto en el código de su aplicación. Puede haber alguna mejora en el rendimiento, pero realmente me parece un caso de optimización prematura, especialmente porque no sé si el rendimiento general sufre debido a que el CLR está activado versus desactivado.

Nota: Supongo que usaría CLR de SQL Server para definir sus tipos. HLGEM habla de SQL Server 2000, pero no estoy familiarizado con 2000 y pensé que solo tenía UDF y no UDT en dlls definidos externamente (pero no me cite ... ¡Realmente no estoy familiarizado con él!).

Acerca de los UDT de T-SQL

Los UDT de T_SQL se pueden definir solo en SQL (vaya a "Programabilidad | Tipos | Tipos de datos definidos por el usuario" en SQL Server Management Studio). Para los UDT estándar, de hecho, recomendaría que los domine. Son bastante fáciles y pueden hacer que su DDL sea más autodocumentado y pueden imponer restricciones de integridad. Por ejemplo, defino un " GenderType " (char (1), no anulable, con '' M '' o '' F '') que garantiza que solo se permitan datos apropiados en el campo Género.

Los

UDT son bastante fáciles en general, pero este artículo ofrece un muy buen ejemplo de cómo llevarlo al siguiente nivel definiendo una Regla para restringir los datos permitidos en su UDT.

Cuando originalmente respondí a esta pregunta, me fijé en la idea de tipos complejos y definidos por código ( palma de la mano a la frente ). Entonces ... gracias Marc.

El profesional de los tipos definidos por el usuario es se aborda bastante bien por Alex Papadimoulis. Las desventajas han sido bien establecidas aquí.

También me gustaría señalar que la función sp_bindrule ha quedado en desuso, como señaló la publicación de Alex. No estoy seguro de cuándo quedó en desuso, pero ahora lo está. De hecho, las reglas están en desuso en su conjunto.

Si quisiera crear un tipo con una restricción, consideraría usar un tipo de tabla definido por el usuario con una restricción de verificación en las columnas apropiadas. Esto también me da una forma de construir un tipo de datos complejo.

Realmente no puedo recomendar el uso de ninguna característica específica de implementación sql que lo haga más difícil cuando crezca fuera de mssql y migre a otro dbms. Para nuestros dwh dbs comenzamos en mssql, migramos a Oracle y desde el año pasado nos graduamos en hp vertica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top