Frage

Should Daten für eine zeitliche in einer oder zwei Tabellen gespeichert Datenbank? Wenn man nicht verletzen diese Normalisierung?

PERSON1 DATE11 DATE21 INFO11 INFO21 DEPRECATED
PERSON2 DATE21 DATE22 INFO21 INFO22 CURRENT
PERSON1 DATE31 DATE32 INFO31 INFO32 CURRENT

DATE1 und DATE2 Spalten zeigen an, dass INFO1 und INFO2 wahr ist für den Zeitraum zwischen DATE1 und DATE2. Wenn DATE

Should I gespalten diese Tabelle? Soll ich den Zustand speichern (veraltet oder Strom) in der Tabelle?

Um die Frage zu klären, weiter mehr ist Veraltet der Begriff von der Business verwendet, wenn Sie „nicht aktuell“ vorziehen, das Problem ist nicht semantisch, geht es nicht um SQL-Abfragen entweder, ich möchte nur wissen, welches Design verletzt oder am besten Anzüge Normalisierungsregeln (ich weiß Normalisierung ist nicht immer der Weg zu gehen, die nicht meine Frage entweder ist).

War es hilfreich?

Lösung

„Ich möchte wissen, welches Design gegen Normalisierungsregeln“

ist abhängig von dem Satz von Normalisierungsregeln Sie gehen wollen.

Die erste und wahrscheinlich Verletzung von normalen Formen und in Datum Buch es ist eine Verletzung der erste NF , ist Ihr Enddaten in den Zeilen, dass hold „aktuellen“ Informationen (Abstraktion von der Möglichkeit der Zukunft aktualisierte Informationen zu machen): Sie 1NF verletzen, wenn Sie dieses Attribut auf NULL festlegbare machen

.

Verletzungen der BCNF kann offenbar als Folge der Wahl der Schlüssel auftritt (wie es der Fall in nontemporal Datenbank zu Designs - der zeitliche Aspekt macht hier keinen Unterschied). WRT „Wahl der Tasten“: Wenn Sie separate Start- und Enddaten verwenden (und SQL Art von Blättern Sie keine andere Wahl), dann am ehesten sollten Sie zwei Schlüssel erklären: eine, die das Startdatum enthält, und eine, die das beinhaltet Enddatums.

Ein weiteres Design-Problem ist die Vielzahl von Datenspalten. Dieses Problem wird ganz in „Temporal Daten und das Relationale Modell“ im Allgemeinen diskutiert: wenn INFO1 und INFO2 können unabhängig voneinander ändern, könnte es besser sein, Ihre Tabellen zu zersetzen nur ein Attribut zu halten, um eine „Explosion zu vermeiden Zeilen zählen“, die sonst auftreten, wenn Sie jedes Mal ein einzelnes Attribut in der Zeile ändert eine neue komplette Reihe erstellen haben. In diesem Fall Ihr Design, wie Sie gab es eine Verletzung von Sechstes Normalform darstellt, wie in „Temporal Daten und das Relationale Modell“ definiert (das Normalform).

Andere Tipps

ist Normalisierungs ein relationales Datenbank-Konzept - es gilt nicht als auch auf zeitliche Datenbanken. Das ist nicht zu sagen, dass Sie nicht temporale Daten in einer relationalen Datenbank gespeichert werden können. Sie können auf jeden Fall.

Aber wenn Sie mit Temporal Datenbank-Design werden, dann werden die Konzepte von Temporal Normalisierungs gelten eher als Relational Normalisierung.

Sie haben angegeben, nicht die Bedeutung der Daten. Haben sie beziehen sich auf (a) den Zeitraum, wenn der angegebene Tatsache wahr war im wirklichen Leben, oder (b) zu der Zeit, als die angegebene Tatsache war glaubte wahr zu sein durch den Inhaber der Datenbank? Wenn (b), dann würde ich es nie auf diese Weise tun. Bewegen Sie die aktualisierte Zeile in eine Archivtabelle / log sofort, wenn die Aktualisierung abgeschlossen ist. Wenn (a), dann ist die folgende Aussage ist fraglich:

„Die Fakten sind veraltet und sollen zeigen, nicht mehr in der Benutzeroberfläche“

Wenn eine Tatsache nicht „Notwendigkeit in der Benutzeroberfläche zu zeigen,“ mehr, dann ist es nicht mehr braucht entweder in der Datenbank zu sein. Halten Sie solche Tatsachen gibt es nur eine Sache erreicht. Verschlechtern allgemeine Leistung für alle anderen

Wenn Sie wirklich diese historischen Tatsachenbehauptungen müssen Ihre Anforderungen entsprechen, dann sind die Chancen, dass Ihre so genannten „veralteten Fakten“ sind immer noch sehr relevant für das Geschäft, und deshalb nicht „veralteten“ überhaupt. Assumming, dass aus diesem Grund gibt es nur sehr wenig „wirklich veraltet“ Fakten in Ihrer Datenbank, ist Ihr Design gut. Halten Sie einfach die Anzahl der „wirklich veralteten Fakten“ small durch periodische sie aus der operativen Datenbank zu entfernen.

(PS) Zu sagen, dass Ihr Design gut ist, bedeutet nicht, werden Sie nicht auf Probleme stoßen. SQL ist extrem schlecht geeignet elegant diese Art von Informationen zu verarbeiten. „Temporal Daten und das relationale Modell“ ist eine ausgezeichnete Behandlung des Themas. Ein weiteres Buch, das man von Snodgrass, wird oft auch gelobt, aber nicht von mir. Dass man so etwas wie ein Kochbuch mit Rezepten mit diesen Problemen in SQL für den Umgang, wie das folgende Gespräch auf SO über dieses Buch bewiesen:

(Q): "Warum sollte ich das gelesen?" (A) „Da der Auslöser für Sie 135 auf Seite ist gefragt.“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top