J'essaye de construire une structure de table de données qui supportera mieux les critères suivants:La meilleure façon de concevoir un tableau de données pour un nombre inconnu de colonnes?
1) Je ne sais pas combien de colonnes la table doit avoir.
- Je pourrais avoir besoin de 6 colonnes dans certains cas, ou 10 dans d'autres. Je ne m'attends pas à ce que cette table ait besoin de 20 colonnes ou plus, mais je ne peux pas non plus garantir que cela ne sera jamais nécessaire.
2) Je dois prendre en compte l'espace de stockage et la vitesse de reporting.
- Cette table doit stocker des millions d'enregistrements et les rapports seront exécutés sur cette table. Je sais qu'il est difficile de faire pivoter des tableaux hautement normalisés du point de vue des rapports. Je veux donc procéder à la normalisation de la déclaration. Mais, je ne sais pas si le simple fait de ne pas utiliser un grand nombre de colonnes afin d'éviter une normalisation est une bonne idée car je finirai probablement avec beaucoup de NULLS dans la plupart des colonnes à la fin de la table, et ceux-ci (je pense) prennent tous une certaine quantité d'espace de stockage.
3) Si je dois choisir entre l'espace de stockage et les performances de rapport, je serai du côté des performances. Je ne suis pas un expert en intelligence d'affaires, et je ne suis pas un gourou T-SQL (je vais utiliser SQL Server), et donc je suis sûr qu'il y a des points précis ici que j'ai simplement oubliés. Ainsi, je me tourne à nouveau vers la brillante communauté SO pour obtenir des conseils, et avoir un peu de sens dans mon crâne épais.
Comment concevez-vous la table dans ces circonstances? Quels sont les détails qui me manquent et doivent encore être pris en compte?
Y a-t-il une raison, en plus de votre brève mention du pivotement difficile, que vous écartez d'un ensemble de tables 'product_property' et' product_property_value'? –
Kevin - Est-ce que product_property et product_property_value ont leurs propres problèmes? Tout (dates, nombres) doit être stocké sous forme de chaînes, les contraintes sont difficiles à implémenter, et bien sûr, pivoter même pour les requêtes "select" très basiques. –
Ma compréhension de ces choses est limitée, mais je répugnais à cela pour les raisons citées par Rajesh. – campbelt