Mam formularz na stronie internetowej, która ma wiele różnych dziedzin. Niektóre pola są opcjonalne, a niektóre są obowiązkowe. W mojej bazie danych mam tabelę zawierającą wszystkie te wartości. Czy lepiej jest wstawiać wartość NULL lub pusty ciąg do kolumn DB, w których użytkownik nie umieścił żadnych danych?
230
Jedną rzeczą do rozważenia, jeśli kiedykolwiek planujesz zmienić bazę danych, jest to, że Oracle nie obsługuje pustych ciągów . Są one automatycznie konwertowane na NULL i nie można ich wyszukiwać za pomocą klauzul takich jak
WHERE somefield = ''
.źródło
Steve B.
: patrz to pytanie: stackoverflow.com/questions/1171196/…Należy pamiętać, że NULL może znacznie utrudnić korzystanie ze ścieżek kodowych. Na przykład w Pythonie większość kart / baz danych ORM jest odwzorowanych
NULL
naNone
.Więc takie rzeczy jak:
może spowodować „Hello, None Joe Doe!” Aby tego uniknąć, potrzebujesz czegoś takiego:
Co może sprawić, że wszystko stanie się znacznie bardziej złożone.
źródło
Lepiej wstawić, aby zachować
NULL
spójność bazy danych w MySQL. Klucze obce mogą być przechowywane jako,NULL
ale NIE jako puste ciągi.Będziesz mieć problemy z pustym ciągiem w ograniczeniach. Konieczne może być wstawienie fałszywego rekordu z unikalnym pustym ciągiem, aby spełnić ograniczenie klucza obcego. Chyba zła praktyka.
Zobacz także: Czy klucz obcy może mieć wartość NULL i / lub być duplikatem?
źródło
Nie wiem, jaka byłaby najlepsza praktyka, ale ogólnie bym poparł wartość zerową, chyba że chcesz, aby wartość pusta oznaczała coś innego niż pusty ciąg, a dane wejściowe użytkownika odpowiadają definicji pustego ciągu.
Zauważ, że mówię, że musisz określić, w jaki sposób mają się różnić. Czasami sensowne jest, aby były różne, a czasem nie. Jeśli nie, wybierz jeden i trzymaj się go. Tak jak powiedziałem, mam tendencję do faworyzowania NULL przez większość czasu.
Aha, i pamiętaj, że jeśli kolumna ma wartość NULL, rekord ma mniejsze szanse na pojawienie się w praktycznie każdym zapytaniu, które wybiera (zawiera klauzulę where, w języku SQL) na podstawie tej kolumny, chyba że wybór dotyczy kolumny null oczywiście.
źródło
Jeśli używasz wielu kolumn w unikalnym indeksie i co najmniej jedna z tych kolumn jest obowiązkowa (tj. Wymagane pole formularza), jeśli ustawisz inne kolumny w indeksie na NULL, możesz skończyć ze zduplikowanymi wierszami. Jest tak, ponieważ wartości NULL są ignorowane w unikalnych kolumnach. W takim przypadku użyj pustych ciągów w innych kolumnach unikalnego indeksu, aby uniknąć powielania wierszy.
Oto kilka kodów:
Teraz wstaw to, aby zobaczyć, że pozwoli duplikować wiersze:
Teraz wstaw to i sprawdź, czy nie jest dozwolone:
Zatem nie ma tu ani dobra, ani zła. To Ty decydujesz, co najlepiej pasuje do twoich reguł biznesowych.
źródło