Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kino - projekt bazy danych
Forum PHP.pl > Forum > Bazy danych > MySQL
spiewak69
Witam
Zaczynam swoją naukę z bazami danych ( MySQL ) i PHP. Na studiach mam do wykonania aplikacje internetowej rezerwacji biletów.
Znam podstawy MySQL i PHP , lecz nie wiem czy dobrze zaprojektuje swoją bazę żeby była optymalna , nie było zbędnych tabel lub zbyt długich zapytań, lub też niepotrzebnych relacji .
Zrobiłem taki " wstępny ' projekt jednak już wiem że nie bardzo jest .
Proszę więc o pomoc.

Nie wiem na jakiej zasadzie zrealizować seans, repertuar bieżącego dnia, jak rozmieścić tabele i relacje między nimi .
Baza nie ma zawierać danych klienta - bez logowania tylko wpisywanie po prostu imienia i nazwiska + telefon i email podczas zakupu biletu.

Nie wiem jak wziąć się za daty oraz godziny wyświetlania danego filmu / seansu . Czy robić osobne tabele ... Na godziny chyba by mogła być tabela i np stałe godziny seansów.
Podobnie z miejscem zarezerwowanym - zrobić tabelę ( ID statusu, ID miejsca, status ) czy jakoś tak i zero jedynkowo ? miejsce zajęte/wolne ? Ale co wtedy z datą żeby się zwalniało po seansie żeby nie było zajęte na następny film .



Proszę o pomysły , sugestie... Poprawienie schematu lub przedstawienie całej bazy jakby mogła wyglądać .
Ghost_78
Jeżeli chodzi o seans, rezerwacje itp to ja bym to zrobił tak:

SEANS:
- id
- film_id
- datetime

REZERWACJA:
- id
- seans_id
- sala_id
- rzad
- miejsce
- person_id

Person, movie, movie_type bym zostawił tak jak jest ale usunąłbym data, time, miejsce, rzad.

Mam nadzieje, że pomoże smile.gif
ghost1511
Cytat(spiewak69 @ 11.04.2014, 00:05:42 ) *
Nie wiem na jakiej zasadzie zrealizować seans, repertuar bieżącego dnia, jak rozmieścić tabele i relacje między nimi .
Baza nie ma zawierać danych klienta - bez logowania tylko wpisywanie po prostu imienia i nazwiska + telefon i email podczas zakupu biletu.


Tak jak napisał Ghost_78 musisz rozdzielić rezerwację od seansu. Tak jak w życiu Rezerwację masz na Seans więc są to dwie osobne tabele.
Dane klienta jednak przechowujesz w tabeli Person więc jest ok. wystarczy podać np email aby wyszukać osobę.

Cytat(spiewak69 @ 11.04.2014, 00:05:42 ) *
Nie wiem jak wziąć się za daty oraz godziny wyświetlania danego filmu / seansu . Czy robić osobne tabele ... Na godziny chyba by mogła być tabela i np stałe godziny seansów.
Podobnie z miejscem zarezerwowanym - zrobić tabelę ( ID statusu, ID miejsca, status ) czy jakoś tak i zero jedynkowo ? miejsce zajęte/wolne ? Ale co wtedy z datą żeby się zwalniało po seansie żeby nie było zajęte na następny film .

Osobna tabela na godziny wydaje się złym pomysłem lepiej do seansu dodać pełną datę wraz z godziną rozpoczęcia, id filmu. Wtedy rezerwację robisz na id_seansu i miejsce. Dzięki temu nie musisz pamiętać o statusie. Jeżeli rekord jest w bazie to jest zarezerwowane a jeżeli nie ma to można dokonać rezerwacji.

--edit
1. Osobiście datę i godzinę seansu trzymałbym w jednej kolumnie.
2. W seansie nie trzymaj nazwy filmu a jego ID
3. W tabeli Sala trzymasz movie ID. Masz jeden film przypisany do sali?
4. Nazwy tabel masz na zmianę raz po polsku raz po angielsku - zdecyduj się wink.gif
5. W tabeli Miejsce brakuje informacji o sali wink.gif

Tak na początek wink.gif
spiewak69
o coś takiego chodziło ?

data i czas razem z seansem np 2014-04-17 13:40



a w jaki sposób oznaczać że miejsce jest np już zarezerwowane ? żeby ktoś nie mógł zarezerwować tego samego miejsca ? bo nie bardzo rozumiem teraz.
Wpis w bazie jak doda " line " " place " to to w jakiś sposób sprawdzać czy jest taki wpis w bazie już czy dodać jeszcze jakąś tabelę - wolne/zarezerwowane ( 0/1 ) ?
i jeśli sprawdzać to w jaki sposób bo nie mam za bardzo pomysłu ...


Aha, a jeszcze sprawa zwolnienia miejsca po seansie ? Usuwanie z bazy . To jakiś dodatkowy kod napisać który czyści bazę ? tzn zwalnia "line " i " place " ?
A gdybym chciał zrobić np dodatkowo archiwizację - żeby można było sprawdzać np na koniec miesiąca ile było kupionych biletow itp itd
ghost1511
No masz ID seansu i Masz id Miejsca? Tworzysz tabelę w której przechowujesz unikalnie polaczenie (id_seansu, id_miejsca). Przed dodaniem wyszukujesz rekordu w tej tabeli, jeżeli nie ma rekordu to oznacza brak rezerwacji i możesz dodać rezerwację( dodając rekord ). Nie musisz pamiętać o usuwaniu rekordów ponieważ id_seansu jest unikalne.
spiewak69
Jeszcze takie pytanie

Mam jakis film
movie_name np SEKSMISJA haha.gif
ma on sobie tam jakiś opis rok itd - mało ważne, no i ma swój ID .

SEANCE - zawiera tytuł filmu ( poprzez jego ID ) oraz datę i godzinę

Tabela BOOKING zawiera ID tego seansu, osobę , salę ,rząd i miejsce .

Teraz zrobić jeszcze jedną tabelę z ID seansu i ID miejsca i rzędu w danej sali - te które będą zarezerwowane ? i wg niej sprawdzać dostępność wolnych miejsc ?

I czy w tabeli SEANCE nie powinienem jeszcze zrobić ID sali ? w której on będzie ?
ghost1511
Seans wyświetlany jest w sali. Więc jak najbardziej do tabeli SEANSE dorzucasz id_sali.

Zauważ konstrukcję pierwszego zdania. W taki sposób "na chłopski rozum" dojdziesz do tego co gdzie powinno być wink.gif

edit:
Unikasz w ten sposób przechowywania tych samych danych w wielu wystąpieniach:

O co chodzi?

Twój pierwszy pomysł.
Kod
ID_SEANSU ID_SALI ID_UZYTKOWNIKA
  10  |  20  |  123
  10  |  20  |  124


Jak widać trzymałbyś te same dane w wielu rekordach.

Dodatkowo żeby znaleźć w jakiej sali jest seans musiałbyś szukać w tabeli rezerwacji wink.gif
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.