Pergunta

são definidos pelo usuário tipos de dados em SQL Server algo que um usuário SQL intermediário deve saber e uso?

O que são prós e contras do uso de UDTs?

Foi útil?

Solução

Nunca usá-los é o meu conselho. Você está em um mundo de dor, se você nunca tem que mudar a definição. Talvez isso tenha melhorado desde o SQL Server 2000 e alguém com mais familiaridade com as versões mais recentes podem lhe dizer se é agora seguro para entrar na água, mas até que eu tive a confirmação deste e tinha verificado-lo sozinho com um teste, eu não iria 't colocá-lo no meu sistema de produção.

Confira esta questão para mais detalhes: Como mudar o tipo de base de um UDT no SQL Server 2005?

Outras dicas

Eu não uso UDTs baseada em código, porque eu não acho que os mandados de complexidade extra as vantagens. I do UDTs uso T-SQL porque há muito pouca complexidade extra para que as vantagens valem o esforço. (Os agradecimentos vão para marc_s por apontar que o meu post original foi incompleta!)

Quanto UDTs baseados em código

Pense desta forma: se o seu projeto tem um componente de código gerenciado (o aplicativo) e um componente de banco de dados (SQL Server) que vantagem real que você ganha desde a definição de código gerenciado no banco de dados? Em minha experiência? Nenhum.

A implantação é mais difícil porque você terá que adicionar os conjuntos para a implantação do banco de dados e alterar estas montagens, adicionar arquivos, etc. dentro do SQL Server. Você também vai ter que ligar o CLR em SQL Server (não um grande negócio, mas ninguém provou-me que este não terá uma penalidade de desempenho / memória). No final, você vai ter exatamente o que você teria se você tivesse simplesmente concebido este em código do aplicativo. Pode haver alguma melhoria de desempenho, mas ele realmente me parece um caso de otimização prematura - especialmente desde que eu não sei se o global sofre de desempenho devido a ter o CLR on Versus off

.

Nota: Eu estou supondo que você estaria usando CLR do SQL Server para definir seus tipos. fala HLGEM sobre o SQL Server 2000, mas eu não estou familiarizado com 2000 e pensei que só tinha UDFs e não UDTs em DLLs externamente definidas (mas não citar-me ... Eu realmente não estou familiarizado com ele!).

UDTs No que diz respeito T-SQL

T_SQL UDTs pode ser definida no SQL sozinho (ir para a "programação | tipos | definidos pelo usuário Tipos de dados" no SQL Server Management Studio). Para UDTs padrão I se , de facto, recomendamos que você dominá-los. Eles são muito fácil e pode fazer sua DDL mais auto-documentado e pode impor restrições de integridade. Por exemplo, eu definir um "GenderType" (carvão animal (1), não nulo, segurando "H" ou "F") que assegura que apenas os dados adequado é permitida no campo sexo.

UDTs são bastante fáceis geral, mas este artigo dá um bom exemplo bonito de como levá-la para o próximo nível através da definição de uma regra para restringir os dados permitido em seu UDT.

Quando eu originalmente respondeu a esta pergunta eu estava fixa na ideia de tipos complexos, definidos pelo código ( cheira palma na testa ). Então ... obrigado Marc.

O pro de tipos definidos pelo usuário é abordada muito bem por Alex Papadimoulis. Os contras foram bem indicado aqui.

Gostaria também de salientar que a função sp_bindrule foi preterido, como observado por post de Alex. Eu não tenho certeza quando foi preterido, mas é agora. Na verdade, as regras estão obsoletas como um todo.

Se eu fosse querer criar um tipo com uma restrição, eu consideraria usando um tipo definido pelo usuário tabela com uma restrição de verificação na coluna apropriada (s). Isso também me dá uma maneira de construir um tipo de dados complexo.

Eu realmente não posso recomendar o uso de quaisquer características específicas sql-implementação que tornam mais difícil quando você está crescendo fora de MSSQL e estão migrando para outro DBMS. Para os nossos dbs DWH começamos em mssql, migrou para Oracle e tem desde o ano passado formou para hp vertica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top