Wpis z mikrobloga

Hej, tworzę małą appkę do zarządzania sklepem. Mam tabele: shops, products, orders i teraz generalnie sklep ma zamówienia, zamówienia mają przedmioty, czy dobrym rozwiązaniem jest stworzenie tabeli orderitems, które czerpią produkty z tabeli products i to te orderitems połączone są z orders? Dodatkowo takie pytanie, załóżmy, że stworzyłem już wszystkie tabele, aplikacja śmiga, nagle klient domaga się dodatku/zmiany, która wymaga modyfikowania struktury bazy, jak to w Laravelu zrobić najmniej inwazyjnie kiedy już wszystko jest w bazie itp?

#programowanie #webdev #php
  • 9
@zomper: to zalezy ( ͡° ͜ʖ ͡°) A tak naprawde zalezy od tego czy order jest tylko na czas trwania zamowienia, czy archiwalnie tez. Jesli archiwalnie, to bym kopiowal encje przedmiotu calkowicie, przy zwyklej relacji jak zmienisz cos w produkcie to zmienisz we wszystkich archiwalnych zamowieniach, nawet cene.
@zomper: mozesz w orderitems zawrzec jeszcze dodatkowe dane jak ilosc, cena sumaryczna, rabat a wyciac np stan magazynowy. Nie wiem co tam w products masz i czym dokladnie jest zamowienie ale cos w ten desen :)
@zomper: No musisz trzymać dane takie jak są na dokumencie, czyli cenę w momencie zakupu itd. - tak żebyś mógł przetworzyć taki dokument nawet za 10 lat. Także warto pomyśleć nad tym jak trzymać np. dane sprzedawcy - bo jeżeli np. firma zmieni siedzibę to nie powinny te dane zmieniać się na archiwalnych dokumentach.
@kefas_safek: Jeszcze takie pytanie, z racji posiadania tabeli shops, każdy sklep posiada swoje artykuły, wtedy tabela products jest po prostu uniwersalnym zbiorem wszystkich dostępnych produktów, a dopiero tabela shop_products, która kopiuje produkty z tabeli products jest źródłem danych dla sklepu w kwestii produktów?
@zomper: No i tu pytanie jak bardzo swoje artykuły posiada sklep. Jeśli są to jego prywatne artykuły, które sobie dodaje to raczej będzie relacja 1:n czyli w tabeli products dajesz shop_id i masz produkt przywiązany do sklepu. Jeśli natomiast ma być to uniwersalny słownik produktów to wtedy tabela łącząca shop_products gdzie bedzie shop_id i product_id Nie zapomnij dać uniqe na tej kombinacji. W takiej tabeli łączącej możesz zawierać dodatkowe dane jak
@kefas_safek: Generalnie przerobiłem już formę: tabela products, w której każdy produkt ma swój shop_id, problem wynika z tego, że generalnie produkty są raczej uniwersalne dla sklepów, a przy pierwszym podejściu popełniłem błąd i przy pierwszym sklepie wklepałem ręcznie dane, ale pojawił się drugi sklep i w tym wypadku znów trzeba było wprowadzić te same produkty dla kolejnego sklepu. Wyglądało to mniej więcej tak: http://pastebin.com/LNAQaR5N
@zomper: To moze warto by bylo zrobic bazowy dict z produktami i kopiowac dla kazdego nowego sklepu? W ten sposób zostawisz możliwość modyfikacji podstawowych danych sklepowi - będzie mógł sobie zmienić np nazwę produktu. Ręcznie tego robić nie możesz, wystarczy prosty skrypt kopiujący.