2010-09-13 2 views
3

Je travaille à travers un exemple de MSDN qui utilise une petite base de données pour démontrer les données des tests menés, et est ici le schéma simple:Y a-t-il une raison pour laquelle la clé primaire est nchar alors que les autres champs sont nvarchar?

CREATE TABLE dbo.LogonInfoTest 
    (
    UserId nchar(256) NOT NULL PRIMARY KEY CLUSTERED, 
    Password nvarchar(256) NULL, 
    IsValid bit NOT NULL 
    ) ON [PRIMARY] 
GO 

Ma question est: Quelle est la raison sous-jacente pour le choix nchar comme le type de données de UserId et nvarchar en tant que type de données de mot de passe?

Répondre

5

Il n'y a pas de raison. La clé primaire doit être NVARCHAR (256), comme il est difficile pour moi de croire que l'UserId va toujours être exactement 256 caractères. En ce moment, ce schéma est potentiellement gaspiller (beaucoup) d'espace sur le disque. Notez qu'avec le stockage SQL Server 2008 row-compression la colonne de longueur fixe serait stockée comme une longueur variable sur le disque de toute façon (les espaces de fin sont supprimés), mais seulement si la compression de ligne est activée.

+0

merci! –

+0

En fait, avoir une clé primaire à double octet de 256 caractères (= 512 octets!) semble être une recette pour un désastre ... Imaginez à quel point l'index clusterisé est large et pléthorique. tous les index non groupés sur cette table finiront par être !! –

+0

intéressant, encore si je me mets dans les chaussures des auteurs, je ne peux pas secouer le sentiment qu'il a dû penser qu'il avait une raison là-bas; ça me semble juste délibéré. Eh bien, je suppose que c'est trop petit d'un détail pour s'attarder dessus. –

Questions connexes