![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 22.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
Jako początkujący w dziedzinie baz danych próbuje okiełznać MySQL Workbench. Mam za zadanie stworzyć bazę danych taką jak na rysunku, który dodatkowo umieściłem go koło mojego diagramu tejże bazy danych.
(IMG:http://i67.tinypic.com/105r8jq.png) Dodatkowo lista "wyzwań" jeśli chodzi o kwerendy.
Niemniej jednak nie wiem czy poprawnie wykonałem te zadanie, dlatego proszę o Waszą konsultację. Największe problemy sprawia mi zrozumienie jakiego rodzaju zapytania mam użyć aby zamiast kluczy obcych pobrać z bazy korespondującą wartość. Efektem końcowym ma być tabela będąca połączeniem wszystkich tabel, jak to zrobić, zakładając oczywiście że poprawnie wykonałem relacje między nimi. Ten post edytował Delleg 17.01.2017, 01:09:09 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
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.html 4. 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 ):
Do zliczania w obrębie jednej tabeli używamy przykładowo dla pracowników:
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:
Jeśli przeanalizujesz i zrozumiesz to zapytanie (nie "te zapytanie", podobnie jak "to zadanie", nie "te zadanie"), to reszta nie powinna sprawiać trudności. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
W tabeli wypożyczenia - czy data, godzina, dataZwrotu nie powinny być innego typu niż VARCHAR?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Czepiając się już:
Cytat 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.html Owszem można się uśmiechnąć bo komentujesz coś o czym nie masz pojęcia. Liczba podana w nawiasie mówi o dopełnieniu 0 ( atrybut ZERO FILL). I owszem zadziała tak jak ma zadziałać. Tak więc (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Czepiając się już: Owszem można się uśmiechnąć bo komentujesz coś o czym nie masz pojęcia. Liczba podana w nawiasie mówi o dopełnieniu 0 ( atrybut ZERO FILL). I owszem zadziała tak jak ma zadziałać. Tak więc (IMG:style_emoticons/default/wink.gif) Przecież nawet cytujesz podlinkowany manual, w którym czarno na białym jest że liczba w nawiasie dla typów numerycznych całkowitych to ilość cyfr, a ZEROFILL dopiero po dodaniu tego słowa jawnie jako dodatkowego atrybutu dopełnia zerami. I nawet gdyby był u autora wątku ten ZEROFILL to niby tak miało być? Serio? Sygnatura z ponad 200 zerami na początku i tylko 11 ostatnich coś może znaczyć, bo INT i tak więcej nie zmieści? I może jeszcze to samo dla CenaZakupu? Chcesz się doczepić, ok, ale akurat tutaj nie wyszło. Może coś konstruktywnego autorowi napisz? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 15:08 |