![]() |
![]() ![]() |
![]() |
![]()
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 ![]() 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 -------------------- Linkedin | ...
|
|
|
![]()
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 ![]() 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 ![]() 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 -------------------- "The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs |
|
|
![]()
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 ?
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 23.06.2025 - 06:07 |