Cześć! Chciałbym aby w moim systemie istniała możliwość dodawania komentarzy do poszczególnych wpisów i odpowiedzi na nie, załączam schemat bazy jaką udało mi się wykonać. Nie wiem czy jest poprawna, coś mi nie pasuje, ciągle jakieś błedy mi rzuca.
Czy mógłby mi ktoś pomóc i podpowiedzieć jak w fajny przejrzysty spoób moża by by ło to rozwiązać?
Wydawało mi się, ze zadanie nie jest trudne a jednak przysparza mi wielu problemów.
A możesz szerzej opisac co chcesz osiąnąć? Masz zamówienie, komentarz i historię cen czy jak by się to nie zwało. Po co historia cen trzyma ID komentarza, a komentarz ID produktu? Czego ma dotyczyć ten komentarz w końcu, produktu czy historii? Generalnie opisz jakie błędy masz
Ok, racja nie wytłumaczyłem dokałdnie. Mam zlecenie i pod tym zleceniem chcę aby ludzie mi pisali swoje oferty w komantarzach, oprócz tego będzie pole do wpisania ceny. Użytkownik, który oferuje swoją usługę będzie mógł zmieniać tą cenę, np. porozmawia sobie ze zlecającym w komentarzach i może ją obniżyć ale chce żeby była widoczna też stara cena - stąd price_history. Będzie wiele zamówien więc chyba powinien komentarz trzymać order1_id?
Będzie wiele zamówien więc chyba powinien komentarz trzymać order1_id?
Tak tylko po co wtedy id komentarza w priceHistory? Tym bardziej, że tam jest jeden ID, czyli jest jakaś cena i dotyczy ona jakiegoś komentarza - którego konkretnie?. Czy nie lepiej byłoby dodać komentarze też do cen? Tzn użytkownik składa oferte i podaje cenę i do tych cen komentarze? To oczywiście zależy od przypadków użycia, mało wiem, ale tak sobie myślę, że jako zlecający gdybym dostał oferty to bardziej bym chciał pisać komentarze/wiadomości do konkretnej oferty, a nie całego zlecenia? Zakładam, że tworzać ofertę do zlecenia to jest tworzony priceHistory, a nie że użytkownik wpisuje cenę w komentarzu i potem jakoś automagicznie się ta historia zakłada? IMHO potrzebowałbys właśnie czegoś takiego jak oferta, a tam osobno trzymać historię cen albo przez jakiś generyczny mechanizm albo tak jak masz (albo jeszcze po prostu zlecający jak chce dać nową ofertę to jest tworzona nowa oferta, a starej nikt nie rusza).
Jeżeli jednak chcesz by dodawać ceny w komentarzach i żeby razem z komentarzem można było utworzyć ten priceHistory to mając produkt masz listę komentarzy do tego produktu i nie widzę by były jakoś uporządkowane, tzn A tworzy zlecenie, B napisał ofertę, C napisał ofertę. A komentując bedzie po prostu cytował tekst czy w jakiś inny sposób odnosił się do A lub B?
hcubyc napisał(a):
Będzie wiele zamówien więc chyba powinien komentarz trzymać order1_id?
Tak tylko po co wtedy id komentarza w priceHistory? Tym bardziej, że tam jest jeden ID, czyli jest jakaś cena i dotyczy ona jakiegoś komentarza - którego konkretnie?. Czy nie lepiej byłoby dodać komentarze też do cen? Tzn użytkownik składa oferte i podaje cenę i do tych cen komentarze?
Będzie miejsce na komentarz - inputText, coś takiego i obok okienko na wpisanie ceny. Cena dotyczy komentarza(oferty) danego użytkownika, może zdarzyć się tak, że zlecjący i wykonujący będą wymieniać swoje zdania i do zmiany ceny nie dojdzie, dlatego wolałbym uniknąć wpisywania co komentarz ceny.
To oczywiście zależy od przypadków użycia, mało wiem, ale tak sobie myślę, że jako zlecający gdybym dostał oferty to bardziej bym chciał pisać komentarze/wiadomości do konkretnej oferty, a nie całego zlecenia?
I tak ma być, moze jakoś źle się wcześniej wyraziłem. Zlecający będzie w komenarzu odpowiadał na ofertę, którą dostał. Jeśli się zdecyduje na jakąś to będzie przycisk 'wybieram ofetę'.
Jeżeli jednak chcesz by dodawać ceny w komentarzach i żeby razem z komentarzem można było utworzyć ten priceHistory to mając produkt masz listę komentarzy do tego produktu i nie widzę by były jakoś uporządkowane, tzn A tworzy zlecenie, B napisał ofertę, C napisał ofertę. A komentując bedzie po prostu cytował tekst czy w jakiś inny sposób odnosił się do A lub B?
Chcę zrobić strukturę drzewa w wyświetlaniu komentarzy tak, żeby było wiadomo komu A odpowiada.
Chcę zrobić strukturę drzewa w wyświetlaniu komentarzy tak, żeby było wiadomo komu A odpowiada.
To poczytaj jak to zrobić, bo albo bedziesz musiał mieć kolejne pole w komentarzu żeby podac ID komentarza do którego się odnosisz i tak rekurencyjnie albo musisz stworzyc osobny byt, nazwij to jak chcesz czy to będzie własnie oferta, czy moze wątek, grupa komentarzy, whatever. Wtedy to będzie trzymało referencję na produkt, a komentarze będą trzymały wyłącznie referencję na oferte/jaktonazwiesz i komentarz nie będzie musiał trzymac referencji do zamówienia. PriceHistory też mogłoby trzymac referencję do wątku, a nie do komentarza, bo tam jest cały kontekst, a nie pojedynczy komenatrz typu 'pani, za ładne oczy opuszcze o stówe'
Poprawiłem bazę tylko mam wątpliwości czy w tabeli 'comment' może być 'user_id'? Mam na myśli to, że robi się taka pętla na schemacie, nie wiem czy tak powinno być. w tabli 'comments' będą przechowywane komentarze do pierwszego komentarza czyli oferty. Czy o coś takiego chodziło?
w comment masz dwa razy offerId, ale może nie kumam tego narzędzia. userId jak najbardziej możesz mieć w comment, bo będzie to albo oferujący albo zlecający, więc jakoś musisz to rozróżnić. w offer masz current_value i old_value - nie myslałeś po prostu wersjonować? Są jakieś narzedzia do tego np. Javers, musiałbyś sam zobaczyć co ci pasuje i sie sprawdzi, ale narzędzie by sobie stworzyło swoje tabele i tam trzymało zmiany danej encji - np. że była cena 5, a ktoś zmienił na 4,99.
Masz rację, przez przypadek mam dwa razy offer_id się znalazło. Tak, myślałem o wersjonowaniu ale na razie najważniejsze są te komentarze.
Jeśli tak może być to dobrze, tylko jeden problem jeszcze któego nie ogarniam - jak i gdzie rozegrać to, że wykonawca może dodać komentarz tylko do swojego 'wątku' a zlecający do wszystkich?
Musisz to zrobić na poziomie logiki biznesowej, czyli w twoim przypadku w Javie ;) baza to tylko worek na dane. Jak to zrobić? Bardzo prosto - masz userId w offer, więc warto by było to zamienić na jakąś lepszą nazwę, np offerorId i wtedy sprawdzasz czy użytkownik, który dodaje komentarz ma ID z offer, a jeżeli chodzi o zlecającego to sprawdzasz czy ID użytkownika jest w encji order - tam ci go brakuje. Także masz w tabeli user_account pole offerId - to bez sensu, bo wtedy mozesz miec 1 zlecenie dla jednego konta. Powinna być zależność w drugą stronę, czyli właśnie order ma ID usera, który zlecił zamówienie. W ten sposób możesz ogarnąć komentarze - kto może gdzie komentowac ;)
Hm to może powinna być relacja wiele do wielu? Ja bym chciał aby jeden user faktycznie mógł kilka zleceń dodać ale też kilka komentarzy i kilka kont powinno móc komentować.
Nie. Relacja jeden do wielu bedzie między zleceniem, a ofertami, a jeden do jeden miedzy oferta a użytkownikiem, a także użytkownikiem, a komentarzem. Jedno zlecenie może miec wiele ofert, ale każda oferta tylko 1 oferenta, zlecenie może mieć tylko 1 zlecającego. Użytkownik może natomiast złożyć wiele zleceń (też jeden do wielu), a każdy kto nie jest zlecającym może złożyć oferte
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.