![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 17.11.2010 Ostrzeżenie: (0%)
|
Cześć,
mam taki poblem. Mam do zrobienia system newsów są 3 typy Samochody motory i jachty Powiedzmy mam tabelę NEWS i w niej pola id, rating, title , id_moto_params, id_auto_params, id_boat_params Tabela = id_moto marka, model, pojemność, .. i w zależności od typu wpisu dodaję id_moto/auto/boat do tabeli news strasznie zagmatwane i mam nadzieję że zrozumiecie? Ps. Problem podobny np w allegro aukcja ma kilka identycznych parametrów np cena, czas trwania + przedmioty z różnymi parametrami np, stan , rozmiar a w innej wielkość, moc Pozdrawiam |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 435 Pomógł: 40 Dołączył: 16.02.2003 Skąd: Wrocław Ostrzeżenie: (0%)
|
Możesz zrobić 'odwróconą' tabele (key-value table).
Struktura relacji: Parameters(ID_newsa, key, value) (klucz złożony na id_newsa i key) News(Id, rating, title, type) gdzie type = {moto, auto, boat} przykład: Kod News: Id | Rating | Title | Type ----------------------------------- 1 | 2 | Jakiś tytuł | 10 ----------------------------------- 2 | 5 | Tytuł 2 | 20 ----------------------------------- (Type 10 = auto; Type 20 = boat) Parameters: Id_newsa | Key | Value --------------------------------- 1 | Pojemność | 2.0 --------------------------------- 1 | Rok produkcji | 1998 --------------------------------- 2 | Wyporność | 666 --------------------------------- 2 | Cena | 525252 w parameters byłaby duża redundancja danych, dlatego możesz do tego dodać tabelę słownikową: TypyParametrów(id, nazwa, opis) (opis tak strzeliłem (IMG:style_emoticons/default/wink.gif) np: Kod 1 | Pojemność | Blablabla 2 | Rok produkcji | Blablabla wtedy w tabeli Parameters nie używałbyś 'słownego' zapisu "Pojemność" a powiązania z TypemParametru o ID "1" Ten post edytował ano 1.03.2012, 21:25:23 |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 3 Dołączył: 14.02.2012 Ostrzeżenie: (0%)
|
Może tak:
NEWS id_news PARAMS id_params id_type param -- np. pojemność TYPE id_type type_name -- np. samochód PARAM_NEWS id_news id_params value -- np. 1.4 Wychodzę z założenia, że listę parametrów i typów pojazdów trzymasz w bazie. Każdy news może mieć wtedy n parametrów o wartości value, a każdy parametr należy do danego typu środka transportu. Jak źle myślę, to proszę mnie poprawić. Ten post edytował bww 1.03.2012, 21:25:32 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 17.11.2010 Ostrzeżenie: (0%)
|
Dzięki za odpowiedz jutro zmodyfikuję wasze wskazówki i pokażę do oceny
CODE Id | Rating | Title | id_moto_news | id_boat_news | -------------------------------------------------------------------- 1 | 2 | Jakiś tytuł moto | 1 | null --------------------------------------------------------------------- 2 | 5 | Tytuł boat | null | 2 -------------------------------------------------------------------- moto news Id_newsa | pojemność | marka | ------------------------------------------ 1 | 2.0 | volvo | ------------------------------------------- boat news Id_newsa | liczba pasażerów | zasięg | -------------------------------------------------- 2 | 2000 | 1000 mil | -------------------------------------------------- Ja bym zrobił tak co o tym sądzicie ? @edit coś się rozjechało ale wiadomo o co chodzi (IMG:style_emoticons/default/wink.gif) Ten post edytował opmsoft 2.03.2012, 13:43:02 |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 3 Dołączył: 14.02.2012 Ostrzeżenie: (0%)
|
Nie rozumiem po co dla każdego rodzaju newsa tworzyć osobną tabelę...
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 121 Dołączył: 27.10.2007 Skąd: Poznań, Łódź Ostrzeżenie: (0%)
|
Zaproponowana przez Ciebie struktura jest wadliwa. O ile aktualnie wydaje się, że będzie działać to w przyszłości kiedy będziesz chciał dodać nowy typ newsa musisz zrobić:
W przypadku rozwiązań zaproponowanych przez @bww i @ano jedyną rzeczą jaką musisz wykonać to zdefiniować nowy typ no i ewentualne parametry. Osobną kwestią jest np zliczenie wszystkich newsów w podziale na kategorie - w Twym rozwiązaniu musisz wykonaś kilka zapytań lub złączyć kilka tabel (dla każdego typu newsa osobna tabela). W przypadku jednej tabeli wystarczy jedno proste zapytanie na jednej tabeli i dodana klauzula group by... Mam nadzieję, że Cię przekonałem (IMG:style_emoticons/default/wink.gif) Pozdrawiam |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 17.11.2010 Ostrzeżenie: (0%)
|
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 |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%)
|
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. Ten post edytował Orzeszekk 3.03.2012, 01:15:49 |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 17.11.2010 Ostrzeżenie: (0%)
|
Oki czyli generalnie nie znaleźliśmy odpowiedniego rozwiązania będzie trzeba przyjąć jakiś kompromis tylko nie wiem jaki może jeszcze ktoś się wypowie ?
|
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 21:16 |