• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Typ interfejsowy do bazy danych

VPS Starter Arubacloud
0 głosów
668 wizyt
pytanie zadane 3 września 2015 w Java przez nowszy94 Bywalec (2,320 p.)

Pracuje obecnie nad portalem dla Pizzerii. Piszę go w Javie, na chwilę obecną walczę nad utworzeniem struktury w bazie danych. Idea jest taka, że posiadam klasę Order, w której znajdują się pola dotyczące ceny całego zamówienia, uzytkownika zamawiajacego, date zamowienia a także listę z zamawianymi rzeczami. Idea jest taka, że użytkownik może zamówić pizze, dodatki do pizzy, sos, w przyszłosci może i napój, jakieś kebaby itp. 

Listę mam zdefiniowaną w następujący sposób:

private List<Priceable> orderList;

Priceable to interfejs opisujący obiekty, które mają cenę, i posiada metodę getPrice(). Każdy obiekt który będzie można zamówić implementuje ten interfejs. 

 

I teraz moje pytanie.

Jak to umieścić w bazie danych? Obiekty implementujące interfejs Priceable mogą być do siebie podobne, jednak różnią się od siebie. Dla przykładu Obiekt Pizza implementujący Priceable posiada pola dotyczące rodzaju ciasta (grube, cienkie), liste dodatków itp, natomiast Obiekt typu Sauce(sos) również implementujący Priceable, ma inną strukturę. 

 

Myślę, że musiałaby to być tablica asocjacyjna, jednak jak to okodzić, żeby tak właśnie działało?

 

DODATKOWE INFORMACJE:

Wszystkie obiekty będę miał w bazie mysql, wszystkie zamówienia (Order) również w niej będą umieszczane. Do opisu obiektów używam adnotacji, a nie xml.

2 odpowiedzi

0 głosów
odpowiedź 3 września 2015 przez Tomasz90 Nałogowiec (25,140 p.)
Ja bym to trochę inaczej zrobił:

Wszystko co zamawiasz to po prostu jakiś produkt. No i należy on do jakiejś kategorii. Robisz osobną tabelę na kategorie i osobną na produkty. Klasa Order posiada wtedy pole z listą zamówionych produktów. No a jeżeli chcesz żeby dany produkt posiadał jakieś unikatowe cechy to robisz tabele na atrybuty i wartości tych atrybutów powiązane z konkretnym produktem.
komentarz 4 września 2015 przez nowszy94 Bywalec (2,320 p.)
A nie dałoby rady zrobić tego z użyciem interfejsu? Interfejs też opisuje jakąś kategorie obiektów. Poza tym czytałem (i po głębszym rozważaniu tematu również doszedłem do takich wniosków), że lepiej używać interfejsów, niż rozszerzać klasę.
komentarz 4 września 2015 przez Tomasz90 Nałogowiec (25,140 p.)
Chyba nie do końca zrozumiałeś o co mi chodziło bo tam żadnego dziedziczenia nie ma i nie musi być.

Nie napisałeś jakiego używasz ORM( i czy w ogóle) to ja opiszę na przykładzie hibernate.

A co do interfejsu to możesz mieć tabele osobno na różne produkty z tym że potem jak będziesz to pobierał wszystkie produkty z zamówienia to Hibernate będzie zwracał List<Object []>. Tego interfejsu nie przechowujesz w bazie w ogóle.
komentarz 8 września 2015 przez nowszy94 Bywalec (2,320 p.)
Uzywam Hibernate. Zrozumiałem to tak, że miałbym podstawową klase produkt, i w celu utworzenia konkretnych klas (pizza, składniki, itp.) rozszerzałbym ją.

 

Popraw mnie jeżeli się mylę:

Ty proponujesz utworzenie ogólnej klasy produkt, która będzie miała dodatkowe pole na kategorie. Kategoria to będzie dodatkowa tabela. Pomysł dobry, tylko obawiam się, że mógłbym sobie skomplikować obsługę pizz, bo do nich również musiałaby być dodatkowa tablica asocjacyjna, opisująca składniki pizzy.
0 głosów
odpowiedź 8 września 2015 przez Schizohatter Nałogowiec (39,600 p.)
edycja 8 września 2015 przez Schizohatter
a ja to widzę tak:

Klasy:
1. Product:
a) podklasa pizza:
- tu zdefiniowane składniki (czyt. pobrane z bazy danych)
- cena początkowa
- funkcja dodawania składników (automatycznie zwiększa cenę) (funkcja powinna obsługiwać dodawanie wielu składników na raz - dzięki temu można tworzyć od razu całe gotowe propozycje)
b) podklasa kebab
- jak wyżej
c) podklasa napój
- znowu zdefiniowane (np. na podstawie bazy danych)
2. Order
- tablica, do ktorej można dodawać nowe obiekty klasy Product
- zapisuje do bazy danych pojedyncze obiekty klasy Product dodane w międzyczasie, i zapisuje wewnątrz siebie id pojedynczych zamówionych produktów
- na "zamknięcie" zamówienia zapisuje wszystkie zamówione produkty do kolejnej (innej niż wyżej) tabeli, oblicza końcową cenę i to też zapisuje, kontakt z klientem i tak dalej

Dzięki temu łatwo napiszesz do tego panel administracyjny - zarówno tworzenia nowych składników, napoi, zmiany cen poszczególnych i tak dalej. Ewentualnie, jak chcesz mieć jeszcze większą elastyczność, to nie tworzysz podklas produktu, tylko używasz kategorii produktu, jak ktoś podał wyżej. Niestety, tak czy owak prędzej czy później będzie potrzebna pomoc programisty przy dodawaniu nowych produktów, bo np. pizza nie może być jednocześnie na cienkim i grubym cieście :) Jak masz pytania - to pisz.

Podobne pytania

0 głosów
1 odpowiedź 225 wizyt
pytanie zadane 3 grudnia 2019 w Java przez patryczek036 Nowicjusz (210 p.)
+1 głos
1 odpowiedź 2,065 wizyt
pytanie zadane 8 czerwca 2016 w Java przez jocom Początkujący (390 p.)
0 głosów
2 odpowiedzi 460 wizyt

92,454 zapytań

141,262 odpowiedzi

319,092 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...