Nullable TextField oder leere Zeichenfolge im Django-Modell?

8

Wie ich aus dieser Datenbankentwurfsfrage verstehe, sollten Sie Verwenden Sie Nullwertfelder sparsam und treffen Sie jedes Mal eine abgewogene Entscheidung darüber, ob es besser wäre, das Datendesign stattdessen zu überdenken.

Nehmen wir an, die Auflösung soll in einem bestimmten Fall zulassen, dass ein Textfeld einen leeren Wert enthält. Angenommen, es gibt user table und es gibt short_bio column, das durch das TextField in Django repräsentiert wird und nicht obligatorisch ist. Es macht keinen Sinn, eine separate Tabelle user_bio zu erstellen, richtig?

Nun stellt sich die Frage, sollte der leere Wert eine leere Zeichenfolge oder Nullmarkierung sein ? Was sind Vor- und Nachteile für jede Option? Gibt es irgendwelche Besonderheiten, wie Django mit Datenbanken arbeitet, die einen Unterschied machen können?

Es sollte beachtet werden, dass django-lint derzeit über CharField- und TextField-Instanzen mit% co_de berichtet %.

Umgekehrt wird das Speichern einer leeren Zeichenfolge für ein leer gelassenes Feld von einige Entwickler .

    
Tony 16.02.2011, 10:09
quelle

2 Antworten

16

Ich denke, wenn 'leere Zeichenfolge' 'kein Wert' bedeutet, sollte die leere Zeichenfolge verwendet werden, um zu vermeiden, Nullen und Leerzeichen zu mischen, was dasselbe bedeutet (zB beim Suchen oder Vergleichen: in einigen DBMS kann man nicht vergleichen NULL bis NULL direkt, müssen Sie den Operator IS NULL verwenden).

Die Verwendung des leeren Strings macht es auch einfacher, sie "wie sie ist" in Berichten und anderen Dingen zu verwenden, in denen das 'short_bio' verwendet wird, ohne durch das DOM zu gehen (zB objects.values('short_bio') ), ohne Null in '' zu konvertieren.

Außerdem Django-Dokumente heißt es:

  

Vermeiden Sie die Verwendung von null in stringbasierten Feldern wie CharField und TextField, es sei denn, Sie haben einen ausgezeichneten Grund. Wenn ein stringbasiertes Feld null = True hat, bedeutet dies, dass es zwei mögliche Werte für "keine Daten" gibt: NULL und die leere Zeichenfolge. In den meisten Fällen ist es redundant, zwei mögliche Werte für "keine Daten" zu haben. Die Django-Konvention verwendet die leere Zeichenfolge, nicht NULL.

    
Don 16.02.2011, 10:21
quelle
5

Wenn Sie ein nullwertfähiges Textfeld benötigen, das eindeutig sein sollte, aber mehrere NULL-Werte zulassen , ist es möglicherweise besser, NULL anstelle einer leeren Zeichenfolge zu verwenden.

Django sieht immer NULL als eindeutige Werte, während die leere Zeichenfolge immer gleich einer anderen leeren Zeichenfolge ist. Siehe Eindeutige Felder, die Nullen in Django erlauben und < a href="http://code.djangoproject.com/ticket/9039"> Ticket 9039 .

Um "das Beste aus beiden Welten" zu haben, können Sie den leeren Wert als NULL speichern, aber als leere Zeichenfolge über ein benutzerdefiniertes Formularfeld anzeigen. Ein (nicht getestetes) Beispiel von mightyhal :

%Vor%
    
Tony 25.02.2011 06:14
quelle

Tags und Links