Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: projekt biblioteki - diagram związków encji
Forum PHP.pl > Forum > Bazy danych
pioter
Mam zamiar zrobić projekt bazy danych biblioteki. Może ktoś z Was w stanie stwierdzić czy ten diagram związków encji jest prawidłowo zrobiony? Poniżej znajduje się link do tego diagramu.
Diagram zwiazków encji



z góry dzięki
thek
Ja zastanawiałbym się nad jednym szczegółem. Książka niekoniecznie musi mieć autora jednego lub kilku.Są książki sygnowane jako: pisane przez zespół pod kierownictwem XXX. Ale to bardziej szczegół niż jakieś wytknięcie. Pewne dane są jednak niepotrzebnie dublowane przez Ciebie. Przykład? Wypożyczenie. Dla niej jest istotne tylko kto, kiedy i co wypożyczył (ewentualnie do kiedy). Wszelkie dane inne są zbędne bo dostarcza je id książki. To nadmiarowe dane jakich powinno się unikać. Inne klasy także je posiadają. Ja bym się zastanawiał nawet nad sensem istnienia klasy Przedłużenie. Przecież to tak naprawdę modyfikacja pola Data Zwrotu jedynie. No chyba że także to musi być ewidencjonowane. Brakuje Ci jednak jednej rzeczy, która w bibliotekach istniejew pewien sposób nieformalnie - zapotrzebowanie. Chodzi o sytuację, gdy dana pozycja jest przez kogoś poszukiwana i tym samym próba przedłużenia tej książki przez posiadającą ją osobę zostanie "wykryta" i bibliotekarz dzięki temu poprosi o zwrot w terminie obecnego posiadacza. Z tego co mi wiadomo wyszukiwanie w księgozbiorze podręcznym także jest ewidencjonowane jako "wypożyczenie". Tutaj więc należy się zastanowić czy aby pola dodatkowego przy Książka nie należy dodać z informacją czy to księgozbiór podręczny czy nie. Wszystko zależy jak bardzo "realny" ma być system przez Ciebie projektowany.

Dlatego głównymi "zarzutami" tego diagramu są nadmiarowe dane i pewne pobieżne potraktowanie tematu biblioteki, którego stopień jest zależny od tego jak bliski realizmowi ma być działający program.
pioter
Super, że ktoś odpowiedział na problem. Jeśli chodzi o nadmiarowość np. w klasie wypożyczenie to początkowo też uważałem, że dodatkowe klucze obce (idFormat, idDziedzina) są zbędne. Jednak podczas projektowania program sam tak narzucił, dodając te klucze obce co spowodowało, że zwątpiłem J. Pozostawiłem, więc tak jak program narzucił. Teraz dokonałem kilku zmian i myślę, że chyba teraz jest dobrze ?

Co do klasy przedłużenie to masz racje. Tu głównie chodziło mi o to żeby ograniczyć ilość przedłużeń dla wypożyczonej książki, więc teraz dodałem kolumnę w klasie wypożyczenie „przedluz” i pozbyłem się klasy przedłużenie. Ta wskazówka z kolumną księgozbiór podręczny też się przyda smile.gif.


Cytat(thek @ 10.10.2009, 21:57:34 ) *
... Brakuje Ci jednak jednej rzeczy, która w bibliotekach istniejew pewien sposób nieformalnie - zapotrzebowanie. Chodzi o sytuację, gdy dana pozycja jest przez kogoś poszukiwana i tym samym próba przedłużenia tej książki przez posiadającą ją osobę zostanie "wykryta" i bibliotekarz dzięki temu poprosi o zwrot w terminie obecnego posiadacza. ...


Tutaj chciałem to tak rozwiązać ze wraz z data zwrotu dostaje użytkownik maila na pocztę o treści np.” ze dzisiaj mija termin oddania książki. Nie wiem czy to akurat jest dobre rozwiązanie? Dodatkowo jeśli ktoś szuka danej książki to na podstawie kolumny stan w klasie wypożyczenie będzie informacja czy książka jest wypożyczona, zarezerwowana, dostępna.

