[MySQL Workbench] Zadanie, pomoc

0

Cześć.
Dostałem zadanie z Baz Danych, którego nie umiem zrobić.
Załączam instrukcję:

proszę zaprojektować bazę danych "hodowla".
Baza powinna zawierać co najmniej 30 różnych zwierząt.
Dane o zwierzęta powinny być przechowywane w tabelach.
Oprócz tabeli z identyfikatorem zwierzęcia, nazwą polską, nazwą łacińską, powinna być kolumna odnosząca się do podgatunku.
W tabeli podgatunków powinno być odniesienie do gatunków
w tabeli gatunków odniesienie do tabeli rodzaju
-- rodzaju -- rodziny
rodziny--podrząd
podrząd-rząd
infragromada
podgromafa
gromada
podtyp
typ
królestwo
domena
Czyli mamy 11 tabel :) (w każdej z tabel oprócz identyfikatora, powinna być nazwa polska, nazwa łacińska)

Mam zrobić najpierw schemat UML. Tutaj schemat, który zrobiłem: https://prnt.sc/mkk1gs
Czy jest to dobry schemat? Wyszło mi 14 tabel, po wykonaniu operacji Forward Engineer nie wyrzuca błędów, natomiast przy wyświetleniu wszystkich danych jednego zwierzaka, kolumny z id_podgatunku, id_gatunku etc. są powielone. Czy ktoś mógłby mnie naprowadzić na rozwiązanie tego zadania?

0

Są powielone, ponieważ występują w dwóch tabelach, porządek zaprowadzisz wypisując kolumny w select

select
,id_zwirzęcia
,z.[nazwa polska]
,z.[nazwa łacińska]
,podgatunek.[nazwa polska] Podgatunek
,gatunek.[nazwa polska] Gatunek
from
    zwierzęta z
    inner join podgatunek on z.id_podgatunek=podgatunek.id_podgatunek
    inner join gatunek on podgatunek.id_gatunku=podgatunek.id_gatunek

lub zapisać hierachię w jednej tabeli wykorzystując nested set model lub The Adjacency List Model http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

0

Dziękuję, stosując się do tego co napisałeś próbuję selectem z wybranymi kolumnami. Zmieniłem też spacje w nazwach kolumn, na tym komputerze wywala błąd kiedy próbuję wstawiać nazwy ze spacjami w [ ]..
Komendy na select

 select zwierzęta.id_Zwierzęcia, zwierzęta.nazwa_polska, zwierzęta.nazwa_łacińska, podgatunek.id_podgatunek, podgatunek.Nazwa_polska
from zwierzęta

inner join podgatunek on zwierzęta.id_podgatunek=podgatunek.id_podgatunek
inner join gatunek on podgatunek.id_gatunku=podgatunek.id_gatunku; 

Wszystko fajnie, pokaże mi te rzeczy które faktycznie chcę i ich nie powieli, ale nie wyświela mi tym razem żadnych rekordów o zwierzątkach, które mam w tabeli "Zwierzęta". Przy select * from zwierzęta widać rekordy, co zrobiłem nie tak?

0

Skoro nie pokazuje to znaczy, że nie masz w tabeli zwierzęta id_podgatunek który wystepuje w tabeli podgatunek lub id_gatunku w podgatunku nie wystepuje w tabeli gatunek.
Zmień inner na left i zobaczysz czego brakuje

0

Faktycznie, nie wpisałem id_gatunku, przeoczyłem.

Dziękuję bardzo. Chyba wszystko na razie działa, bo komendą where na left join mogę znaleźć zwierzątka o danej nazwie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1