Baza danych wypożyczalni filmów dvd

0

Witam,
Jestem początkującym programistą baz danych i dopiero się uczę. Mam za zadanie w formie ćwiczeniowej wykonanie bazy danych dla wypożyczalni filmów dvd. Ale nie wiem, czy jest to dobrze i gdyby ktoś mógł dać mi jakąś wskazówkę byłbym bardzo wdzięczny. Wiem, że połączenie "WYPOŻYCZENIA" i "PARAGONU" (ID_Paragonu) jest źle tak samo jak "REZERWACJI" i "FILMU" (ID_Rezerwacji).
Ale nie mam pojęcia, jak rozwiązać ten problem.

user image

0

Wiem ze się czepiam, ale mógłbyś następnym razem zrobić ten diagram w jakimś sensownym programie (MySQL Workbench albo DB Designer, oba darmowe), który generuje znacznie ładniejsze diagramy? ;)
I najlepiej tak żeby te łączenia nie zachodziły na siebie, żeby było czytelniej ;)
tutaj masz przykład czytelniejszego diagramu (chociaż kurze łapki się tam troche popsuły :P)
http://img214.imageshack.us/img214/8091/bazaf.png

Nazywanie tabel "Rejestr" i "Rejestr2" to terroryzm. Wymyśl sensowniejsze nazwy dla tych tabel łącznikowych ;)
Czy ja dobrze widze że Rejest jest dwa razy połączony z Wypożyczeniem? o_O
Paragon i Wypożyczenie to chyba relacja 1:1 ? Chyba ze ktoś płaci na raty...

0

@Shalom

nazwywanie tabel w stylu UslugiZamowienia to tez nie najlepsza metoda, tym bardziej ze nie trzymasz nawet tu normy bo tabela UslugiZamowienia powinna sie nazywac UslugiOfertZamowienia :) itd.

Swoja droga CZEMU ludzie daja projekty z przecinajacymi sie relacjami szczegolnie, ze wystarcza dwa ruchy myszka aby sie tego pozbyc !! A jak to zwieksza czytelnosc.

0

Jakie informacje ma zawierać Tabela rezerwacja? jest tam pole data oddania ktore bardzie pasuje do wypożyczenia. Rezerwacja powinna definiować okres rezerwacji.

Tabela Film nie powinna mieć kolumny ID_Rezerwacji. Rezerwacji do jednego filmu może być wiele.
W tabeli Rezerwacja powinien byc klucz obcy do ID_Film.

Wypożyczalnie maja zazwyczaj po kilka egzemplarzy tego samego filmu a twoja baza nie pozwala na zarządzanie ilością. Jeżeli w założeniach masz inaczej to OK jeżeli jednak przeiwdywałeś kilka wpisów do tabeli z filmami to jest to redundancja danych co nie powinno mieć miejsca w akademickich warunkach :D.

0

Tabele rejestr, rejestr2 i paragon są niepotrzebne. Informacje które prawdopodobnie chcesz w nich przechowywać można otrzymać przez zapytania sql z pozostałych tabel.

0

@reichel nie do końca, bo te nazwy nie określają które tabele są z daną tabelą połączone, tylko określają znaczenie ;) UsługiZamowienia to jest po prostu tabela zawierająca uslugi przypisane do danego zamówienia. Chociaż faktycznie można mylnie odnieść takie wrażenie jakie odniosłeś ;)

@Mariusz Jędrzejowski ciekawy pomysł, ale jak bez tych tabel łącznikowych chcesz uzyskać relację n:m ?

0
Shalom napisał(a)

@Mariusz Jędrzejowski ciekawy pomysł, ale jak bez tych tabel łącznikowych chcesz uzyskać relację n:m ?

Serio nie wiesz jak to zrobić czy po prostu sprawdzasz czy on wie?

0

Gdybym wiedział to bym nie pytał. Bardzo chętnie się czegoś nauczę, a to jest ciekawe w jaki sposób chcecie to zrobić. Jedyne co mi tutaj przychodzi do głowy to zrobienie dodatkowego pola w stylu "numer pozycji rezerwacji/wypożyczenia" i zrobienie klucza głównego tabeli wypożyczenia złożonego z id_wypożyczenia, id_filmu, id_pozycji (i analogicznie w rezerwacje). Jeśli mówicie o takim rozwiązaniu, to w sumie chętnie poczytałbym argumentów za i przeciw :)
Tym bardziej ze pojawiają się dodatkowe dane w tabelach łącznikowych (przynajmniej w Rejestr2, bo ta cena z Rejestr powinna raczej być przypisana do Filmu) które nie bardzo jest gdzie indziej wcisnąć.
Usunięcie tabeli Paragon jest oczywiste (o czym pisalem wyzej, bo to 1:1).

0

Dziękuję za tak liczne zainteresowania tym tematem :D

Jest to "surowy" obraz, który już wielokrotnie był poprawiany. Głównie chodzi o to, żeby "działało".

Wprowadziłem kilka najważniejszych zmian ale wykładowca znów odesłał z zaznaczeniem błędów. Ma to do siebie, że wskaże błąd ale nie powie jak go poprawić.
Tabela "paragon" została dodana na życzenie wykładowcy, który stwierdził, że jest ona potrzebna...
Może wrzucę poprawiony obraz z wskazanymi błędami

user image

0

Z tego wynika ze prowadzący sugeruje że jeden paragon może się odnosić do wielu wypożyczeń i to jest logiczne, bo u ciebie "wypożyczenie" odnosi się tylko do jednego filmu.

0

