Je suis responsable de la création d'une base de données sur un projet. Nous avons des domaines qui vont rarement avoir une valeur (1 dans tous les 10 000 enregistrements) et j'essaie de déterminer la meilleure façon de stocker cela dans la base de données.
Pour autant que je puisse voir, j'ai 3 options:
Y a-t-il d'autres options que je n'ai pas envisagées?
J'essaie de travailler sur les avantages et les inconvénients de chaque méthode. Pour autant que je puisse dire 1 serait le plus facile et 2 prendrait le moins d'espace mais je me débats pour trouver de nombreuses ressources pour 3.
Cela ressemble à ce dont vous avez besoin est colonnes clairsemées et index filtrés et optez avec option 1. Celles-ci sont entièrement prises en charge et fonctionnalités documentées pour exactement ce scénario.
Le moteur de base de données SQL Server utilise le mot-clé clairsemé dans une définition de colonne pour optimiser le stockage des valeurs dans cette colonne. Par conséquent, lorsque la valeur de la colonne est null pour une ligne de la table, la valeur ne nécessite aucun stockage.
Je ne peux pas imaginer une solution XML performante dans ce scénario, elle aura une énorme surcharge de métadonnées redondantes et sera lente à interroger.
Une colonne nullable prend non Espace si la longueur variable dans SQL Server. Le fait d'être null est stocké dans le null bitmap . Vous pouvez l'indexer si nécessaire avec index filtrés Pour ignorer les colonnes Null.
Ajoute la complexité lorsque vous considérez le point 1.
Ne pas. Difficile à rechercher, parse, etc.: vous Will Regret plus tard
Cela dépend également de la taille: cela sera-t-il char (1000) pour quelques milliards de lignes? Ou Tinyint pour 100 000 lignes? Si ces derniers considèrent la complexité supplémentaire du point 2: ne valent pas la peine.
Avec SQL Server 2008, vous disposez d'une option supplémentaire d'utiliser des colonnes clairsemées, conçues spécifiquement pour la situation que vous avez mentionnée.
Ils ont l'avantage supplémentaire que vous pouvez les afficher en tant qu'objet XML combiné à l'aide de xml colonne_set ou de les référencez individuellement et fournit une épargne d'espace formidable.
Consultez l'article de blog suivant pour plus de détails: http://www.sqlskills.com/blogs/paul/post/sql-server-2008-sparse-columns-and-xml-column_set.aspx