projekt bazy danych Wypożyczalnia

1

Witam,
Zacząłem w celach edukacyjnych robić projekt "Wypożyczalnia sprzętu sportowego".
Chcę Was prosić o pomoc oraz wskazówki w kwestii stworzenia relacyjnej bazy danych.
W chwili obecnej jej projekt wygląda następująco:
user image

-Jeden klient może dokonać wielu wypożyczen nie koniecznie w tym samym czasie.
-Jeden sprzęt może być wypożyczony wielokrotnie.
-Jeden pracownik może obsłużyć wiele wypożyczeń.
-Sprzęt może być wypożyczony/oddany wielokrotnie w różnych miejscach.

Coś powinienem zmienić, dodać a może iść w inna stronę? Proszę o skomentowanie mojego wstępnego projektu bazy.

Czekam na wpisy...
Pozdrawiam

0

Baza nie wygląda źle. Można zastosować parę poprawek.

Widać że coś tak kumasz z baz danych, na początek wystarczy. Skoro robisz to w celach edukacyjnych to jedna z lepszych metod nauki jest taka aby zrobić bazę taką jaka wydaje nam się że jest dobra następnie przy klepaniu kodu php, java czy w czym tam to piszesz, zweryfikujesz sam co Ci potrzebne, co jest zbędne a czego jeszcze brakuje. Uwierz mi to dobry sposób.

0

Na miasta przydałaby się oddzielna tabela. Na kody pocztowe i ulice zresztą też. Niekiedy warto wydzielić dane adresowe do oddzielnej tabeli. (U Ciebie te dane są w dwóch tabelach, co nie zawsze jest dobre.)
Numer domu lub mieszkania, numer telefonu, NIP - to są napisy, więc powinny być przechowywane w typie znakowym, na pewno nie integer.
Pensja nie musi być całkowita, więc też nie powinna być typu integer.

1
  1. Nie rozumiem do czego są "miejsca"? Adres wypożyczalni?
    Jeśli to pierwsze to pracownik chyba niekoniecznie pracuje w jednej wypożyczalni.

  2. Brakuje słownika typów sprzętu

  3. Kwoty mogą być przechowywane jako INTEGER lub DECIMAL / NUMERIC. Jeśli INTEGER to będziesz musiał pamiętać o skalowaniu przy zapisie i odczycie.

  4. jest literówka w nazwie pola Miejsca.mistato

  5. Podział adresu na "ulica / nr" bardzo szybko będzie niewystarczający. Przy dużych bazach finansowych stosuje się albo jedno pole, albo wiele pól: prefiks (ul/al/pl/itd), ulica, nr budynku, nr klatki, nr mieszkania. Wersja z jednym polem ("ulica") jest wygodniejsza jeśli nie musisz tej części adresu analizować w systemie.

  6. Brakuje nagłówka wypożyczenia. Klient nie wypożycza osobno nart, kijków, googli, kasku i nie płaci za to za każdym razem. Coś w rodzaju "Wypozyczenia_Naglowek" (jesli masz stosować polskie nazwy).

0

Witajcie,
Po poprawkach schemat wygląda następująco:

user image

Czytając Wasze opinie zmieniłem trochę koncepcie mojej bazy dodając możliwość rezerwacji sprzętu oraz baza ma obsługiwać jedną placówkę wypożyczalni a nie jak wcześniej kilka gdzie klient mógł oddawać sprzęt w dowolnej.

Mam jednak problem z tym o czym pisał vpiotr

"6) Brakuje nagłówka wypożyczenia.** Klient nie wypożycza osobno nart, kijków, googli, kasku i nie płaci za to za każdym razem. **Coś w rodzaju "Wypozyczenia_Naglowek" (jesli masz stosować polskie nazwy)."

W jaki sposób mam zrealizować to aby klient w jednej transakcji (wypożyczenie) wypożyczał razem np,. narty, kijki, google i płacił za to wspólnie.
Brak mi wyobrażenia jak to zrobić ;/ Proszę o pomoc w tej kwestii.

1

To trochę zależy od tego, co masz w tabeli sprzęt. Ze względu na brak kolumny "ilość" wnioskuję, że w tabeli sprzet masz konkretne przedmioty, a nie ich "specyfikację" i ilość. Czyli jeśli masz 5 par nart danej marki (o tych samych parametrach) to w tabeli sprzęt masz 5 takich samych rekordów?
Jeśli tak, to w tabeli Sprzęt możesz dodać kolumnę wypozyczenie_id, a z tabeli "wypożyczenia" usunąć "sprzęt_id" - masz wtedy relację jeden do wielu - jedno wypozyczenie może mieć wiele sprzętów, ale jeden sprzęt należy tylko do jednego wypożyczenia. W ten sposób Klient "jednym wypożyczeniem ma wypożyczone wiele sprzętów". Przy czym kolumna wypozyczenie_id mogłaby przyjmować wartość NULL, co wskazywałoby na to, że sprzęt nie jest obecnie wypożyczony (choć nie mam pewności czy akurat to jest dobrym pomysłem).

Gdyby natomiast sprzet miał jednak reprezentować pewien opis danego elementu i posiada kolumnę ilość (5 takich samych par nart masz opisane jednym rekordem z kolumną ilość = 5) to potrzebowałbyś pośredniej, dodatkowej tabeli "Wypozyczenie_sprzet" (relacja wiele do wielu), która zawierałaby id sprzetu i id wypozyczenia.

0

Na tyle ile wiedza pozwalała dostosowałem się do rad powyżej, czy taka wersja jest już poprawna?:
Baza po poprawkach: http://img560.imageshack.us/img560/1381/wypozyczalnia5.png

Mam pewne wątpliwości co do poprawnego działania rezerwacji, zrobiłem ją w taki sposób ale nie jestem pewny czy tak będzie poprawnie bo jeśli zarezerwuje np. narty to ma się ilość dostępnych sztuk zmniejszyć czy dodać pole status ale wtedy każdy sprzęt musiał by być w osobnych rekordach a tak będzie chyba źle bo mój wykładowca naciska na to aby dane się nie powtarzały.

0

Chciałbym podpiąć się pod temat i zapytać o jedną kwestie...

somekind napisał(a):

Numer domu lub mieszkania, numer telefonu, NIP - to są napisy, więc powinny być przechowywane w typie znakowym, na pewno nie integer.

NIP to teoretycznie same cyfry (no chyba, że się napisze to z miślnikami). A PESEL jak powinien być zapisywany w bazie? varchar(11) czy integer(11) (i dlaczego właśnie tak.. mniejsze zużycie pamięci / lepsza wydajność ?)

0

user image

Czy ta baza jest już poprawnie zaprojektowana?

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