Czytałem ten artykuł o BBC. Opowiada historię osoby o imieniu Jenifer Null i jej codziennych problemów podczas korzystania z internetowych baz danych, takich jak rezerwacja biletów lotniczych, bankowość internetowa itp.
Nie jestem dobrze zorientowany w bazach danych i nie używam go zbyt często. Kiedy utworzyłem stronę internetową do nauki, sprawdzanie poprawności formularza po stronie serwera używało wyrażeń regularnych. Z tego, co pamiętam, chętnie przyjąłbym nazwę „Null”. Jednak tego nie próbowałem.
Czy ktoś mógłby wyjaśnić szczegóły techniczne, kiedy taka sytuacja miałaby miejsce? Czy sprawdzanie poprawności formularza to po prostu robienie string == NULL
czegoś? Mimo to nie sądzę NULL is same as "NULL"
.
null
database-agnostic
Souradeep Nanda
źródło
źródło
Odpowiedzi:
Widziałem interfejsy baz danych (np. Biblioteki frameworków), które zwracają „null” jako ciąg znaków dla pustych kolumn. Uważam, że istniała flaga, która włącza lub wyłącza tę funkcję podczas debugowania. Ta flaga pozwala programistom łatwo ustalić, czy puste pole było wynikiem wartości pustej, czy pustej. Jest to złe ustawienie, szczególnie w produkcji, i wyjaśniałoby problemy wyjaśnione w artykule.
Odwrotne przetwarzanie konwersji wartości „null” na wartość null powinno wygenerować błąd aplikacji dla pola nazwy. Spodziewałbym się, że zostanie to dość szybko rozwiązane.
źródło
Istnieje duża szansa, że spora część twojego zamieszania wynika z dziennikarstwa. Artykuł mówi o problemach związanych z używaniem całych systemów aplikacji, a nie tylko baz danych. Całkowicie uzasadnione, ponieważ jest to pismo mające na celu masową konsumpcję, ale szczegóły techniczne są pomijane lub źle rozumiane przez autora.
Prawdopodobnie wiele z tych problemów jest spowodowanych w warstwie aplikacji, a nie w interfejsie API bazy danych. Wartości magiczne to anty-wzór, który jest absurdalnie trudny do usunięcia z branży. Bardzo łatwo jakiś programista mógł napisać warunek w stylu „ktoś napisał„ null ”? Muszą oznaczać, że nie ma żadnej wartości, ponieważ to właśnie oznacza null!” Nieudana próba uniemożliwienia wstrzykiwania SQL może być również odpowiedzialna za wspomniane złe traktowanie wartości Null lub hawajskie nazwisko zawierające pojedynczy cudzysłów, który jest również standardowym ogranicznikiem łańcucha SQL.
Aplikacja, która niepoprawnie przekształca te wartości na NULL lub pusty ciąg, może łatwo tworzyć błędy, jeśli logika biznesowa lub ograniczenia DB oczekują czegoś innego. To oczywiście powoduje frustrujące wrażenia użytkownika opisane w tym artykule.
źródło
Sam artykuł zawiera link do pytania o przepełnienie stosu, które pokazuje problem; było w aplikacji Flex, gdzie kod:
dodałby element zawierający słowo
Fred
do dokumentu XML, ale kod:dodawałby pusty element, a nie element zawierający tekst „null”.
XML jako taki nie ma problemu z wartością tekstową „NULL”, więc włączenie takiego tekstu nie byłoby problemem. W rzeczywistości
NULL
nie ma żadnego specjalnego znaczenia w XML.źródło
Jednej rzeczy, o której chyba nie wspominałem: nie mówimy tylko o SQL.
Nazwa może zaczynać / kończyć się w bazie danych ... ale aby się tam dostać normalnie wymaga WIELU kanałów. Baza danych, Sql, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, partia itp. Itd.
Każdy z tych kroków w potoku może obejmować konwersję danych z jednego formatu na inny. Od tabel SQL do JSON, XML, CSV itp.
W dowolnym momencie tego skomplikowanego łańcucha zajmie tylko jedno miejsce złego programowania lub niewyraźny język programowania ( na przykład obsługa zerowego Javascript ) ...
Więc nie ograniczaj się do problemu znajdującego się w bazie danych ... ponieważ może znajdować się w dowolnym miejscu na „stosie”.
źródło
Społeczność Wiki odpowiedź na różne linki pierwotnie pozostawione jako komentarze do tego popularnego pytania
W jaki sposób nazwisko Null powoduje problemy w wielu bazach danych? (Programmers SE)
Programiści fałszerstwa wierzą w nazwiska Patricka McKenzie
Licencjonowane przez Billa przez Davida Mikkelsona (snopes.com)
Przykład kodowania, które spowoduje ten problem w warstwie aplikacji.
Exploits of a Mom - aka Little Bobby Tables (webcomic xkcd)
źródło
Relacyjne bazy danych muszą uwzględniać brakujące lub nieistotne wartości. Na przykład lista klientów może zawierać numer telefonu komórkowego lub płeć. Co jeśli korporacja chce zostać klientem - jaką płeć powinna mieć?
Specjalny wskaźnik służy do wskazania braku wartości. Ta specjalna flaga ma wartość NULL. Tak więc niechlujne programowanie może powodować pomylenie wskaźnika brakującej wartości - NULL - z nazwiskiem Jennifer Null, być może interpretując jej nazwisko jako brakujące dane, a nie wartość rzeczywistą.
To trochę jak otwieranie konta bankowego, ale nie wpłacanie żadnych pieniędzy. Saldo wynosi zero. To nie znaczy, że nie masz równowagi. Oznacza to, że masz saldo, a jego wartość wynosi „0”. Ale niechlujne programowanie może błędnie interpretować zero, ponieważ „nie istnieje” i stwierdzić, że w ogóle nie masz konta.
źródło
Istnieje mnóstwo źle napisanego oprogramowania, a nawet frameworków, które działałyby dziwnie z kimś o imieniu Null.
Ale nie zapominajmy o ludzkim żywiole: może ludzie widzą to imię na ekranach i wydrukach i myślą, że to pomyłka, a usunięcie osoby to kolejna prawdopodobna przyczyna?
źródło