En tant qu'utilisateur de base de données, j'ai de la difficulté à interpréter les données dans l'une de nos tables au travail. Quand j'ai questionné l'équipe de données, les architectes de la solution m'ont dit que c'était fait exprès parce que c'était une table de type 6.Stratégie d'entreposage valide? Type6?
De mon googler limité, je pense un type 6 devrait ressembler à ceci:
+--------------+------------------+------------------+------------+------------+---------------------+
| Customer_Key | Customer_Attrib1 | Customer_Attrib2 | Start_Date | End_Date | Record Updated Date |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 1 | A | 1/1/2001 | 6/8/2004 | 6/9/2004 |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 1 | A | 6/9/2004 | 4/11/2016 | 4/12/2016 |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 1 | A | 4/12/2016 | 4/3/2017 | 4/4/2017 |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 2 | B | 4/4/2017 | 5/18/2017 | 5/19/2017 |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 2 | B | 5/19/2017 | 12/31/9999 | 5/19/2017 |
+--------------+------------------+------------------+------------+------------+---------------------+
L'activité en question est le Customer_Attrib1, comment il est passé de 1 à 2 sur 18.05.2017.
J'aime ce style parce je peux comprendre ce que customer_attrib1 est à tout moment en utilisant les dates de début et de fin:
select customer_attrib1
from table
where customer_key=123
and '2017-03-01' between start_date and end_date;
Mais ...
Le tableau lui-même en fait est mise à jour à terme échu, à ressembler à ceci:
+--------------+------------------+------------------+------------+------------+---------------------+
| Customer_Key | Customer_Attrib1 | Customer_Attrib2 | Start_Date | End_Date | Record Updated Date |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 2 | A | 1/1/2001 | 6/8/2004 | 5/19/2017 |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 2 | A | 6/9/2004 | 4/11/2016 | 5/19/2017 |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 2 | A | 4/12/2016 | 4/3/2017 | 5/19/2017 |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 2 | B | 4/4/2017 | 5/18/2017 | 5/19/2017 |
+--------------+------------------+------------------+------------+------------+---------------------+
| 123 | 2 | B | 5/19/2017 | 12/31/9999 | 5/19/2017 |
+--------------+------------------+------------------+------------+------------+---------------------+
Pouvez-vous voir à quel point des problèmes que j'ai, si je veux aller trouver ce th e customer_attrib1 a eu lieu en mars 2016?
NOTE: Il est une colonne de previous_customer_attrib1, mais il obtient également la masse mis à jour la valeur de 1. Je voulais garder la table assez petit pour obtenir le point à travers, ce qui est la raison pour laquelle je ne l'ai pas ajouter au-dessus .
La grande question: Est-ce une stratégie d'entreposage valable? Est-ce vraiment ce que le type 6 est? Ou est-ce que ma solution est mauvaise?
Question de suivi: La réponse serait-elle différente si customer_attrib1 était une clé étrangère d'une autre table?
Quand vous dites "ce que le client_attrib1 était en mars 2016", selon quel état/date de la base de données? En quoi est-ce différent de l'utilisation de la deuxième table? À chaque date de mise à jour de l'enregistrement, il existe une version des choses. Vous n'expliquez pas ce que cela signifie, mais Record Date mise à jour est ce qu'il est, si une mise à jour ou une correction a été faite, et non, vous ne pouvez pas "comprendre ce que customer_attrib1 est à tout moment en utilisant les dates de début et de fin "sans elle. PS Comment est le Type 6? – philipxy
Certains champs d'une table de type 6 affichent toujours la valeur actuelle (ce sont des champs de type 1 qui sont remplacés par des modifications). Exemple: un entrepôt de données ne contient que les numéros de téléphone de contact actuels - pour éviter les appels aux numéros anciens/incorrects. Je vous recommande de vérifier auprès de votre équipe de données pourquoi ils ne conservent pas les anciennes valeurs dans 'Customer_Attrib1'. Ils peuvent essayer d'empêcher certains comportements/résultats. –
Je suis d'accord avec @Rich. Une fois que vous avez dépassé le type 5, les noms ne sont pas utilisés uniformément dans l'industrie. Votre équipe de données devrait être en mesure de fournir une définition pour le type-6. –