1. Masz niepotrzebne dodatkowe pola jako klucze obce. Z rysunku wynika, że na przykład w tabeli Ksiazka IDA powinno być kluczem obcym powiązanym z kluczem głównym IDA z tabeli Autor. Zamiast tego masz IDA w tabeli Ksiazka jako zwykłe pole (nie wiadomo do czego) oraz jeszcze Autor_IDA jako klucz obcy. Podobnie z innymi kluczami obcymi. Wprawdzie rysunek nie określa precyzyjnie jak te klucze obce mają być nazwane, bo są tam puste miejsca, ale zdrowy rozsądek podpowiada że powinny być nazwane tak samo jak odpowiadające im klucze główne z innych tabel. Ponadto w tabeli Wypozyczenia brakuje klucza obcego do tabeli Ksiazka, IDK powinien być czerwony.
2. O ile nie przewidujemy wartości NULL dla danego pola to powinny być zdefiniowane jako NOT NULL (wypełniona ikonka). Jedyne pole w całej bazie które powinno mieć możliwość wstawiania NULL to DataZwrotu, bo rozumiem że książka jest wypożyczona gdy istnieje dla niej wpis w tabeli Wypozyczenia i DataZwrotu jest NULL, a w momencie zwrotu pole DataZwrotu jest uzupełniane bieżącą datą.
3. Widząc pole Sygnatura INT(255) można się tylko uśmiechnąć. INT z pewnością nie udźwignie liczby z 255 cyframi.
http://dev.mysql.com/doc/refman/5.7/en/num...attributes.html4. Do pobierania wartości o które pytasz służą złączenia.
Przykładowo by pobrać nazwy książek wraz z ich autorami użylibyśmy (już po poprawieniu kluczy o których mowa wyżej, czyli IDA w tabeli Ksiazka jest kluczem obcym do IDA w tabeli Autor ):
SELECT Ksiazka.Tytul, Autor.Imie, Autor.Nazwisko
FROM Ksiazka JOIN Autor
ON Ksiazka.IDA = Autor.IDA
Do zliczania w obrębie jednej tabeli używamy przykładowo dla pracowników:
SELECT Wypozyczenia.IDP, count(*) AS Ile_wypozyczen
FROM Wypozyczenia
GROUP BY Wypozyczenia.IDP
ORDER BY Ile_wypozyczen DESC
Oczywiście jeśli dany pracownik nic nie wypożyczył to wpisu z jego IDP w tabeli Wypozyczenia nie będzie, musimy o tym pomyśleć łącząc to z tabelą Pracownik, bo w wyzwaniu nr 4 zapewne chodzi o listę wszystkich pracowników i dla tych, którzy nic nie wypożyczyli będziemy musieli wstawić 0.
Tak będzie wyglądać pełne rozwiązanie pkt 4:
SELECT p.Imie, p.Nazwisko, COALESCE( sumy.Ile_wypozyczen, 0 ) AS Wypozyczone_ksiazki
FROM
Pracownik p
LEFT JOIN
( SELECT w.IDP, count(*) AS Ile_wypozyczen
FROM Wypozyczenia w
GROUP BY w.IDP ) sumy
ON p.IDP=sumy.IDP
ORDER BY Wypozyczone_ksiazki DESC, p.Nazwisko ASC
Jeśli przeanalizujesz i zrozumiesz to zapytanie (nie "te zapytanie", podobnie jak "to zadanie", nie "te zadanie"), to reszta nie powinna sprawiać trudności.