Po naniesionych poprawkach wygląda to tak:
thek
Ja miałem na myśli dodatkową klasę lub pole w Książka (wypożyczenie w sumie też może być). Bibliotekarz oznaczałby dany tytuł jako poszukiwany i program w zależności od stopnia dostępności albo by umożliwiał wypożyczenie (książka na stanie) albo blokował wszystkim możliwość przedłużenia. Tutaj właśnie uwidacznia się problem na jaki pewnie nie zwróciłeś uwagi. Co w momencie, gdy ktoś już dostanie rezerwowany tytuł? Powinno to odblokować wszystkie pozostałe. Tutaj należy więc zwrócić uwagę na jedno pytanie... Skąd wiesz co odblokować, zablokować i kiedy? Jeśli id każdej książki jest inne (nawet tej samej, ale po prostu inny egzemplarz) to jak zablokować za jednym zamachem tę książkę skoro ma ona różne id? Zauważ też, że jeden tytuł może być w kilku wydawnictwach ale pod różnymi autorami, choćby "Władca pierścieni" w różnych przekładach winksmiley.jpg A może rozwiązać to inaczej? Pole id jest jednoznaczne i książka o określonych danych jest zawsze tym samym id, ale ma jeszcze jedno pole: dostępna_ilość. Przy stanie 0 i próbie wypożyczenia automatyczne blokuje dane id książki dla przedłużeń, ale w momencie gdy choć jedna wróci, sprawdza czy zapotrzebowanie na nią po zwrocie jednego egzemplarza pozwoli innym korzystać dalej, czy może jeszcze ktoś inny jej szukał i książka nadal ma być zablokowana. W momencie gdy brak zapotrzebowania na książkę o danym id (lub tytule) blokowanie jest zdejmowane. Drugi przypadek jest moim zdaniem lepszy, gdyż zdejmuje konieczność poznana wszystkich id danego tytułu i łatwiejsze programowanie rezerwacji dla określonego tytułu. W sytuacji jaką nakreśliłem w przypadku "Władcy pierścieni" jednak nie da on nam wiele. Tutaj konieczność sprawdzenia po tytule narzuca nam niejako wariant pierwszy i trudniejsze nieznacznie oprogramowanie przypadku.

EDIT: dla takiego podejścia do sprawy dobrze jest sobie zrobić diagram przypadków użycia (case diagram) i nie ograniczać się do diagramu klas jedynie. UML jest znacznie szerszy i diagramów oferuje kilkanaście rodzajów. Nie tylko jeden czy dwa. Przypadki pozwalają na określenie ról i uprawnień użytkowników w systemie, a także konieczność implementacji podstawowych metod (funkcji).
pioter
Ja z góry sobie narzuciłem, że każda książka będzie miała własny id_ksiazka. W ogóle nie pomyślałem o tym, że dana książka jest w kilku egzemplarzach:). No to dzisiaj będę myślał nad tym jak to dobrze rozwiązać. Dzięki za wskazówki thek
thek
No cóż... Jeszcze kilka lat temu często bywałem w bibliotece w swoim rodzinnym mieście (teraz w innym mieszkam). Poza tym sąsiadka była bibliotekarką to znam trochę to od kuchni.

Zastanawiałbym się też nad systemem tagów opisujących książkę. Czasem czytelnik nie wie czego dokładnie szuka bo zapomniał tytuł i nazwisko autora lub coś w tym stylu. Jeśli opisać książkę znacznikami, gdzie byłyby imię, nazwisko, miejsce akcji, zagadnienie, bohaterowie czy tego typu słowa kluczowe związane z pozycją książkową to można by się pokusić o wyświetlanie pod kątem trafności jak choćby: horror, dziecko, szatan, dałoby w wyniku zapewne wysoko zarówno "Omen" jak i "Dziecko Rosemary", choć przecież tylko to drugie ma słowo "dziecko" w tytule. Bo oba mogły by śmiało mieć przynajmniej 2 spośród wymienionych, a więc wysoki poziom trafności słów kluczowych. Sam nieraz idąc do biblioteki nie wiedziałem co wezmę tylko pytałem co mają nowego w takiej a takiej tematyce lub związane z konkretnym zagadnieniem, które normalnie musiałbym wyszukiwać poprzez przeglądanie każdej pozycji w katalogu bibliotecznym w określonej kategorii lub dziale. O ile bym wiedział w jakim szukać. O ile "schemat elektryczny fiata 126p" znajdziemy zapewne w Technika, to czy mamy grzebać w dziale motoryzacja czy może elektryka? A przecież tu jest to proste bo wiemy czego szukamy. Ale pomyśl jak szukać czegoś w stylu: "Kumpel polecił mi kryminał. Nie pamięta autora, ale wie, że bohaterowie nazywali się X, Y i Z" smile.gif Takie wyszukiwanie zwróci zapewne książki z pewnym prawdopodobieństwem trafności. I myślę, że całkiem dużym.
point
troche OT. pioter mozesz napisac w jakim programie stworzyles ten diagram relacji?

chyba znalazlem. to jest MySQL Workbench?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.