2009-03-05 2 views
3

Sie können neue Benutzer registrieren und ihr Hochzeitsdatum eingeben. Als Purist wollte ich das als Date speichern. Nach Nutzerinterviews war klar, dass sich die Realität von diesem Ansatz unterscheidet. Die Nutzer sind sich oft nicht sicher über den Tag oder den Monat und möchten Teildaten speichern, also "Juni 2009" oder "irgendwann 2012".SQL-Datumsmuster für Daten, bei denen der Benutzer möglicherweise nicht alle Informationen kennt

Kennt jemand ein gutes Design-Muster, das die Speicherung von Teildaten ermöglicht und dann versucht, eine Zeitleiste für den großen Tag zu erstellen - auch wenn Teildaten eingegeben werden?

Antwort

2

Vielleicht ein "unscharfer" Termin. Wenn sie "Juni 2009" sagen, könnte das als 15. Juni 2009 mit einer Abweichung von +/- 15 Tagen gespeichert werden.

"irgendwann im Jahr 2010" wäre 01 Juli 2010 mit einer Abweichung von 180 Tagen.

Speichern Sie also ein Datum und ein # Tage.

Wenn/wie das in der Praxis funktionieren würde, weiß ich nicht. Nur eine Idee. Ein Datumsbereich ist möglicherweise einfacher zu implementieren.

+0

Dies ist auch ein sehr guter Vorschlag, da wir ein einziges zu manipulierendes Datum und eine graue Fläche haben, die mit dem Näherkommen des Datums abfallen kann. Interessanterweise könnten wir auch statische Daten gegen die Wochenenden gewichten, wenn Leute dazu neigen, zu heiraten ... – digiguru

2

Sie können jederzeit speichern, das Datum in separaten Spalten:

  • Jahr
  • Monate
  • Tage-of-Monats

sie alle nullable halten. Sie können eine Spalte hinzufügen, in der Sie die berechnete Vollzeit speichern. Für diese berechnete Zeit verwenden Sie einige Standardwerte für alle Spalten, die null sind.

+0

Cool - wie mache ich nun diese Spalten um herauszufinden, wie viele Monate vor ihrer Hochzeit (zum Beispiel), ohne das Rad neu erfinden zu müssen, wenn man Datumsmanipulationen durchführt? – digiguru

+0

Sobald Sie das berechnete Datum haben, können Sie die Datum/Uhrzeit-Funktionen der Datenbank verwenden, um solche Berechnungen durchzuführen (etwas anders in verschiedenen Datenbanken) – tehvan

3

Sie könnten es als Bereich mit einer Spalte nach dem Datum und vor dem Datum speichern.

+0

Interessant, so kann ich ein durchschnittliches Datum nehmen und Datumsmanipulation durchführen Es kann dynamisch sein und wenn der Tag näher rückt, können sie entscheiden, es mehr zu sperren. – digiguru

+0

Für die Planung oder Benachrichtigung (das ist, was das Ziel zu erreichen scheint) würde ich denken, dass der Anfang der Reichweite so wichtig oder wichtiger als der Mittelpunkt wäre. Zum Beispiel: "Sie müssen die Sänger am Ende des Monats buchen, um sie im Januar zu bekommen", auch wenn es sich um Jan-Mar handelt. – Bell

1

Sie könnten Daten als YYYYMMDD speichern, mit unbekannten Monaten/Tagen auf 0 gesetzt. Beispiel: 20090200 wäre "ein Tag im Februar 2009". So können Sie relativ einfach sortieren und vergleichen, und wenn Sie es in ein Datum konvertieren möchten, können Sie einfach 1 zum Monat oder Tag hinzufügen, um eine Annäherung für komplexere Datumsvergleiche zu erhalten.

1

Ich hatte ein ähnliches Problem mit Daten; mit dem zusätzlichen Problem, dass einige Leute auch "15. Juni" sagen wollten, ohne das Jahr zu spezifizieren. Ist das ein Fall, den Sie auch behandeln müssen?

Ich habe den Tag, den Monat und das Jahr in drei separaten Spalten in der Datenbank gespeichert, mit jeder Nullable, dann (etwas) neu erfunden das Rad in meiner Anwendung (sowie einige Fälle, wie Leute sagen "The 15. 1974 ").

Da ich jedoch die gesamte Datenverarbeitungslogik in meine Anwendung eingegeben habe, habe ich nie auf die drei Spalten zugegriffen. Im Nachhinein wünschte ich, ich hätte sie in eine einzige Spalte gesetzt und Teildaten als Strings gehalten (so etwas wie "19740615", "1974 ----", "---- 0615" usw.), nur damit ich ' d haben weniger Spaltenecho.

Ich denke, es hängt davon ab, wie viel Sie in der Datenbank tun möchten und wie viel Sie in Ihrer Anwendung tun möchten. So oder so, ich denke, Sie werden ein etwas anders geformtes Rad erfinden. Aber natürlich sind Sie gut genug, um ordentliche, gekapselte und wiederverwendbare Klassen zu erstellen - das macht Spaß! :-)

+0

Danke für den Vorteil, dies tatsächlich vorher zu erleben, ich sehe, du hattest interessante Erfahrungen in der Sache. – digiguru

Verwandte Themen