![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 200 Pomógł: 1 Dołączył: 4.08.2012 Ostrzeżenie: (10%) ![]() ![]() |
gdzies kiedys wpadlem na taki artykul gdzie pisalo by unikac przechowywania null, gdyz zmniejszaja wydajnosc,powoduja nieczytelnosc i cos tam jeszcze. czy to prawda?
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tu akurat podałeś przykład w którym należy uniknąć NULLa i podać 0. no wręcz odwrotnie (chyba ze chcesz policzyć to śmigło od wentylatora..) tutaj nasz obiekt - czyli autobus nie ma takiej właściwości, i mieć nie może. Jak dla mnie 0 to konkretna wartość - brak dzieci, a wartość NULL to brak informacji. Przykładowo przy rejestracji tworzy się wiersz z daną osobą i kilka kolumn nieobowiązkowych - w tym liczba dzieci. Teraz pomyślcie jak wyglądałoby by wyciąganie sumy, średniej dzieci. Jak sprawdzisz kto nie uzupełnił tej wartości (profilu)? Ja ostatnio zacząłem doceniać korzyści NULL (IMG:style_emoticons/default/smile.gif) tak, jest to dobry przykład trójwarstwowej logiki. mając 4 wpisy (ilość dzieci) programista używa nulla jako wartość domyślną zamiast 0. user logując się - raz wpisze 0, a drugi raz zostawi pole puste (no bo skoro nie ma dzieci, to dlaczego by nie....) w tabeli więc ląduje nam: 4 2 0 null jaka jest średnia ilość dzieci ? sprawdzam:: SELECT AVG(test) FROM `test` 1,5 czy 2 (IMG:style_emoticons/default/questionmark.gif) ? mysql powie że 2 - co de facto jest guzik prawda, w przypadku jeśli programista zamiast '0' będzie pakował null wtedy, wartością powinno być 1,5 ale puki nikt z księgowości nie zwróci uwagi na ten błąd - będziesz generować błędy aż miło... taki, i temu podobne kwiatki - nieświadomie programiści generują notorycznie. j. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
n mając 4 wpisy (ilość dzieci) programista używa nulla jako wartość domyślną zamiast 0. user logując się - raz wpisze 0, a drugi raz zostawi pole puste (no bo skoro nie ma dzieci, to dlaczego by nie....) w tabeli więc ląduje nam: 4 2 0 null jaka jest średnia ilość dzieci ? sprawdzam:: SELECT AVG(test) FROM `test` 1,5 czy 2 (IMG:style_emoticons/default/questionmark.gif) ? mysql powie że 2 - co de facto jest guzik prawda no mi też wychodzi 2 user 1 ma czworo dzieci user 2 ma dwoje dzieci user 3 niema dzieci user 4 jest cham i nie chce powiedzieć ile ma dzieci czyli niemożna go uwzględniać w statystyce |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
no mi też wychodzi 2 user 1 ma czworo dzieci user 2 ma dwoje dzieci user 3 niema dzieci user 4 jest cham i nie chce powiedzieć ile ma dzieci czyli niemożna go uwzględniać w statystyce Dyskusyjne, bo interpretacja zależy od podejścia, ale można by się zgodzić, że (w powyższym przykładzie) interesuje nas liczba posiadanych dzieci do liczby userów, którzy tą informację udzielili. Ale kogoś może równie dobrze interesować zadeklarowana (czyli znana) całkowita liczba dzieci do całkowitej liczby zarejestrowanych użytkowników, i co wtedy? Po co tak? Ano np. po to, by wprowadzić nowy dział poświęcony pieluchom, gdy stosunek posiadanych dzieci/użytkowników wyniesie 1,5 lub więcej (IMG:style_emoticons/default/wink.gif) Zastanówmy się teraz nad innym przypadkiem: załóżmy, że do każdego usera przypisana jest liczba jego kliknięć w pajacyka; ktoś kto ma bzika na punkcie NULLa, to zrobi kolumnę "liczba_klikniec" z domyślną wartością NULL, bo przecież po zarejestrowaniu user jeszcze nie ma ani jednego klika na koncie. Tymczasem to powinna być kolumna NOT NULL z domyślną wartością 0! 4. Tak jak przypuszczałem, i tak jak widzę po przykładach w powyższej dyskusji, rady by unikać NULL-a powinny być zastąpione radami by poprawnie tworzyć strukturę bazy danych i zapytania do niej (np. skorzystanie z modelu EAV w przykładzie z cechami pojazdów). Bill Karwin w http://helion.pl/ksiazki/antywzorce-jezyka...rwin,antysq.htm przedstawia model EAV jako antywzorzec i odradza jego używanie. Ten post edytował irmidjusz 13.11.2012, 00:08:19 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.09.2025 - 21:04 |