Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][MySQL][PHP]Sposób rozwiązania pewnego "problemu"
Forti
post 31.10.2014, 20:14:39
Post #1





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


1. Mam sobie stronke, na której mam newsy, kategorie itp.

Baza danych rozwiązana w taki sposób:

news
id | title | header | text | ... | id_category

category
id | name

Jeden news może mieć tylko jedną kategorie, jedna kategoria może mieć wiele newsów.
Teraz mamy nasz "problem": lista kategorii i obok podsumowanie ile newsów się w niej "znajduje".

Zastanawiam się czy za każdym razem robić zapytanie do bazy count (tak robię do tej pory), czy może trzymać to w bazie, czyli:

category
id | name | count_news

i przy dodawaniu newsa += do category i analogicznie przy odejmowaniu news do samo.



2. Teraz pytanko z innej beczki.

Często widuje rozwiązania tzw. "normalizacji" (zwał jak zwał), czyli:

news
id | title ...

category
id | name ...

news_category
id_news | id_category (id dla tej kolumny raczej nie będzie potrzebne, co nie?)

I pytanie czy warto to stosować, w momencie gdy jeden news = jedna kategoria. Widzę tutaj zalety w przypadku manyToMany - co w tym jednym konkretnym przypadku nie będzie wykorzystywane. Teraz problem z zapytaniami do bazy i podliczaniem. W Doctrine 2 (za pewne jeszcze mało wiem, umiem) generować będzie mi to "kilka" zapytań. Wyświetlamy news, do tego dopasowujemy kategorie (liczba mnoga) oraz z kolei z tabeli "Category" pobieramy stosowne nazwy. Być może mi się zdaje, ale to już 3 zapytania. Jeżeli chciałbym wyświetlać wszystkie kategorie przy liście newsów to jest to masa nie potrzebnych moim zdaniem zapytań. Co prawda cache nam rozwiąże po trochu problem w trybie produkcji (cały czas patrzę przez pryzmat doctrine i symfony).

Za pewne jest to banalne pytanie, ale tak z ciekawości się pytam - rozwiązań tego widziałem już kilka, ale jedynie taka pełna "normalizacja" wydaje się mieć sens ze względu na możliwości edycji nawet wszystkich newsów / kategorii jednocześnie.

Wiem, że nie będzie to wpływać zbytnio na wydajność mimo wszystko (ułaki setnych sekund) i pewnie doctrine pozwola nam na skonstruowanie w DQL jednego zapytania many to many (nie doszedłem do tego działu jeszcze).

ehhh, pewnie nie potrzebnie się rozpisałem ;]


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
ilidir
post 31.10.2014, 22:12:59
Post #2





Grupa: Zarejestrowani
Postów: 183
Pomógł: 14
Dołączył: 27.09.2014

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


jeżeli chcesz wykonywac count i zliczać ilość news-ów w danej kategorii to wydaje mi się iż powinieneś wykonywać tą operację na tabeli news a nie category i zliczać po ilości wystąpionych ID_category a nastepnie łączać 2 tabele wyświetlać sobie ile jest w danej categorii newsow.


co do drugiego pytania ja osobiście używam takiego rozwiązania na przykład przy użytkownikach gdzie jest many to many a tak to wydaje mi się osobiście to zbędne po cosobie dokład roboty smile.gif
Go to the top of the page
+Quote Post
mortus
post 31.10.2014, 22:51:30
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


2. punkt nie opisuje w żaden sposób kwestii normalizacji, a jedynie sposób implementacji relacji wiele do wielu (taką relację można stworzyć wykorzystując jedynie tabelę dodatkową, którą w tym przypadku jest news_category).

Normalizacji bardziej dotyczy punkt 1. Normalizacja to w wielkim skrócie doprowadzanie danych do jak najprostszej postaci, bez ich utraty. Taką najprostszą postacią kategorii wydaje się być encja zawierająca jedynie identyfikator i nazwę tej kategorii, a ilość newsów w tej kategorii ściślej dotyczy samych newsów. Zatem dodanie dodatkowej kolumny (count_news) w tabeli kategorii nazwiemy denormalizacją, bowiem liczbę newsów możemy uzyskać za pomocą wspomnianego COUNT i nie musimy jej przechowywać - oczywiście z punktu widzenia normalizacji. Natomiast w przypadku kilkudziesięciu lub setek kategorii taka denormalizacja jest nawet wskazana, bo wpływa w dużej mierze na wydajność aplikacji.
Go to the top of the page
+Quote Post
Forti
post 1.11.2014, 00:53:53
Post #4





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


I to właśnie są konkretne odpowiedzi. Podziękować.


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 14:51