Peter Thomassen: Kündigungsstatus: NULL | <timestamp>

Hallo Forum!

Ich benötige eine Tabelle zur Abbildung von Verträgen, die (vereinfacht) folgendermaßen aufgebaut ist:

contracts:
id  timestamp       canceled
1   20021017175849  NULL
2   20011117175849  20021117175849

Vertrag 1 läuft also seit dem 17.10.2002 bis jetzt, Vertrag 2 wurde am 17.11.2001 geschlossen und ein Jahr später am 17.11.2002 wieder gekündigt.

Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).

BIGINT wäre wohl überdimensioniert, außerdem müsste ich dann für das aktuelle Datum NOW() mit angeben.

Welchen Typ würdet ihr setzen?

Danke!
Peter

  1. Hi,

    Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).

    *jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.

    Welchen Typ würdet ihr setzen?

    Ich frage mich, wieso es mehr als einen Datumstyp geben muss. Was ist das für ein komisches DBMS? MySQL?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah!

      Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).

      *jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.

      TIMESTAMP zumindest in dem von mir verwendeten DBMS nicht.

      Welchen Typ würdet ihr setzen?

      Ich frage mich, wieso es mehr als einen Datumstyp geben muss. Was ist das für ein komisches DBMS? MySQL?

      Die "Vielfalt" an Datumstypen ist mir auch nicht ganz einleuchtend. MySQL4, ja.

      Bye,
      Peter

      1. hi,

        *jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.

        TIMESTAMP zumindest in dem von mir verwendeten DBMS nicht.

        du sagst, deine datenbank wäre MySQL 4.

        woraus schliesst du, dass man dort eine spalte vom typ TIMESTAMP _nicht_ mit NULL oder NOT NULL definieren könnte?

        gruss,
        wahsaga

        1. Hallo wahsaga,

          *jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.

          TIMESTAMP zumindest in dem von mir verwendeten DBMS nicht.

          du sagst, deine datenbank wäre MySQL 4.

          woraus schliesst du, dass man dort eine spalte vom typ TIMESTAMP _nicht_ mit NULL oder NOT NULL definieren könnte?

          Daraus, dass MySQL mir für TIMESTAMP immer NULL erlaubt. Und wenn ich NULL als Wert einsetze, wird das Feld auf die aktuelle Zeit gesetzt (http://www.mysql.com/doc/en/DATETIME.html).

          Bye,
          Peter

          1. hi,

            Daraus, dass MySQL mir für TIMESTAMP immer NULL erlaubt.

            daraus, dass mysql es _erlaubt_, schliesst du, dass es _nicht_ geht?
            (zitat:

            *jeder* Typus hat eine zusätzliche Eigenschaft, über die definiert wird, ob NULL erlaubt ist oder nicht.
            TIMESTAMP zumindest in dem von mir verwendeten DBMS nicht.

            )

            Und wenn ich NULL als Wert einsetze, wird das Feld auf die aktuelle Zeit gesetzt

            (http://www.mysql.com/doc/en/DATETIME.html).

            das bestreitet ja keiner.
            deine aussage las sich jedenfalls für mich so:
            "mysql erlaubt es nicht, eine spalte vom typ TIMESTAMP mit NULL zu definieren."

            gruss,
            wahsaga

            1. Hallo wahsaga,

              deine aussage las sich jedenfalls für mich so:
              "mysql erlaubt es nicht, eine spalte vom typ TIMESTAMP mit NULL zu definieren."

              Es war gemeint, dass ihre Felder nicht den Wert NULL haben können.

              Bye,
              Peter

  2. Moin!

    Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).

    Was hälst du von DATETIME? Wobei ich mich frage, warum du eine Uhrzeit brauchst.

    TIMESTAMP ist von daher sehr gefährlich, weil es sich automatisch mit aktualisiert, wenn im Datensatz Änderungen gemacht werden und a) für die Timestamp-Spalte kein Wert oder b) NULL definiert wird. (Die automatische Aktualisierung gilt nur für die erste Timestamp-Spalte.)

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    1. Hallo Sven!

      Welchen Typ muss nun canceled haben? TIMESTAMP geht nicht, weil TIMESTAMP nicht den Wert NULL (für "nicht gekündigt") haben kann (dann würde das aktuelle Datum gesetzt).

      Was hälst du von DATETIME? Wobei ich mich frage, warum du eine Uhrzeit brauchst.

      DATE[TIME] ist die Lösung. Mit der Uhrzeit hast Du auch Recht :-) Dachte nur einfach an Timestamp, der ja per definitionem die Uhrzeit enthält.

      TIMESTAMP ist von daher sehr gefährlich, weil es sich automatisch mit aktualisiert, wenn im Datensatz Änderungen gemacht werden und a) für die Timestamp-Spalte kein Wert oder b) NULL definiert wird. (Die automatische Aktualisierung gilt nur für die erste Timestamp-Spalte.)

      Richtig. :-)

      Danke!
      Peter