Kira-Bianca
Neuer Benutzer
- Beiträge
- 2
Hallo Leutz,
bei dem Aufbau einer Datenbank möchte ich ein Feld im Format DATE verwenden, bei dem die Jahreszahl aber eine besondere Funktion hat und Werte kleiner 1000 enthält. Das Problem ist, dass MySQL eine Zuweisung für dieses Feld automatisch um Jahrtausende erhöht, und das nicht einmal immer und mit unterschiedlichen Jahrhunderten.
Bei den Jahreszahlen 0 bis 9 wird dem Feld der korrekte Wert zugewiesen ('000y'). bei den Jahreszahlen 10 bis 69 wird daraus das 20. Jahrhundert ('20yy') und bei Jahren von 70 bis 99 wird es das 19. Jahrhundert ('19yy'). Ab Jahr 100 ist es wieder korrekt ('0yyy'). Dabei ist es egal, ob ich die Jahreszahl bei der Wertzuweisung mit führenden Nullen (z. B. '0015-mm-dd') oder ohne führende Nullen ('15-mm-dd') angebe.
Mit den Daten in dieser Form kann ich nichts anfangen und eine programmtechnische Ermittlung der "richtigen" Jahreszahl bei der Feldabfrage (PHP: Jahr ist Jahr oder Jahr modulo 100 oder Jahr modulo 1000 ) kann ja auch nicht der Sinn sein. Gibt es eine Möglichkeit, mySQL den Blödsinn auszutreiben, die Jahreszahlen zu verfälschen? Wenn möglich möchte ich das Feldformat DATE für beide Angaben zusammen beibehalten. Eine Trennung der beiden Daten in zwei Feldern ('Jahr':SMALLINT(3) UNSIGNED und 'Datum':DATE, bei dem nur 'mm-dd' relevant wäre) oder ein Datentyp CHAR(10) wäre zwar denkbar, aber aufgrund eines sehr häufiges Vorkommens dieser Zusammenstellung innerhalb der Datenbank nicht optimal. Bei Trennung auf 2 Felder würde die Strukturen der Tabellen um einiges unübersichtlicher werden als sie jetzt schon (zwangsläufig) sind (Fremdschlüssel zwischen den Tabellen auf 2 Felder beziehen; Feldnamen mit 'JahrDatum1', 'Datum1', 'JahrDatum2', 'Datum2', 'andereDaten', 'JahrDatum3', 'Datum3' ...). Außerdem müsste jede Abfrage mit CONCAT() erweitert werden, weil die Daten generell in einem Zusammenhang stehen und auch entsprechend genutzt werden. Und bei CHAR(10) müsste jede Eingabe auf Zulässigkeit (DATE-Format) geprüft werden.
Ich bedanke mich schon im Voraus für Eure Vorschläge und vielleicht sogar einer Lösung des Problems.
VieleGrüße
Kira-Bianca
bei dem Aufbau einer Datenbank möchte ich ein Feld im Format DATE verwenden, bei dem die Jahreszahl aber eine besondere Funktion hat und Werte kleiner 1000 enthält. Das Problem ist, dass MySQL eine Zuweisung für dieses Feld automatisch um Jahrtausende erhöht, und das nicht einmal immer und mit unterschiedlichen Jahrhunderten.
Bei den Jahreszahlen 0 bis 9 wird dem Feld der korrekte Wert zugewiesen ('000y'). bei den Jahreszahlen 10 bis 69 wird daraus das 20. Jahrhundert ('20yy') und bei Jahren von 70 bis 99 wird es das 19. Jahrhundert ('19yy'). Ab Jahr 100 ist es wieder korrekt ('0yyy'). Dabei ist es egal, ob ich die Jahreszahl bei der Wertzuweisung mit führenden Nullen (z. B. '0015-mm-dd') oder ohne führende Nullen ('15-mm-dd') angebe.
Mit den Daten in dieser Form kann ich nichts anfangen und eine programmtechnische Ermittlung der "richtigen" Jahreszahl bei der Feldabfrage (PHP: Jahr ist Jahr oder Jahr modulo 100 oder Jahr modulo 1000 ) kann ja auch nicht der Sinn sein. Gibt es eine Möglichkeit, mySQL den Blödsinn auszutreiben, die Jahreszahlen zu verfälschen? Wenn möglich möchte ich das Feldformat DATE für beide Angaben zusammen beibehalten. Eine Trennung der beiden Daten in zwei Feldern ('Jahr':SMALLINT(3) UNSIGNED und 'Datum':DATE, bei dem nur 'mm-dd' relevant wäre) oder ein Datentyp CHAR(10) wäre zwar denkbar, aber aufgrund eines sehr häufiges Vorkommens dieser Zusammenstellung innerhalb der Datenbank nicht optimal. Bei Trennung auf 2 Felder würde die Strukturen der Tabellen um einiges unübersichtlicher werden als sie jetzt schon (zwangsläufig) sind (Fremdschlüssel zwischen den Tabellen auf 2 Felder beziehen; Feldnamen mit 'JahrDatum1', 'Datum1', 'JahrDatum2', 'Datum2', 'andereDaten', 'JahrDatum3', 'Datum3' ...). Außerdem müsste jede Abfrage mit CONCAT() erweitert werden, weil die Daten generell in einem Zusammenhang stehen und auch entsprechend genutzt werden. Und bei CHAR(10) müsste jede Eingabe auf Zulässigkeit (DATE-Format) geprüft werden.
Ich bedanke mich schon im Voraus für Eure Vorschläge und vielleicht sogar einer Lösung des Problems.
VieleGrüße
Kira-Bianca