Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> czy to prawda ze nalezy unikac przechowywania pol NULL?
michat34
post
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


gdzies kiedys wpadlem na taki artykul gdzie pisalo by unikac przechowywania null, gdyz zmniejszaja wydajnosc,powoduja nieczytelnosc i cos tam jeszcze. czy to prawda?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
alegorn
post
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


Cytat(Damonsson @ 12.11.2012, 11:53:40 ) *
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.

Cytat(markonix @ 12.11.2012, 12:56:20 ) *
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.
Go to the top of the page
+Quote Post
sazian
post
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


Cytat(alegorn @ 12.11.2012, 15:44:39 ) *
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
Go to the top of the page
+Quote Post
irmidjusz
post
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


Cytat(sazian @ 12.11.2012, 20:31:50 ) *
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!

Cytat(Crozin @ 12.11.2012, 17:48:09 ) *
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
Go to the top of the page
+Quote Post

Posty w temacie
- michat34   czy to prawda ze nalezy unikac przechowywania pol NULL?   10.11.2012, 17:06:19
- - Crozin   Nie, to nie prawda.   10.11.2012, 18:00:50
- - irmidjusz   A w podręcznikach od MySQLa tak piszą, że lepiej n...   11.11.2012, 00:46:24
- - starko   Martwicie się o wydajność jakbyście pisali potężne...   11.11.2012, 09:47:19
- - nospor   Na pole z NULLem baza mysql potrzebuje dodatkowego...   11.11.2012, 12:13:32
- - Crozin   Jeżeli jakieś pole może przyjąć "logiczne nic...   11.11.2012, 15:30:20
- - nospor   Też kiedyś wychodziłem z założenia, że jak coś ma ...   11.11.2012, 19:37:13
- - Damonsson   To jest trochę bez sensu, bo jak się jednak patrzy...   11.11.2012, 20:33:00
- - irmidjusz   Ale przecież to zależy od konkretnej sytuacji, od ...   11.11.2012, 21:04:28
|- - markonix   Cytat(irmidjusz @ 11.11.2012, 21:04:2...   12.11.2012, 12:56:20
- - Damonsson   No przecież właśnie to samo napisałem wyżej ^^ Ni...   11.11.2012, 21:42:03
- - Szymciosek   Wg. mnie jeśli potrzebujesz, to korzystasz, po coś...   11.11.2012, 22:29:06
- - alegorn   korzystanie z wartości null powoduje wymuszone kor...   12.11.2012, 10:38:20
- - Damonsson   Tu akurat podałeś przykład w którym należy uniknąć...   12.11.2012, 11:53:40
- - Zielonkawy18   "Tu akurat podałeś przykład w którym należy u...   12.11.2012, 13:13:02
- - alegorn   Cytat(Damonsson @ 12.11.2012, 11:53:4...   12.11.2012, 15:44:39
|- - markonix   Cytat(alegorn @ 12.11.2012, 15:44:39 ...   12.11.2012, 17:07:31
|- - sazian   Cytat(alegorn @ 12.11.2012, 15:44:39 ...   12.11.2012, 20:31:50
|- - irmidjusz   Cytat(sazian @ 12.11.2012, 20:31:50 )...   13.11.2012, 00:06:28
|- - markonix   Cytat(irmidjusz @ 13.11.2012, 00:06:2...   13.11.2012, 23:26:00
- - everth   Bo problem NULLa to w ogóle problem z teorią relac...   12.11.2012, 16:40:13
- - d3ut3r   W sumie to nigdy się nad tym nie zastanawiałem, z ...   12.11.2012, 17:02:07
- - nospor   CytatNie można narzucać haseł "Nie stosuj NUL...   12.11.2012, 17:45:54
- - Crozin   1. Przede wszystkim nie dyskutujcie w oparciu o pr...   12.11.2012, 17:48:09
- - Crozin   CytatBill Karwin w http://helion.pl/ksiazki/antywz...   13.11.2012, 00:17:09
- - everth   @d3ut3r Trochę spoźnione: CytatTylko wówczas co za...   13.11.2012, 09:16:49
- - d3ut3r   Z ciekawości jakie jeszcze informacje można odczyt...   13.11.2012, 09:24:28
- - alegorn   to ze przykład z pojazdami jest kiepski - to fakt,...   13.11.2012, 09:59:53
- - everth   @d3ut3r Hm, np. że wartość to NULL Brak danych ...   13.11.2012, 12:38:16
- - Noidea   @everth Zawsze można też zaprojektować bazę w pier...   14.11.2012, 22:46:42
- - everth   Ok, ale czy to nie sprowadzi się właściwie do tego...   17.11.2012, 20:01:29
- - Crozin   @everth: Chodziło raczej o to, że podany przez C...   17.11.2012, 20:58:31
- - Pilsener   Powinno się zawsze używać NULL (ale nie string nul...   17.11.2012, 21:54:33
- - everth   @Crozin Masz rację. Tylko nie wiem jak ta osobna t...   18.11.2012, 18:45:16


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.09.2025 - 21:04