Pola z tabel rejestr można z powodzeniem przerzucić do tabel wypożyczenia i rezerwacje te tabele są nie potrzebne. Będzie trochę więcej rekordów w tabelach wypożyczenia i rezerwacje, ale z ich wstawianiem nie będzie problemu bo wszystkie dane są dostępne w czasie czynności wypożyczania i wstawiania. Należy dążyć w miarę możliwości do zmniejszania ilości tabel dla uproszczenia pracy.

0

Skąd w Rezerwacji i Wypożyczeniu pola ID_Filmu? I po co powiązanie między tymi tabelami?

Shalom napisał(a)

Gdybym wiedział to bym nie pytał. Bardzo chętnie się czegoś nauczę, a to jest ciekawe w jaki sposób chcecie to zrobić.

Tworząc kopie tabel. ;)
Ale jak widzę @rasert ma ciekawsze pomysły...

rasert napisał(a)

Należy dążyć w miarę możliwości do zmniejszania ilości tabel dla uproszczenia pracy.

To najlepiej zrobić jedną tabelę (id, typ, klucz, wartość) na całą bazę. ;]
Pokaż zatem jak zrealizować relację n:n bez tabeli pomocniczej. Podejrzewam, że od razu dostaniesz doktorat i pracę w Oracle.

0

Też się dopiero uczę. :)
Relacje paragonu i wypożyczenia zmieniłem już raz na taką jak mówisz Shalom. Okazało się, że i tak źle... Może przedstawię teraz jak miałem kiedyś (większosć rzeczy jest już zmieniona). Chodzi mi tylko o relacje Wypożyczenie i paragon.

user image

0

To może po prostu spytaj prowadzącego jak on rozumie ten Paragon? Tzn czy przewiduje sytuację ze na jednym paragonie jest wiele wypożyczeń, czy tez odwrotnie -> ktoś moze płacić w "ratach" i jedno wypożyczenie może być zapłacone za pomocą wielu paragonów.

0

I tu jest pies pogrzebany bo nie mam możliwości "spytania" się prowadzącego "co jest źle", tylko "czy jest źle". Jego maile są krótke i niezwykle treściwe:

"Witam,
Poprawa

Pozdrawiam
xxx yyy"

Mu chyba nie chodzi o zwiazek jeden do wielu ale o samą relację... Ale nie widzę możliwości połączenia Paragonu z inną tabelą :/
A paragonu usunąć nie mogę bo sam jeszcze z początku poinstruował, że musi on być.

0

A to już nie można iść na konsultacje? o_O
My ci nie możemy pomóc, bo po prostu nie wiemy jak prowadzący to sobie wyobraża (bo to jest problem z dziedziny problemu, a nie z baz danych jako takich).

0

@Kuba1989 - dlaczego na Twoim diagramie jeden gatunek może mieć tylko jeden film? Przecież na świecie jest wiele filmów jednego gatunku.
Po co Ci bezpośrednie powiązanie Rejestracji z Filmem? Przecież masz już powiązanie przez swoją Rejestr2 i innego mieć nie możesz.
Z podobnego powodu nie jest Ci potrzebne ID_Filmu w Wypożyczeniu.
Zmień nazwę Rejestr na FilmyWypożyczenia a Rejestr2 na FilmyRejestracje, bo jak na razie, to sam chyba nie rozumiesz do czego masz te tabele. :/

A problem z Paragonem i Wypożyczeniem jest chyba jasny. Paragon dotyczy Wypożyczenia, więc na Paragonie powinno być ID_Wypożyczenia.

0

Gdyby autor wykorzystał któreś z narzędzi które podałem wyżej to takie rzeczy jak klucze obce same by się do tabel dopisywały po określeniu odpowiedniej relacji...

0

No właśnie prowadzący zajęcia jest trochę... Nielubiany przez studentów. Bo jego idęą jest to, że ona nas nie ma nauczyć. On ma powiedzieć co robimy źle a nauczyć się mamy sami.

Somekind. Większosć rzeczy o których powiedziałeś już zrobiłem. Ten ostatni jpg. jest z prawie samego początku, kiedy dopiero zaczynałem.

I chyba faktycznie powinienem pokombinować nad ID_Wypożyczenia na paragonie.

0

@Kuba1989 tym się wlaśnie róznią studia od podstawówki ;) Witamy w prawdziwym życiu. Jak potem będziesz musiał w pracy zaprojektować bazę danych to nikt ci nawet tego że coś jest źle może nie powiedzieć ;)
Na prawdę polecam ci zainteresować się narzędziami o których pisałem. Ułatwisz sobie życie ;)

0

W tym wypadku to nawet nie da się zastosować tych tabel rejestr. Upieranie się przy trzeciej postaci normalnej przeczy logice działania wypożyczalni! Niestety takich szczegółów często nie uczą w szkole. Przecież każdy film może mieć inną datę zwrotu. Wypożyczający może jeden film (z grupy razem wypożyczonych) przetrzymać po terminie krócej a drugi film dłużej. Będzie miał więc inną dopłatę. Tak jak jest teraz, to data zwrotu jest wspólna dla grupy wypożyczonych filmów.

Zrób nowy indeks główny autoincrement w wypożyczeniach, przerzuć odpowiednie pola z tabeli rejestr do tabeli wypożyczenia i zapisuj w rekordach tabeli wypożyczenia każdy film osobno. W razie jakiejś potrzeby zawsze będzie można znaleźć razem wypożyczone filmy po wspólnym identyfikatorze wypożyczenia (on się będzie powtarzał w tabeli wypożyczenia więc nie może być już kluczem głównym). :>

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