Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> projekt nietypowej bazy danych
nowy_pehapowiec
post
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Mam zrobić bazę danych do małego sklepu internetowego. Ale wymagania są dość nietypowe:

A) Produkty mają być umieszczone w drzewie kategorii, z którego będzie robione menu - proste.

(IMG:style_emoticons/default/cool.gif) System tagów i wyszukiwarka po tagach - proste.

C) Produkty mają być umieszczone w drzewie2 producentów i ich kategorii, z którego będzie robione kolejne menu. Czyli jeśli producent X ma u siebie jakieś produkty w jakiś kategoriach to cały ten schemat ma być odwzorowany w tym moim drzewie2. Czyli poziom 0 to nazwy producentów, poziom 1 to najbardziej ogólne kategorie u danego producenta i tak dalej. Mi się to nie podoba ale ponoć ma to ułatwiać szukanie produktów jeśli wcześniej szukało się ich na stronie jakiegoś producenta. I z tym mam problem. Zrobiłem drugie drzewo i dodawany do bazy produkty trzeba umieścić i w pierwszym drzewie (kategorii) i w drugim (producentów). I jakoś to działa ale pojawił się problem ze ścieżką nawigacyjną (taką w stylu "tu jesteś"). Przy jednym drzewie sprawdzałem id wyświetlanego produktu albo grupy produktów i sprawdzałem w bazie co jest nadrzędne (kilka razy) i dostawałem ścieżkę. Ale teraz jest niejednoznaczność. Jeden produkt występuje w 2 drzewach i w zależności od tego czy został wybrany poprzez nawigowanie po drzewie 1 czy drzewie 2 powianiem wyświetlać różne ścieżki. Ale mam tylko id i nie wiem w które menu kliknął user, żeby otworzyć stronę produktu z tym konkretnym id.

D) Do tego ma dojść jeszcze trzecie drzewo co już zupełnie miesza.

E) Jeszcze odnośnie tagów, chciałbym, żeby po wybraniu wyświetlenia produktów z jakimś tagiem, te produkty wyświetlały się nie jako lista ale właśnie jako jedno z drzew. I tu problem taki, że dodanie do select prostego warunku where nie zadziała po kategorie nie mają dodawanych tagów.

F) Inne sposoby szukania produktów. Co poza pełno tekstowym wyszukiwaniem produktów można dodać? Na razie dodałem wybór tagów z listy.

G) Jeśli pozwolę na dopisywanie tagów przez każdego usera (jedno polowy formularz) to pewnie roboty będą dopisywać śmieci. Jak poza captcha można się zabezpieczyć przed tym.


Może ktoś łaskawie pomógłby mi się uporać z projektem takiej bazy? Byłoby fajowo. Każda dobra rada na wagę złota.

pozdro
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nowy_pehapowiec
post
Post #2





Grupa: Zarejestrowani
Postów: 220
Pomógł: 0
Dołączył: 24.08.2009

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


Cytat(jmail @ 19.10.2009, 14:14:56 ) *
  1. WHERE
  2. produkt_tag = tag OR rodzic_tag = tag OR rodzic_rodzic_tag = tag i tak dalej


A nie odwrotnie?
  1. WHERE
  2. produkt_tag = tag OR dziecko_tag = tag OR dziecko_dziecko_tag = tag i tak dalej

Drzewo pobieram i wyświetlam od góry. Czyli powonieniem sprawdzać czy tag występuje u jakiegokolwiek dziecka? Czy można to jakoś zrobić bez rekurencji?
Bo pobieranie tagów dziecka i ich sprawdzanie, potem pobieranie tagów dziecka dziecka i ich sprawdzanie masakrycznie zwolni bazę. Jak to zrobić?


Cytat(vokiel @ 19.10.2009, 19:11:44 ) *
E). Wyszukując produkt po tagu, dla każdego odnalezionego musisz pobrać resztę ścieżki w górę, potem wyniki pogrupować od góry, od kategorii najszerszego znaczenia, do tej najzwięźlejszej.

Nie rozumiem. Myślałem, że będę pobierać drzewo od góry. Wtedy właśnie ten problem mi się pojawił z rodzicami nie mającymi tagu dzieci. Jakbym pobierał produkty spełniające tag to nie byłoby tego wcześniejszego problemu. Ale jak je później wyświetlić w postaci drzewa? Zupełnie nie wiem jak się za to zabrać.

Cytat(vokiel @ 19.10.2009, 19:11:44 ) *
D). Po co tyle tych drzew?

Wiem, że to jest głupie ale to nie mój pomysł i nie mogę go zmienić.

Cytat(vokiel @ 19.10.2009, 19:11:44 ) *
C-A). Aby dać sobie możliwość wyświetlenia breadcrumbs'ów musisz jakoś poinformować skrypt z której ścieżki (drzewa) ma korzystać. Bo w takim, że tak to ujmę mętliku sam się nie połapie. Jeśli produkt może podlegać pod ścieżkę producenta->kategorii->subkategorii, lub producenta->tagu, etc, to musisz jakoś przekazać do skryptu gdzie ma tego szukać. Albo możesz co najwyżej pobrać pierwszą pasującą opcję.

Już sobie z tym poradziłem (IMG:style_emoticons/default/smile.gif)

Cytat(vokiel @ 19.10.2009, 19:11:44 ) *
Czy nie możesz ograniczyć tego do drzewa kategorii a producenta umieścić jako jeden z atrybutów (właściwości) produktu?
Przynależność do kategorii może być różna, bo monitor lcd 22" może należeć do głównej kategorii monitory, subkategorii lcs, lub subkategorii 22", anyway producenta ma jednego.

