No i własnie w tym jest cały ambaras, że przechowywanie informacji o stypendiach w tabeli o polach student_id(fk), kwota jest niemożliwe, bo wszystko co się da zrobić to połączyć tabele 1-1 a pytanie jest o możliwość przechowywania kilku stypendiów dla każdego studenta 1-n czyli du*a, bo na tabeli stypendia nie da się założyć klucza głównego - chyba, że pk(student_id, kwota), ale to tak głupie, że aż śmieszne.
Eeee? Masz studentów S1, S2 i stypendia S1A, S1B, S1C, S2Q, złączenie tych tabel bezpośrednie (aby uzyskać tylko tych którzy mają przynajmniej jedno stypendium) lub przez left join da wynik S1, (A + B + C) oraz S2, (Q). W tym przypadku wyciągnięcie samej sumy (czyli powyższe zapytanie) nie wymaga posiadania identyfikatora w tej tabeli - łączysz po identyfikatorze studenta, identyfikator stypendium jest zbędny. Inna sprawa dalsze zarządzanie tym, ale potrafię sobie wyobrazić przypadek, że miałoby to uzasadnienie - kasujesz wszystkie stypendia dla studenta i dodajesz je od nowa - teoretycznie klucz główny nie jest wymagany. Chociaż tworzenie tabeli bez identyfikatora jak dla mnie jest dziwne (ale coś tam jest o "bez ingerencji", itp.). Jednak powtórzę jeszcze raz, do samego wyciągnięcia tych danych klucz na tabeli stypendia jest nieistotny.
(...) Gdybym mógł dorzucić dodatkową kolumnę (np id_stypendium) sprawa była by rozwiązana (...)
Może ja po prostu nie rozumiem pytania, ale odpowiedź mi, co by ci to dało???
(...) trudne pytanie. Nie było w ogólę założenia odnośnie tego czy tabela zawiera wszystkich stydentów, czy tylko tych ze stypendiami.
Powiedzmy, że zawiera tylko tych ze stypendiami (skoro nie ma mowy o tym w treści zadania, myślę że można po swojemu zinterpretować 🙂 (...)
Nie o tym mówiłem
🙂 . To co masz w bazie jest nieistotne, rozważałem tylko to co chcesz uzyskać. Stosując bezpośrednie złączenie uzyskasz listę studentów którzy mają jakieś stypendium (jest co najmniej jeden rekord w tej tabeli), ci bez stypendium się nie pokażą. Chcąc jednak mieć listę wszystkich studentów bez względu na to czy mają czy nie stypendia używasz LEFT JOINa.
(...) Aby sobie życie ułatwić, stworzyłem sobie te bazy. Przy moim pierwszym (własnym) zapytaniu był takowy problem, że w tabeli stypendium miałem założony primary_key, i nie dało się wprowadzić dwa razy tego samego ID (co jest oczywiste). Zaznaczę, żę działam na MySQL (jakkolwiek by to nie było za późno
😃) (...)
Mówiąc ID masz na myśli unikalny identyfikator rekordu stypendium, a nie odwołanie do tabeli studentów, prawda? Jednak jw. dla samego wyniku nieistotne.
(...) Wracając do tabeli stypendium - chcąc umożliwić wprowadzanie kilkukrotne tego samego ID studenta, co muszę zrobić ? (...)
Nic, kompletne nic. Przykładowo, puszczasz:
INSERT INTO stypendium (student_id, kwota) VALUES(1, 100);
INSERT INTO stypendium (student_id, kwota) VALUES(1, 200);
Masz dwa stypendia dla studenta o ID = 1. No właśnie tak patrzę jak dumacie i nie bardzo potrafię zrozumieć gdzie widzicie problem 🙂 Powyższe zapytania zwrócą ci wartość 300 dla tego studenta.
(...) Czyli tylko i wyłącznie zostaje możliwość dołożenia dodatkowej kolumny. Niech tak będzie, będę walczył z wykładowcą
😛
Jeśli to tylko jakieś zadanie to głębszego sensu nie ma co szukać. Tj. o ile sam uważam, że w zastosowaniu "produkcyjnym" uzasadnione byłoby dodanie unikalnego identyfikatora w tabeli stypendia po to, żeby robić np. edycje lub usunąć wybrane stypendium, to tutaj jest to zbędne. Zadanie jak zadanie, sztuka dla sztuki.
---------- Post dołączono o 20:43 ---------- Poprzedni post napisano o 20:42 ----------
Możesz też drugi raz wprowadzić tego samego studenta (wiem, wiem łamię wszelkie zasady, ale jeśli to zadanie może trzeba myśleć niekonwencjonalnie) i mu przypisać drugie stypendium. Obaj będą mieli takie same dane osobowe to ich sobie połączysz przy zwracaniu wyników.
Sorry, że skrytykuję, ale beznadziejne rozwiązanie
🙂
Co wy macie za problem z tym łączeniem dwóch tabel...