2009-08-06 10 views
2

Je démarre un nouveau projet et envisage d'utiliser des types de données alias dans ma base de données SQL Server 2005 pour les colonnes de table communes. Par exemple Je définirais un type de données d'alias pour contenir le nom d'un objet, comme suit:Types de données d'alias SQL

CREER adt_Name TYPE DE varchar (100) non nul

utiliser ensuite pour la définition des colonnes de table , en s'assurant que toutes mes colonnes partagent exactement la même définition (longueur, nullability, précision, etc.).

  1. Quels sont les avantages de l'utilisation de types de données alias?
  2. Quels sont les inconvénients de l'utilisation de types de données alias?
  3. Quelles conventions de dénomination recommanderiez-vous? Je pensais adt_Xxx (type de données adt = alias).
  4. Pourquoi SQL Server 2005 Management Studio ne me permet pas de travailler avec des types de données d'alias à partir de l'interface graphique. Je ne peux les utiliser que via des scripts SQL. L'interface graphique ne les répertorie dans aucune des listes déroulantes - c'est frustrant.
  5. Comment l'utilisation de types de données alias affectera-t-elle mon modèle Linq to SQL?

Répondre

6

Avantages:

  • réutilisables et partageables, l'ADT est réutilisable dans la base, il est créé, si vous le voulez sur tous vos BDs créer alors dans la base de données de modèle

  • Enforcement, l'ADT appliquera les caractéristiques, la longueur et la nullité de son type de base, et pourra être utilisé pour appliquer les normes de développement.

  • Désactiver la co implicite nversions, ADTs ne peuvent pas être CAST ou mises

  • Simplicité, comme avec d'autres langues, ADTs prêtent simplicité au développement et à l'entretien

  • données Hiding

Inconvénients:

  • Non modifiables, les TDA ne peuvent pas être directement modifiés, vous devez abandonner et recréer em. Notez que vous pouvez toujours ALTER les tables dans lesquelles ils se trouvent dans un autre type de base ou ADT, puis les placer dans DROP et reCREATE, puis ALTER les tables en arrière (ou simplement en CREER une nouvelle pour les modifier).

  • Aucun outil, ADT doit être créé avec une requête directe à l'aide de l'instruction CREATE (sp_addtype est obsolète et ne doit pas être utilisé).

  • Les variables de table ne sont pas pris en charge

Conventions de nommage:

  • 'adt_' ressemble à cela fonctionnera très bien

LINQ to SQL:

  • Traiter ces types comme soit le type de base dans vos querys, ou créez le type correspondant à l'utilisation
1

Les types en général sont bons, mais notre projet l'utilise limitée, donc je peux répondre # 2 Le problème est "altérant". Nous avons développé le type TUrl en tant que varchar (255), mais après un certain temps nous avons essayé de changer en varchar (800). Pour la base de données de travail, c'est impossible.

Je ne connais pas d'autres inconvénients liés à l'utilisation de types de données alias.

6

Je conseillerais contre elle. Je supporte certains clients qui ont des produits qui les utilisent et ils sont un PITA constant (douleur-à-la-cheville).

En particulier, vous ne pouvez pas les utiliser dans les tables #temp, sauf si vous les définissez également dans TempDB. Et comme TempDB est réinitialisé chaque fois que vous redémarrez SQL Server, cela signifie que vous devez également les redéfinir chaque fois que vous redémarrez SQL Server. Mais cela signifie une procédure de démarrage qui doit être en Master et a certains privs. Et puisque les définitions d'alias (en réalité les UDT dans la terminologie Ms) peuvent changer, cela signifie que le DBA doit donner à quelqu'un d'autre le droit de modifier cette procédure, ce qui pourrait être un problème de sécurité. Oh, et si j'oublie, si vous devez mettre à niveau, migrer ou réinstaller votre serveur, vous aurez besoin d'une copie externe de ce proc pour rajouter à Master et vous devrez vous rappeler de le faire. Et puis, il y a les limites: d'après mon expérience, les développeurs veulent utiliser ces «Alias» parce qu'ils pensent que cela leur donnera la possibilité de changer la définition plus tard s'ils en ont besoin. Ça ne va pas. Les données persistantes ne sont pas comme du code persistant, elles n'ont pas ce genre de flexibilité et SQL Server ne vous aidera pas du tout ici. Après avoir essayé de le faire une fois, vous conclurez rapidement que vous n'auriez jamais dû utiliser les choses sacrément en premier lieu.

1

IMO utilisant des types intégrés est une énorme douleur dans le cou. D'autres ont déjà donné assez de raisons pourquoi. J'utilise des macros de style C. Par exemple, dans mon SQL 2000 code que j'avais la ligne suivante dans un fichier séparé macros.h

#define WIDEST_CHAR VARCHAR(8000) 

je l'utiliserais comme suit:

#include "macros.h" 

(snip) 

CREATE TABLE dbo.Comments(CommentID INT NOT NULL, 
Comment WIDEST_CHAR, 
... 

et la WIDEST_CHAR macro sera remplacé par VARCHAR (8000) par le préprocesseur. Quand j'ai migré mon système à 2005, j'ai simplement remplacé la définition de la macro par

#define WIDEST_CHAR VARCHAR(MAX) 

et tout était réglé.

Questions connexes