Zaszczyk
#webdev #bazydanych #sql #postgresql

Mirki mam pytanie, otóż w pewnej bazie danych najważniejsze informacje o użytkownikach, przechowuję w 2 tabelach: users i settings (tu jest klucz obcy do id z users). Tabela users nie ma żadnych wartości NULL, natomiast settings ma większość wartości NULL dopóki użytkownik ich nie uzupełni.

Przy pobieraniu dużej ilości rekordów z users i settings JOINowanie tabeli settings zajmuje dużo czasu. Profesor od baz danych z polibudy powiedział, że on scalił by obie tabelę. Z drugiej jednak strony, jeżeli jakaś kolumna ma puste wartości to powinno się zrobić tabelę pomocniczą dla niej np users_lang (atomizacja itd). Co wy o tym sądzicie? Dodam, że baza będzie bardzo duża w przyszłości.
  • Najlepsze
  • Wszystkie komentarze
m.....q
m.....q
czy jest sens łączyć users z settings?


@Zaszczyk: To zalezy :)

Jesli wiedomo ze nic sie w tej sprawie nei zmieni to spokojnie mozesz to trzxymac w jednej tabeli. Ale jesli tak zrobisz a za pol roku ktos powie ze kazdy juzer ma miec nieograniczona liczbe adresow pocztowych to Cie szlag trafi i bedziesz w tym grzebal trzy tygodnie....
Dzakus
Taktyk
000loki
000loki
@Zaszczyk: a do czego to ma być wykorzystywane? I jaki jest zamysł?
000loki
000loki
@Zaszczyk: i w której będzie więcej rekordów. Jaka relacja?
kowad
@Zaszczyk:

1) indexy!

2) normalizacja zapobiega zajmowaniu niepotrzebnie
m.....q
m.....q
Przy pobieraniu dużej ilości rekordów z users i settings JOINowanie tabeli settings zajmuje dużo czasu


@Zaszczyk: Joiny to podstawowa funkcjonalnosc przy pobieraniu danych z bazy. Przy takim problemie jak opisales chyba bym sprawdzil czy wszystko ok z joinem w tym przypadku (explain, execution plan, optimizer output).

MySQL przy joinach zwykle tworzy tabele tymczasowa, a jesli ktoras z laczonych tabel zawiera pola typu (o ile pamietam) blob czy text to tabela bedzie utworzona
Zaszczyk
Zaszczyk Autor
0
0) no generalnie to baza jest do systemu CMS

1) wiadomo że są indexy ;)

2) no tak, bo więcej tabel

3)
000loki
000loki
@Zaszczyk: to zależy co Ty chcesz na tym robić. Beda tam czesto zapytania po wielkich zakresach danych, czy bedziesz strzelal po indeksie do jednego usera? Jak jezdzisz po całej tabeli to indeksy Ci wiele nie pomogą bo lecisz i tak full scana.
000loki
000loki
@Zaszczyk: no i to co napisał @msq - plan zapytania sprawdź
kowad
@Zaszczyk: dokładnie tak jak @msq: pisze, nulle to w zasadzie nie problem, problem pojawia się wtedy kiedy robisz photo1 photo2 albo email1 email2 email_3, to jest złooooooooooooooo
Zaszczyk
Zaszczyk Autor
0
@000loki, @msq z explain analyse to ja walcze już od tygodni, trochę to skomplikowane jest, ale są postępy z mojej strony ;) no i właśnie odkryłem, że to JOIN zajmuje najwięcej czasu. Natomiast rekordy w settings i users są w relacji 1 do 1 (i to już od etapu rejestracji użytkownika) i to na 100% się nie zmieni, ponieważ serwis jest już tylko optymalizowany i dopieszczany. Także radzicie to
kowad
kowad
  • adult
0
Treść przeznaczona dla osób powyżej 18 roku życia...
Nieinterere
@Zaszczyk: Jak wygląda tabela settings?

email | phone | user
m.....q
m.....q
z explain analyse to ja walcze już od tygodni, trochę to skomplikowane jest


@Zaszczyk: Dlatego powstało NoSQL, dla tych sobie z tym nie radzili ( ͡° ͜ʖ ͡°)
TheFuckingRoses
@Zaszczyk: Łączyć tabele..... to może róbmy całe bazy w jednej tabeli :))))
kowad
@TheFuckingRoses: co jest złego w trzymaniu wartości dotyczących jednej klasy w jednej tabeli?
TheFuckingRoses
@kowad: po prostu przypomnialy mi sie moje studia i rady prowadzacych... jakbym sie stosowal do wiekszosci to nigdy nie znalazlbym pracy w zawodzie
m.....q
m.....q
co jest złego w trzymaniu wartości dotyczących jednej klasy w jednej tabeli?


@kowad: Jesli jedna z wlasciowosci klasy to wielowymiarowa tablica o nieokreslonej liczbie elementow to co wtedy? Mozne zserializowac i nadal trzymac w jednej kolumnie, tyle ze wyszukiwanie staje sie problematyczne....
kowad
@msq: napisał, że nie jest, i że każdy wiersz (obiekt) będzie miał same pojedyncze pola bez zbiorów, przynajmniej ja tak zrozumiałem.
m.....q
m.....q
napisał, że nie jest, i że każdy wiersz (obiekt) będzie miał same pojedyncze pola bez zbiorów, przynajmniej ja tak zrozumiałem.


@kowad: Moje doswiadczenie mowi mi ze lepiej sie przygotowac na zmiany w przyszlosci :)

Ale oczywiscie kazdy ma prawo do zdobywania wlasnegod doswiadczenia ( ͡° ͜ʖ ͡°)