Niestety nie mogę, bo podział w drzewie producentów ma być dokładnie taki jak an stronie danego producenta (każdy ma inny). Kolejny niefunkcjonalny bezsens (IMG:style_emoticons/default/sad.gif)
A tak przez ciekawość, jeśli mam kategorie nierozróżnialne od produktów to czy lepiej dopisywać producenta do tabeli z produktami (wtedy kategorie będą miały NULL w tej kolumnie), czy lepiej stworzyć osobną tabelę z producentami i tabele product-producer? A może wpisać producentów jako tagi? I tylko w dodatkowej tabeli trzymać samą listę producentów (żeby odróżnić od tagów)? Które rozwiązanie uważasz za lepsze?

Cytat(vokiel @ 19.10.2009, 19:11:44 ) *
Jak ja to widzę, właśnie jedno drzewo. Nie stracisz na funkcjonalności, bo nadal będziesz mógł utworzyć drzewko menu według producenta, po prostu stworzysz drzewko po drzewku dla każdego producenta. Tak samo z resztą funkcjonalności, które przedstawiłeś.

Też o tym myślałem, ale nie zależy to teraz ode mnie. Czy dobrze myślę, że wyświetlanie drzewa z podziałem na producentów trzeba byłoby wtedy zrobić tak jak wyświetlanie drzewa produktów posiadających jakiś tag?

Cytat(vokiel @ 19.10.2009, 19:11:44 ) *
Poza tym jest w bazach danych pojęcie redundancji danych. No i robiąc kilka drzewek ze względu na najbardziej ogólny podział łamiesz tą zasadę. Każdy produkt występuje tyle razy ile masz drzewek, pomimo, że jest to ten sam produkt. (chyba, że źle zrozumiałem Twój opis - popraw mnie jeśli się pomyliłem). Drzewka

mają być podobne, różnice marginalne. Wiem, bez sensu (IMG:style_emoticons/default/sad.gif)

Cytat(vokiel @ 19.10.2009, 19:11:44 ) *
W przypadku bazy opartej o drzewie większość działań będzie polegała na chodzeniu po drzewie w tą i z powrotem, niestety nie unikniesz tego.

Z chodzeniem po drzewie od góry do dołu jakoś sobie radzę. Ale w drugą stronę już nie. Jeśli możesz to napisz jak przechodzić po drzewie w górę i potem grupować wyniki, tak, żeby potem znowu otrzymać drzewo?






Zapomniałem się jeszcze zapytać, czy drzewo z bazy lepiej jest pobierać jednym zapytaniem, czy wieloma? Teraz pobieram wieloma zapytaniami. Po kolei wszystkie dzieci jakiegoś rodzica, potem dzieci dzieci. Czyli bardzo dużo pytań SELECT, między którymi wyświetlam listę nieuporządkowaną w html. Czy jeśli szybkość jest nadal na akceptowalnym poziomie, to warto zmienić tą moją metodę? Np pobrać tabelę z drzewem do PHP i później w samym PHP generować z niej odpowiednią strukturę drzewa? Byłoby dużo więcej roboty ale może warto?


pozdro
Go to the top of the page
+Quote Post

Posty w temacie
- nowy_pehapowiec   projekt nietypowej bazy danych   5.10.2009, 23:27:11
- - jmail   lol? o tego przecież jest nazwa RELACYJNA baza da...   6.10.2009, 02:08:32
- - nowy_pehapowiec   No ale to bez sensu. Zastanów się. Każdy produkt m...   6.10.2009, 13:01:29
|- - Riklaunim   Cytat(nowy_pehapowiec @ 6.10.2009, 14:01...   6.10.2009, 14:38:13
- - jmail   to trzeba utworzyć osobne tabele na dowiązania pro...   6.10.2009, 13:52:15
- - nowy_pehapowiec   Chwilunia, ja wime co to są relacje w bazach danyc...   7.10.2009, 00:52:35
- - jmail   G - SMS płatny :F E - całkowicie nie rozumiem F ...   7.10.2009, 01:34:17
- - nowy_pehapowiec   G - sms płatny raczej odpada Ale jakaś weryfikacj...   7.10.2009, 11:17:43
- - jmail   tak tak. moze jeszcze użytkownika i hasło do bazy ...   7.10.2009, 21:24:47
- - nowy_pehapowiec   Sam widzisz, że baza jest zakręcona. Moim zdaniem ...   14.10.2009, 11:19:10
- - VegetaSSJ   Nie rozumiem po co tworzysz 2 drzewa. Dla mnie do ...   15.10.2009, 13:35:47
- - jmail   vegeta - kategorie w sklepie != kategorie prod...   15.10.2009, 15:31:01
- - nowy_pehapowiec   No niestety drzewa są różne, dzisiaj już 3. Równie...   16.10.2009, 10:28:17
- - jmail   [SQL] pobierz, plaintext  WHEREprodukt_tag = ...   19.10.2009, 13:14:56
- - vokiel   G). Pozwól na dopisywanie tylko zarejestrowanym, p...   19.10.2009, 18:11:44
- - nowy_pehapowiec   Cytat(jmail @ 19.10.2009, 14:14:56 ) ...   20.10.2009, 11:44:09
- - Zyx   Na stronie powinna być wykonywana w miarę stała li...   20.10.2009, 12:16:40
- - nowy_pehapowiec   Nie mogę się połapać w tym co napisałeś. Mam w jed...   20.10.2009, 14:13:41


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 Aktualny czas: 12.10.2025 - 13:10