time und Wochentag speichern

Herausforderung: Ich habe eine Anforderung, in der ich wiederkehrende Ereignisse umsetzen muss. Ich speichere Tag der Woche, time und den timeraum, für den die Veranstaltung wieder auftritt.

Mögliche Lösung: time und Wochentag als String und Aufzählung speichern. Strom speichern und time und Tag für diesen Tag einstellen?

Frage : Was ist die beste Praxis für die Lagerung von time und Wochentag?

EDT: Ich verwende SQL server database

Dieser beste Ansatz könnte von der database abhängen, die Sie verwenden. Aber es gibt zwei allgemeine Ansätze, beide recht vernünftig.

Die erste ist, data und timeen im nativen Format für die database zu speichern. Die meisten databaseen haben functionen, um Tag der Woche und time von einem date time Typ zu extrahieren. Sie würden Ihre Abfragen mit diesen functionen schreiben. Normalerweise würden Sie diese als ein Feld speichern, aber manchmal möchten Sie vielleicht die dates- und timeabschnitte trennen.

Die zweite ist eine Kalendertabelle zu haben. Eine Kalendertabelle würde ein date oder ein date als Schlüssel haben und dann Spalten enthalten, was Sie darüber wissen wollen. Tag der Woche wäre eine offensichtliche Spalte.

Eine Kalendertabelle ist die bevorzugte Lösung in einigen Situationen. Zum Beispiel, wenn Sie Ihre Anwendung zu internationalisieren, dann in der Lage, Tag der Woche von einem Tisch zu bekommen macht es einfacher, die characterfolge Englisch, Griechisch, Chinesisch, Russisch, Swahili, oder was auch immer Ihre Lieblingssprache ist. Oder, wenn du bestimmte Feiertage verfolgen willst, dann kann auch eine Kalendertabelle diese Informationen speichern. Oder wenn du ein Geschäft hast, das auf einem merkwürdigen Finanzkalender läuft (wie 5-4-4), dann ist eine Kalendertabelle eine gute Wahl.

In beiden Fällen müssen Sie keine redundanten datesinformationen in der Tabelle speichern. Sie sollten es entweder aus einer eingebauten function ableiten oder indem Sie nachschlagen, was Sie in einer referencetabelle wünschen.

Eine andere Alternative ist, um die Spalten, die die Teile repräsentieren, die Sie nachher sind, zu berechnen.

CREATE TABLE dbo.foo ( bar DATETIME, bar_day_of_week AS DATEPART(WEEKDAY, bar), bar_time AS CONVERT(TIME, bar) ); INSERT dbo.foo(bar) SELECT GETDATE(); SELECT bar, bar_day_of_week, bar_time FROM dbo.foo;