Announcement

Collapse
No announcement yet.

Neutrales Element in Feld ermöglichen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Neutrales Element in Feld ermöglichen

    Hallo,

    ich stehe vor dem Problem, eine Datenbank zu konzipieren, in der einige Attribute boolscher Natur eingetragen werden sollen. Nun kann es in einem Datensatz aber auch die Möglichkeit geben, dass dieses Attribut für den Datensatz noch nicht erfasst wurde. Es gibt also drei Möglichkeiten "1", "0" und "nicht erfasst". Ich denke, das ist ein durchaus gängiges Problem. Meine Frage ist: Gibt es da schon irgendwelche Konventionen, nach denen man bei so etwas verfährt?

    Meine Ideen bisher:
    NULL = nicht erfasst --> Problem: Abfrage lässt diese Datensätze aus
    -1 = nicht erfasst --> Problem: ein Integer-Feld wäre nötig

    Vielleicht kann mir jemand helfen.

    Vielen Dank schonmal

    Johannes

  • #2
    NULL = nicht erfasst --> Problem: Abfrage lässt diese Datensätze aus
    Warum sollte die Abfrage das tun außer du hast das SQL explizit so formuliert?

    Ansonsten sind deine beiden Alternativen die beiden Wege die man da gehen kann. Die andere Lösung mit dem anderen Feldtyp sehe ich ebenfalls unproblematisch. Ich bezweifle das irgendeine Datenbank so optimiert ist das sie für einen Boolean weniger als ein Byte benutzt. Insofern kann man dann genauso gut auch einen 1 Byte Integertyp nehmen.

    Comment


    • #3
      Hallo,
      Originally posted by Ralf Jansen View Post
      ...Insofern kann man dann genauso gut auch einen 1 Byte Integertyp nehmen.
      Das sehe ich genauso. Auch wird das sich wohl am ehesten auf unterschiedliche Datenbanken portieren lassen. Bei MySQL ist bspw. der BOOLEAN-Datentyp intern lediglich als Synonym für einen TINYINT, also einen 1-Byte-Integer implementiert. Kann mir gut vorstellen, dass es bei anderen DBMS ähnlich ist.

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Die Verwendung eines Zahlenfeldes (1 Byte/Zeichen) ist m.E. üblich. Bitweise Kodierung wäre möglich, ist aber bei Bearbeitung und Reporting haarig.
        Wenn das Feld in der Where Bedingung als Einschränkung genannt ist, muss NULL separat mit 'is null' oder 'is not null' (ggF DB spezifisch) statt gängiger Vergleichsoperatoren abgefragt werden.
        Deine Lösung mit 3 Zahlen ist ok.
        Dann wäre da noch die Möglichkeit, nicht gesetzt/nicht zutreffen bzw FALSE als Default gleichzusetzen. Das ist möglich und sinnvoll, wenn True einem Ausnahmewert entspricht, also z.B. Feld 'KundeIstVerstorben'. FALSE und Nicht gesetzt sind gleichbedeutend und werden durch einen gemeinsamen Defaultwert beim Insert gesetzt.
        Gruß, defo

        Comment


        • #5
          Das ist möglich und sinnvoll, wenn True einem Ausnahmewert entspricht, also z.B. Feld 'KundeIstVerstorben'.
          Ihr habt Tote als Kunden? Was ist das für ein Business.

          Comment


          • #6
            Nach Zombie-Filmen nun auch Zombie-Ware..
            Und wenn es so wäre, nicht so dramatisch wie ein totes Produkt.


            Öh, und wenn es ne Branchensoftware wäre, dann wäre es ja keine Ausnahme.

            Und ich hab noch gedacht, 'Ist das Beispiel vielleicht zu drastisch?'
            Gruß, defo

            Comment


            • #7
              Und ich hab noch gedacht, 'Ist das Beispiel vielleicht zu drastisch?'
              Es war einfach nur vom Wortlaut her merkwürdig Ein Toter ist kein Kunde mehr. Er ist vielleicht als Ex Kunde markiert und der Grund ist dann 'verstorben'.

              Comment


              • #8
                Vielleicht auch Software für ein Bestattungsunternehmen. Gibt bestimmt schon einige Kunden die dort schon vor ihrem Tod aufschlagen und ihre eigene Beerdigung planen. Das klingt zwar vielleicht makaber, aber ich kann mir durchaus vorstellen dass es sowas gibt

                Comment

                Working...
                X