Cytat(opmsoft @ 2.03.2012, 23:48:46 )

Nie jestem nadal przekonany powiedzmy przy moim rozwiązaniu dla 100 newsów mamy 200 wpisów 100 do tabeli news i 100 do danych tabel w zależności od typu
Przy rozwiązaniu @ano przy 100 wpisach powiedzmy każdy wpis ma średnio 5 parametrów daje nam to 600 wpisów, 100 w tabeli news + 500 wpisów w tabeli parameters,
drugra sprawa w moim rozwiązaniu wykonuję dwa zapytania, @askone "W przypadku jednej tabeli wystarczy jedno proste zapytanie na jednej tabeli i dodana klauzula group by..." - nie da się tego zrobić na jednej tabeli, przy różnych parametrach dla różnych newsów.
@bww - różne wiele tabeli bo każdy rodzaj newsa ma inne parametry, tak jak w allegro każda kategoria ma różne parametry jak sprzedajesz książke to nie masz pola przebieg tylko np gatunek. ale masz w książce jak i w samochodzie (przebieg) cechy wspólne cena , długość aukcji itp czyli masztabele AUKCJA + TABELE BOOK_PARAMS i AUTO_PARAMS tak jak ja mam
tabele news + auto_param + boat_param
Auto news ma PARAMETRY np:
marka,
model,
moc_silnika
a Boat news ma:
zasięg,
ilość pasażerów
ilośc_kajut .
Jak to teraz widzicie
moze tak?:
tabela NEWS:
news_id int
news_category int
news_object_id int
news_date datetime
tabela NEWS_TEXT
news_id int
news_text varchar
news_title varchar
tabela NEWS_AUTA...
tabela NEWS_JACHTY...
nastepnie tworzysz tabelki dla aut, jachtow itd i np jesli w news_category masz 0 to robisz zapytanie do news_auta, szukajac obiektu o ID rownym news_object_id z newsa, jesli w category masz 1 to szukasz w jachtach ID rownego news_object_id... itd.
NEWS i NEWS_TEXT rozdzielilem na 2 czesci, gdyz NEWS_TEXT bedzie zawierala spore ilosci tekstu w polach varchar ktore sa znacznie wolniejsze od INtów - szybciej bedzie znalezc interesujace nas newsy w tabeli news (wedle kategorii lub nowosci), a pozniej sobie doczytać z nich wlasciwa tresc z tabeli NEWS_TEXT (id w obu tabelach takie samo).
ale jak bedziesz chcial dodac cos nowego (nowa kategorie) to musisz dodac nową tabelę do bazy danych.
dlatego mozna zrobic rowniez tak:
tabela NEWS:
news_id int
news_category int
news_object_id int
news_date datetime
tabela NEWS_TEXT
news_id int
news_text varchar
news_title varchar
tabela OBJECTS
object_id int
object_category int
object_data text
rozwiazanie podobne do poprzedniego. object_category jest narazone na anomailie, ale to ze te dane sa w 2 miejscach spowoduje ze znalezienie newsow z danej kategorii bedzie szybsze.
do tabeli objects walisz wszystkie obiekty (jachty, auta itd), do object_category wpisujesz cyferke oznaczajaca typ = 0-auto, 1-jacht 2-rower 3-motocykl itd, w object_data zapisujesz zserializowaną tablicę zawierającą wszystkie dane dotyczące danego obiektu. To pozwala na dowolna konfiguracje pól - w rowerze moga byc inne, i w dodatku innych typów i w innej ilosci, w aucie inne, w motocyklu inne.
Tylko nie zrobisz selecta wtedy szukajac np najszybszej łodzi albo najpojemniejszego silnika.
zazwyczaj uzywam tego sposobu do danych ktore i tak musza byc odczytane za jednym razem, a zawieraja zmienna liczbe pól.