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

Baza danych - dzienniczek diety

Object Storage Arubacloud
0 głosów
848 wizyt
pytanie zadane 25 lipca 2019 w Nasze projekty przez Krst0 Obywatel (1,340 p.)
Witam,

mam do zrobienia projekt harmonogram treningowy + dzienniczek diety. Bazę danych robię w Oracle. Najpierw chcę rozpocząć od projektu dzienniczka diety. Do tej pory stworzyłem taki schemat bazy

Produkt (IdProduktu, Kalorie, Białko, Węglowodany, Tłuszcze, Nazwa)

Składnik (IdProduktu, IdPrzepisu, Ilość, Miara)

Przepis (IdPrzepisu, Nazwa, Przygotowanie, Autor, Kategoria, Zdjęcie)

Autor (IdAutora, Imię, Nazwisko, Login, Hasło).

Właściwie jest to schemat bazy danych książki kucharskiej jednakże w dzienniczku diety wystarczy danemu użytkownikowi zapisać odpowiednie potrawy i ich ilość wraz z datą i godziną ich spożycia. I tutaj pojawia się problem. Czasami zdarza się sytuacja, że dana osoba zje powiedzmy samego pomidora (on znajduje się oczywiście w tabeli produkt), ale ten pomidor nie znajduje się w tabeli Przepis. I teraz w nowej tabeli o nazwie Zjedzone czasami będzie jakiś konkretny przepis pochodzący z tabeli Przepis albo produkt z tabeli Produkt. I teraz nie wiem czy da się tak zrobić, ale potrzebuję, by tylko jedno z tych pól było wypełnione (ale tylko jedne). I wtedy taka tabela wyglądałaby mniej więcej tak:
Zjedzone (IdZjedzoneProduktu, IdPrzepisu, IdProduktu, Ilość).

Chyba, że da raczej inaczej skonstruować taką bazę danych to czekam na propozycje.
komentarz 25 lipca 2019 przez DragonCoder Nałogowiec (36,500 p.)
Bez sensu. Bo moge w jednym posilku zjesc chabowego z ryzem i wazywami + pomidor. Wiec jak dla mnie, to user powinnien moc sobie wybrac i 10 dan, jesli jest taka potrzeba.

Jak dla mnie to ogolnie baza powinna sie skladac z tabeli:

GotoweDania, zjedzone, produkty. Gdzie w zjedzonych danach sa wczesniej przygotowane potrawy jak: zupa ogorkowa itd. Po co mi autor przepisu, po co mi przepis. Mam tam zapisać co zjadlem i widziec ile kalorii przez to przyswoilem.
komentarz 25 lipca 2019 przez Krst0 Obywatel (1,340 p.)
Ooo, myślę, że masz rację w sumie. Tylko zastanawiam się nad jednym. O autorze myślałem w przypadku gdybym chciał dodać produkty/przepisy do bazy, ale to mogę pominąć w sumie na początku. Przechodząc do konkretów.

W Zjedzonych będę miał IdZjedzonego i do tego IdProduktu/Przepisu oraz IloscZjedzonego. Czyli przepis i produkt powinny znajdować się w tej samej tabeli, bo tak to pole CoZostaloZjedzone i IloscZjedzonego muszą zostać wypełnione. Gdyby rozdzielić Produkty i Przepisy na osobne tabele to nie wiem jak wymusić, żeby pole CoZostaloZjedzone nie było puste i zawierało któryś Id z tabeli Przepisy lub Produkty. Z jednej tabeli łatwo to wymusić, ale żeby coś z dwóch tabel to nie wiem w jaki sposób.

Poprawcie mnie jeśli źle na to patrzę.
komentarz 25 lipca 2019 przez tkz Nałogowiec (42,000 p.)
Zobacz jak jest zrobione myfitnesspal, ten układ mi osobiście najbardziej pasuję.
komentarz 25 lipca 2019 przez DragonCoder Nałogowiec (36,500 p.)

@Krst0, nie wymuszasz od usera nic, bo moze byc tak, ze nie ma tego produktu w bazie lub ma inne wartosci, wtedy mozesz zrobic tak, ze user dodaje to do wlasnej tabeli produktow, albo recznie albo przez scanowanie QR. Oprocz tego mozesz zmusic user poprzez podanie jednego pola, jezeli zostalo one wypelnione, to pokazuje sie plusik, dzieki ktoremu mozesz dodac kolejny produkt czy danie. 

