Faktentabelle Fremdschlüssel null?

8

Ich bin neu im Data Mart Design und muss einige Konzepte klären.

Ich habe ein wenig über Dimensionsmodellierung gelesen, wo ich sehe, dass Faktentabellen Fremdschlüsselreferenzen auf Dimensionstabellen speichern.

Angenommen, ich habe eine Telefonnummer-Dimensionstabelle und eine phone_extension-Dimensionstabelle. (Diese Tabellen haben unterschiedliche Details, weshalb ich sie nicht kombinieren kann.)

Soweit ich weiß, verfügen diese beiden Dimensionstabellen für eine bessere Leistung über ganzzahlige Primärschlüssel, und die Faktentabelle verfügt über einen eigenen ganzzahligen Primärschlüssel und speichert auch Fremdschlüsselverweise auf diese Dimensionstabellen.

Angenommen, ich habe eine Situation, in der nicht allen Telefonnummern eine Telefonerweiterung zugeordnet ist. (Einige Telefonnummern müssen keine Nebenstelle haben.)

Bei Telefonnummern mit einer Nebenstelle enthält die Faktentabelle Fremdschlüsselverweise auf beide Dimensionstabellen. Wie kann ich jedoch die Situation erfassen, in der nur Telefonnummern und keine Nebenstelle vorhanden sind (und umgekehrt, dh Nebenstelle ohne Telefonnummern)? ?

Sollte ich solche Informationen mit der Telefonnummer FK in der Faktentabelle mit einem Wert und dem Fremdschlüssel phone_extension null erfassen? Oder werden solche nicht verwandten Objekte nicht in Faktentabellen erfasst?

Außerdem muss ich einen Bericht über diesen Datamart erstellen. Beginnen Sie also damit, die Faktentabelle abzufragen und die Dimensionsschlüsselwerte abzurufen oder direkt aus der Dimensionstabelle zu berichten?

Vielen Dank für Ihre Zeit beim Lesen!
Schätzen Sie jede Hilfe!

Akotian
quelle
möglicherweise eine Serverfehlerfrage?

Antworten:

10

Sie können die FK einigen Dimensionstabellen als NULL überlassen, wenn diese Dimensionen nicht bekannt oder nicht anwendbar sind. Sie müssen nur daran denken, äußere Verknüpfungen zu verwenden, wenn Sie Ihre Berichtsabfrage durchführen.

Alternativ erstellen einige Benutzer einen Dimensionsdatensatz "none" und / oder "n / a" für Data-Mart-Dimensionen und füllen dann Faktentabellen-FKs aus, um auf diese zu verweisen, anstatt NULL-Werte zu verwenden. Menschen, die dies tun, mögen diesen Ansatz, weil sie eine Abneigung gegen äußere Verbindungen haben.

Personen, die NULL-FKs in Faktentabellen verwenden, haben normalerweise eine Abneigung gegen Personen, die eine Version für äußere Verknüpfungen haben. ;) (mit anderen Worten, dies ist ein Stilproblem, das zu Religionskriegen führen kann)

Ich sage, mach was du willst, aber wähle einen Ansatz und halte dich inbrünstig daran.

Joel Brown
quelle
10

Setzen Sie keine Nullen in das Lagerhaus oder in die Marts.

Das Lager sollte gut normalisiert sein (mindestens BCNF) und daher Nullen ausschließen. Nullen können in Staging-Tabellen beibehalten werden, wenn sie in Datenquellen vorhanden sind, sie sollten jedoch nicht im Warehouse selbst benötigt werden.

Marts sollten so konzipiert sein, dass sie Präsentationstools und Benutzeranfragen unterstützen. Nullen stören diese Dinge nur, weil sie nie angezeigt werden und Benutzerabfragen komplexer und fehleranfälliger machen - insbesondere in Fremdschlüsselspalten, die häufig Verknüpfungen unterliegen.

nvogel
quelle
Ich stimme zu, aber aus dem von Brown angeführten Grund: Es ist sehr wertvoll, explizite synthetische Datensätze zu haben, da das Feld sonst NULL wäre. NULL sagt Benutzern nichts; "Wert konnte nicht analysiert werden", "Feld leer gelassen" oder "Noch kein Account Executive zugewiesen" ist nützlich.
Jon of All Trades
0

Dimensionsschlüssel in Fakten sollten nicht null sein und imho haben fk's zu den Dimensionen, um die Notwendigkeit linker äußerer Verknüpfungen durch Endbenutzer, Berichte usw. zu beseitigen. Alle Ladungen von Fakten sollten eine linke äußere Verknüpfung mit der Dimension und standardmäßig einen 0-Schlüssel oder überhaupt kein Schlüssel und scheitern. Es ist besser, zu scheitern, als eine Verknüpfung mit der Dimension herzustellen, und keine Ahnung zu haben, dass Sie Zeilen in Ihrer Tatsache verpasst haben, bis einige Benutzer sie schließlich finden (falls dies jemals passiert).

Erstellen Sie einen "n / a" -Datensatz in der Dimension phone_extension und verknüpfen Sie ihn.

Meine Regel von themb ist, dass der einzige nullbare Wert in einem dwh-End-Datamart die Tatsache selbst ist, so dass Aggregatfunktionen wie avg immer noch funktionieren.

Ab Bennett
quelle