Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Nullwerte oder lieber leere Strings speichern.

  1. #1
    congor ist offline Neuer Benutzer
    Registriert seit
    30.03.2006
    Beiträge
    15

    Standard Nullwerte oder lieber leere Strings speichern.

    Hallo,

    ich programmiere gerade eine Applikation in Java und benutze
    als DB eine Postgres 8.1.4 und den neuesten JDBC-Treiber dafür.

    Wenn ich Datensätze aus einer TAbelle abfrage bekomme ich
    überall, wo ein NULL-Wert ist, den STring "null" zurückgeliefert.

    Das ist ein Nachteil, denn dann muss ich immer abfragen:

    if ((name = rs.getString(1)).equals("null")) then name = "";

    Das kostet bei vielen Datensätzen und vielen Attributen viel
    Rechenzeit!

    Ich frage mich, ob ich nicht gleich in der Datenbank leere Strings
    anstatt NULL ablege.

    Hätte auch den Vorteil, dass ich in Java für meine Entity-Klassen
    (also z. B. die Klasse Adresse, in der ich eine Adresse
    speichere), nur einen Konstruktor brauche, und nicht 10 verschiedene für alle möglichen Kombinationen von Attributen bzw. Nullwerten.

    Hat jemand eine andere Idee, oder ist es für die Datenbank
    vorteilhafter NULL-Werte abzulegen? Oder gibt es sonst einen
    Vorteil für NULL-Werte?

    Danke im Voraus
    Yves

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Siehe meine Antwort auf deine Antwort in dem anderen Thread:

    NOT NULL und leere Strings sind zwei völlig unterschiedliche Werte, diesen Sachverhalt solltest du dir verinnerlichen.

    Um dein Problem zu lösen, kannst du dein Datenmodell umschreiben, kannst Default Werte auf die Spalte setzen (z.B.: DEFAULT '') oder einfach deine Applikation einen Fehler erzeugen lassen, wenn kein Wert eingegeben wurde.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #3
    congor ist offline Neuer Benutzer
    Registriert seit
    30.03.2006
    Beiträge
    15

    Standard

    Siehe meine Antwort auf deine Antwort in dem anderen Thread:
    In welchem?

    NOT NULL und leere Strings sind zwei völlig unterschiedliche Werte, diesen Sachverhalt solltest du dir verinnerlichen.
    Ja, ich weiß :-) Deswegen habe ich diese Frage ja auch gestellt.

    Um dein Problem zu lösen, kannst du dein Datenmodell umschreiben, kannst Default Werte auf die Spalte setzen (z.B.: DEFAULT '') oder einfach deine Applikation einen Fehler erzeugen lassen, wenn kein Wert eingegeben wurde.
    Meinst du mein Datenbank-Schema? In meinem Datenmodell sind
    überhaupt keine Constraints bzw. Default-WErte.

    Ich wollte eigentlich viel mehr wissen, ob es Datenbank-technische
    Vorteile von NULL bezüglich "" gibt.

    Gruß
    Yves

  4. #4
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Nun, du kannst ja NOT NULL für die Spalten sagen, dann kannst du dir bei den Queries schon mal die Abfragen auf diesen Zustand sparen.

    Als Ergebnis musst du bloss noch auf '' prüfen, was deine Queries einfacher macht.

    Ob das ganze Vorteile bringt? Keine Ahnung, ich kenne deine Anwendung nicht. Da beide Möglichkeiten für unterschiedliche Aufgaben gedacht sind, kann man die so direkt auch nicht miteinander vergleichen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  5. #5
    congor ist offline Neuer Benutzer
    Registriert seit
    30.03.2006
    Beiträge
    15

    Standard

    Naja, das ist es ja, das hat nichts mit meiner Anwendung zu tun.
    Zur Not kann ich mit COALESCE die Null's substituieren, das ist meiner
    Anwendung egal.

    Ich will wirklich nur wissen, ob es DATENBANK-Technische Vorteile hat,
    NULL statt "" zu speichern. Vielleicht habe ich mich undeutlich ausgedrückt.

    @ads: Welche Möglichkeit ist denn für welche Aufgabe gedacht?

    Ich vermute mal, dass es NULL nur gibt, damit man kürzere Einfüge-Abfragen
    schreiben kann, indem man nicht alle Attribute angeben muss? Oder?

  6. #6
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard

    Zitat Zitat von congor Beitrag anzeigen
    Ich will wirklich nur wissen, ob es DATENBANK-Technische Vorteile hat, NULL statt "" zu speichern.
    Die Fragestellung ist schon eigenartig. Sie beantwortet sich doch schon dadurch, ob man auf einen Test des Wertes NULL bei einer Datenbank verzichten kann.



    mfg

    fristo

  7. #7
    eazy ist offline Neuer Benutzer
    Registriert seit
    29.06.2006
    Ort
    Braunschweig
    Beiträge
    19

    Standard

    Hallo.

    Zitat Zitat von congor Beitrag anzeigen
    Ich vermute mal, dass es NULL nur gibt, damit man kürzere Einfüge-Abfragen
    schreiben kann, indem man nicht alle Attribute angeben muss? Oder?
    Definitiv nein. Wie ads schon schilderte, haben beide "Werte" ihre Daseinsberechtigung. Ein leerer String drückt etwas anderes aus als null. Ich selbst nutze null ausschließlich, wenn ich ausdrücken möchte, dass etwas undefiniert ist. Es sollte also nicht darum gehen, ob du mit COALESCE irgendetwas umgehen kannst, sondern viel grundlegender darum, ob der Wert, den du speichern willst, eher durch einen leeren String oder durch null repräsentiert wird. Das ist jedenfalls meine Meinung...

    Gruß, eazy

  8. #8
    congor ist offline Neuer Benutzer
    Registriert seit
    30.03.2006
    Beiträge
    15

    Standard

    @eazy: Ja, ok. Dann wäre es einfach nur Definitions-Sache ob man Null oder
    '' nimmt.

    @fristo: Klar, fristo, aber auch nur aus Anwender (Anwendungs)-Sicht. Vielleicht aber nicht aus Datenbank-technischer Sicht! Also Art der Speicherung...

    Egal, ich machs jetzt einfach, wie es semantisch am besten passt und am
    einfachsten in die Anwendung passt.

    Trotzdem danke

    Gruß
    Yves

  9. #9
    Avatar von Xandrian
    Xandrian ist offline Administrator
    Registriert seit
    23.11.2005
    Ort
    Bayreuth, Bayern, Germany, 106332342737801, Bayreuth, Germany
    Beiträge
    1.495

    Standard

    also aus erfahrung kann ich dir sagen, verwende NULL wenn es nicht definiert oder einfach gar nichts ist. ansonsten einen string. mag sein das das einmalig etwas mehr arbeit ist aber langristig gesehen sparst du dir a menge arbeit. du musst dich dann nämlich immer nicht so sehr in deinen code eindenken...

    cu tb.
    pg-forum.de unterstützen? Meine Wunschliste


  10. #10
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard

    Hallo congor,

    Zitat Zitat von congor
    @fristo: Klar, fristo, aber auch nur aus Anwender (Anwendungs)-Sicht. Vielleicht aber nicht aus Datenbank-technischer Sicht! Also Art der Speicherung...
    Nein, dem Anwender interessiert nicht, ob Du in der Datenbank für eine Spalte den Wert NULL speicherst, dem Anwender gibst Du immer in deiner Applikation ein Textfeld für die Eingabe vor. Es ist also immer die Entscheidung des Entwicklers, ob er für einen leeren String den Wert NULL in der Datenbank speichert oder nicht. Und es gibt SELECT's, wo Dir die Datenbank zwangsweise den Wert NULL in bestimmten Spalten liefert, weil eben für diese Spalten es keinen Wert gibt und damit undefiniert sind (z.B bei JOINS).

    Spätestens wenn Du einen Datensatz liest, muß eine Überprüfung auf den Wert NULL erfolgen, das ja für die entsprechende Spalte ein entsprechendes Feld in Deiner Applikation erstellt werden muß (mit oder ohne Inhalt). Zudem fallen die Zeiten für die Überprüfung garnicht ins Gewicht. Das Lesen eines Datensatzes dauer wesentlích länger.

    Der Wert NULL hat in Datenbanken die gleiche Bedeutung wie in Java, nämlich dass der Wert undefiniert ist.



    mfg

    fristo

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. leere Felder oder neue Tabelle
    Von shitte im Forum Allgemeines
    Antworten: 5
    Letzter Beitrag: 09.12.2011, 14:06
  2. Werte speichern für einen Monat oder ein ganzes Jahr
    Von alex1982 im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 26.04.2011, 17:16
  3. Antworten: 0
    Letzter Beitrag: 10.01.2011, 10:26
  4. Längere Strings basteln
    Von rwesterh im Forum SQL
    Antworten: 5
    Letzter Beitrag: 17.10.2009, 13:23
  5. dblink und strings
    Von richard_lavoie im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 01.03.2007, 12:19

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum