J'ai une table de faits qui a 17 clés. Normalement, j'ai désigné la clé primaire comme toutes mes clés dimensionnelles. MS SQL server 2008 a une limitation de 16 colonnes dans une clé primaire ou une contrainte unique. Y a-t-il du travail à faire?Comment gérer une table de faits avec plus de 16 clés dans le serveur ms sql
Répondre
J'ai téléchargé le projet réel de Microsoft. Ils n'incluent pas toutes les clés dans le PK. Il y a 2 scénarios. Si toutes les clés sont réellement uniques selon les règles métier, alors c'est le pk. 2- S'il y a plus de clés sur la table que ce qui le rend unique selon les règles de busines, alors un index clusterisé est utilisé sur les clés uniques et la table n'a pas de clé primaire.
Construire une colonne calculée comme une concaténation et un index sur cela?
Vous avez seulement besoin de concaténer les colonnes au-delà du 15ème, et faites de cette colonne supplémentaire le 16ème.
Etes-vous sûr que vous avez besoin de dix-sept dimensions?
Pouvez-vous combiner les dimensions? J'ai une fois eu trois dimensions avec trois-quatre valeurs chacune, et les ai regroupées dans une dimension «indésirable» (le nom de Kimball, pas le mien) avec environ 48 lignes.
J'avais considéré une dimension indésirable. Dans ce cas particulier, cela n'avait pas beaucoup de sens. – Rick
Créez une clé primaire de substitution pour la table de faits.
J'espère que vous n'avez pas beaucoup de faits. Avec 17 dimensions, vous rencontrez des problèmes d'agrégation très rapide.
Pour ce fait particulier, nous ne le faisons pas. C'est en fait une table de faits sans faits. La seule mesure est un compte contre la table. – Rick
Oui, j'ai besoin de 17 dimensions. J'utilise des ints pour les clés, comment fonctionnerait la concaténation? – Rick
Si tout ce qui vous intéresse est l'unicité et non l'assemblage, vous pouvez simplement les convertir en chaînes et les combiner avec un caractère séparateur. Si vous vous souciez de la collation, j'utiliserais un type d'argent et utiliserais un multiplicateur. Donc, si la 17ème valeur va de 0 à 1.000.000, alors la valeur de calc = 16 * 1000000 + 17ème. Il existe d'autres façons plus efficaces de le faire, en fonction de la structure de vos données et de la quantité de travail que vous êtes prêt à mettre. – lavinio
Une façon encore plus abstraite de combiner des clés serait avec le type de données binaire (x) - ajouter quatre octets par touche INT. Mais cela brise le paradigme du schéma des étoiles, et serait aussi laid que le péché. –