komentarz 25 lipca 2019 przez Krst0 Obywatel (1,340 p.)
Noo planuję to zrobić właśnie w ten sposób tylko potrzebuję jakoś ogarnąć tę bazę najpierw. Bo na jej podstawie będzie działał ten program. Tylko zastanawiam się nad tym, bo jednak w bazie przy IdZjedzonego muszę mieć co zostało zjedzone czyli IdPrzepisu/IdProduktu. Baza musi to wymusić, bo w jaki sposób będę wiedział co zostało zjedzone jak to będzie puste pole.

Swoją drogą do tabeli Zjedzone przydałoby się pole IdPosiłku, bo w danym posiłku może być kilka produktów/przepisów.
komentarz 25 lipca 2019 przez DragonCoder Nałogowiec (36,500 p.)
Hm,, to moze zrob cos takiego jak posilek. I do kazdego posilku przypiszesz id produktu lub dania, a posilek przypiszesz do zejdzonych i do usera?
komentarz 25 lipca 2019 przez Krst0 Obywatel (1,340 p.)
Hmm, ale dalej w posiłku muszę wymuszać żeby on nie był pusty i coś tam było wybrane spośród produkt/danie. I w jaki sposób to wymusić. Czy po prostu danie/produkt było w tej samej tabeli i łatwo to wymusić czy jednak trzymać to osobno. Ale chyba nie obędzie się bez połączenia tych tabel.
komentarz 25 lipca 2019 przez DragonCoder Nałogowiec (36,500 p.)
Ale zeby rekord nie byl pusty, wymuszasz to po stronie formularza/serwera. Jezeli pole jest puste to nie wysylasz zapytania a uzytkownikowi mowisz: "jesz powietrze, czy moze potrzebne sa okulary" i po sprswie. Wtedy masz pewnosc, ze użytkownik cos tal wpisze, lub wybierze cos jesli bedzie to combobox
komentarz 25 lipca 2019 przez Krst0 Obywatel (1,340 p.)
Nooo, wymuszanie po stronie formularza jest obowiązkowe, ale warto jednak zabezpieczać to po każdej stronie, czy to baza danych, frontend czy backend.
komentarz 26 lipca 2019 przez Krst0 Obywatel (1,340 p.)
Dobra, zdecydowałem się trzymać dania i produkty w tej samej tabeli. Najwyżej później doda się pole w tej tabeli czy dany rekord zawiera przepis czy produkt, żeby łatwiej wyszukiwać później w programie.

1 odpowiedź

0 głosów
odpowiedź 26 lipca 2019 przez Krst0 Obywatel (1,340 p.)
Dobra, chyba pierwszą wersję mam zrobioną. Mógłby ktoś ocenić czy to ma sens? Brakuje jeszcze myślę jednej tabeli i kilku rekordów, ale najpierw chcę wiedzieć czy dobrze myślę o samej podstawie.

Danie (IdDania, Nazwa, Typ - produkt/przepis, Kalorie, Bialko, Weglowodany, Tluszcze, Gramatura - g/ml/szt)

Ilosc (IdSkladnika, IdDania, Ilosc)

Zjedzone (IdZjedzone, Dzien, IdUzytkownika, NazwaPosilku, IdSkladnika)

Uzytkownik (IdUzytkownika, Imie, Nazwisko, Login, Haslo)

Spojrzałem na przykładowe programy dzienniczków diety i doszedłem do kilku wniosków. Widzę to w ten sposób, że w tabeli Danie będę miał wszystkie dania i produkty (Potrawy, Pomidory), bo to tak naprawdę nie ma znaczenia czy to będzie w osobnej tabeli czy w tej samej. Tabela ilość powstała po to, by nie powielać danych. Myślę, że dzięki tabeli Zjedzone jesteśmy w stanie rozdzielić w pełni kto, co, kiedy i na jaki posiłek zjadł.

Oczywiście brakuje jeszcze choćby pola KalorieDziennie, które by trzymało informację ile kalorii dany użytkownik musi zjeść, ale to myślę nie jest ważna funkcjonalność na ten moment.

Proszę o sugestię czy dobrze rozumuję i co mógłbym poprawić.

Podobne pytania

0 głosów
0 odpowiedzi 220 wizyt
pytanie zadane 20 marca 2022 w SQL, bazy danych przez xTMx3 Obywatel (1,560 p.)
0 głosów
1 odpowiedź 621 wizyt
pytanie zadane 14 sierpnia 2019 w SQL, bazy danych przez poldeeek Mądrala (5,980 p.)
0 głosów
0 odpowiedzi 419 wizyt
pytanie zadane 12 kwietnia 2019 w Systemy operacyjne, programy przez Szahid Pasjonat (20,930 p.)

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...