2

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?

+0

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

+0

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. –

+0

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. –

Répondre

0

Votre premier exemple ressemble à un simple SCD de type 2. Le deuxième exemple ressemble à Type 1 (écrasement) sur l'attribut 1 et Type 2 SCD sur l'attribut 2.

Vous ne trouverez pas non plus de Type 6 tel que présenté, ce qui vous permettrait de voir à la fois l'historique des changements (d'une manière de type 2, selon votre premier exemple) mais aussi les valeurs actuelles, typiquement en conservant un ensemble séparé de colonnes pour les valeurs actuelles, ou en liant à l'enregistrement courant. Vous mentionnez la précédente colonne attrib 1, qui est cruciale pour qu'elle soit de type 6. Toutefois, vous ne vous attendez pas à ce que la mise à jour soit également effectuée en masse, car sinon vous obtenez la valeur précédente et vous ne voyez aucun changement avant cela.

Différentes personnes se réfèrent à un type 6 signifiant des choses différentes. Ce dont vous avez besoin dans un type 6 est simplement la valeur elle-même (qui s'applique à la ligne à la fois) et la valeur courante (qui est mise à jour en masse quand il y a un changement), avec (bien sûr) l'approche de type 2 nouvelles lignes pour chaque changement.

Pour répondre à votre question, oui, je peux voir à quel point vous avez des problèmes avec le design qui vous a été donné. C'est une stratégie valable si et seulement si elle répond aux exigences de l'entreprise. Ces techniques sont seulement là pour aider à répondre aux besoins des entreprises. Si l'attribut est une clé étrangère, cela devient un peu plus compliqué, et nous aurions besoin de plus d'informations sur la manière dont cette table à clés étrangère suivait l'historique pour pouvoir répondre si cela change quelque chose.