baza HOTELS cz.1 tabela hotele "HOTELS" i pokoje "ROOMS"
W tym cyklu zbudujemy bazę hoteli o nazwie "HOTELS", która będzie przykładową bazą przechowującą dane dotyczące HOTELI, czyli pokoi, rezerwacji, gości itp.
W części pierwszej zajmiemy się stworzeniem samej bazy HOTELS i tabel hotele "hotels" i pokoje "rooms". No to zaczynamy.
Żeby móc tworzyć tabele uwtorzymy sobie na początek bazę danych w nazwie HOTELS. Poniżej krok po kroku jak to zrobić.
1. W tym celu uruchamiany Management Studio i w oknie "Object Explorer" klikamy prawym przyciskiem myszy na "Databases" i w podręcznego menu wybieramy opcję :"New Database…"
2. W oknie "New Database" w polu "Database name" wpisujemy nazwę bazy, w naszym przypadku będzie to HOTELS. Wszystko potwierdzamy przyciskiem "OK".
3. W tym momencie w Management Studio w Object Explorerze w gałęzi "Databases" powinna się pojawić baza HOTELS. Jeżeli tak się nie stanie, klikamy na węźle "Databases" prawym przyciskiem myszy i z menu wybieramy opcję "Refresh".
gotowe 🙂
lub korzystamy z gotowego skryptu i uruchamiamy go w Management Studio
CREATE DATABASE HOTELS
Teraz możemy zająć się tabelami, zacznijmy od tabeli hotele "hotels" w której będziemy przechowywać informacje o poszczególnych hotelach. Na pewno będziemy potrzebowali takich pól jak:
- będziemy potrzebowali unikalnego identyfikatora hotelu, nazwiemy go hotel_id
- następnie każdy hotel ma nazwę więc pole hotel_name
- bazę tworzymy jak najbardziej uniwersalną, więc zakładamy, że hotele mogą znajdować się w wielu krajach, więc musimy wiedzieć gdzie znajduje się hotel. Ale z uwagi na to, że nazwy krajów są powtarzalne będziemy je przechowywać w osobnej tabeli a w tabeli hotels będziemy przechowywć tylko ich identyfikatory – hotel_country_id
- kolejna pozycja (pole) to miasto. Sytuacja analogiczna do krajów. Nazwy miast także będą się powtarzać, więc będziemy je przechowywać w osobnej tabeli a w tabeli hotels będziemy przechowywali tylko ich identyfikatory – hotel_city_id
- każdy hotel oczywiście ma adres więc musimy stworzyć takie pole. Moglibyśmy rozbić adres na ulicę, nr domu i nr lokalu, ale dla potrzeb naszego projektu nie będziemy tego robić. Uznajemy, że adresy nie będą się powtarzać bo każdy hotel może się znajdować pod inną lokalizacją więc nasze pole nazywamy – hotel_address
- hotel powinien także mieć ileś gwiazdek, tą informację będziemy przechowyać w polu – hotel_stars
- oczywiście do hotelu powinniśmy mieć możliwość się dodzwonić – hotel_telephone
- i napisać maila – hotel_email
- nie wyobrażam sobie sytuacji gdzie hotel nie ma strony www – hotel_www
OK już wiemy jakich pól potrzebujemy. Teraz je storzymy w SQL SERVER (Management Studio).
W celu utworzenia tabeli "hotels" musimy w Management Studio wykonać następujące kroki.
1. Przechodzimy do Object Explorer-a.
2. Rozwijamy (plusikiem) gałąź przy Databases, następnie przy HOTELS. Rozwiną nam się jeszcze dodatkowe gałęzie: Database diagram, Tables, Views itd. Nas będzie interesowała gałąź Tables.
3. Klikamy prawym przyciskiem myszy na gałęzi Tables i z podręcznego menu wybieramy opcję "New Table…".
4. Wypełniamy tabelę zgodnie z obrazkiem poniżej.
5. W celu zapisu tabeli klikamy na ikonkę "dyskiskietki" i wprowadzamy nazwę tabeli "hotels".
gotowe 🙂
lub korzystamy ze skryptu
USE HOTELS
GOCREATE TABLE hotels(
hotel_id int primary key not null
,hotel_name varchar(30) not null
,hotel_country_id int not null
,hotel_city_id int not null
,hotel_address varchar(50) not null
,hotel_stars int not null
,hotel_telephone varchar(20) not null
,hotel_email varchar(50) not null
,hotel_www varchar(50) not null
)
Myślę, że jeżeli chodzi o tabelę hotels to już wszystko. Jeżeli zapomnimy o czymś dodamy to później. Do naszego skryptu dodałem wszędzie ograniczenie NOT NULL bo nie wyobrażam sobie żeby którekolwiek z pól mogło być puste.
Teraz przejdziemy od tabeli pokoje "rooms". Co jest potrzebne do opisania pokoju?:
- na początu na pewno uniaklny identyfikator danego pokoju – room_id
- jeżeli mamy kilka hoteli, a taką bazę tworzymy, to napewno musimy wpisać w którym hotelu znajduje się dany pokój czyli stworzymy pole – room_hotel_id
- każdy pokój ma swój unialny numer więc utworzymy pole – room_number
- i każdy pokój znajduje się na jakimś piętrze, bo może być ważną informacją dla klienta, czyli powstaje pole – room_floor
- każdy pokój może pomieścić także określoną ilość osób – room_people
W celu utworzenia tabeli "hotels" musimy w Management Studio wykonać następujące kroki.
1. Przechodzimy do Object Explorer-a.
2. Rozwijamy (plusikiem) gałąź przy Databases, następnie przy HOTELS. Rozwiną nam się jeszcze dodatkowe gałęzie: Database diagram, Tables, Views itd. Nas będzie interesowała gałąź Tables.
3. Klikamy prawym przyciskiem myszy na gałęzi Tables i z podręcznego menu wybieramy opcję "New Table…".
4. Wypełniamy tabelę zgodnie z obrazkiem poniżej.
5. W celu zapisu tabeli klikamy na ikonkę "dyskiskietki" i wprowadzamy nazwę tabeli "rooms".
gotowe 🙂
lub korzystamy ze skryptu
USE HOTELS
GOCREATE TABLE rooms(
room_id int primary key not null
,room_hotel_id int not null
,room_number int not null
,room_floor int not null
,room_people int not null
)
Narazie nie określamy, czy np. w pokoju można palić czy jest WiFi itd bo takie dane będziemy przechowywać w innej tabeli, ale to opiszę w kolejnych wpisach.
Utwórzmy także klucze główne (PK – primary key) i klucze obce (FK – foreign key). Oczywiście kluczami głównymi w obu tabelach będą unikalne identyfikatory i tak w tabeli hotels będzie to pole hotel_id (PK) i analogicznie w tabeli rooms będzie to pole room_id (PK). Ponieważ pokój musi być przyporządkowany do jakiegoś hotelu a wszytkie dane dot. hoteli przechowujemy w tabeli hotels to musielismy w tabeli rooms stworzyć pole "trzymające" identyfikator hotelu "wskazującego" na pole hotel_id (tab. hotels) którym jest właśnie pole room_hotel_id i to właśnie pole będzie kluczem obcym (FK).
W tym momencie schemat naszej bazy hotels wygląda następująco.
Nie widać na schemacie żadnych relacji między tabelami bo jeszcze ich nie skonfigurowaliśmy. Zróbmy to teraz. Co musimy zrobić? "Połączyć" pole room_hotel_id z tabeli rooms i polem hotel_id z tabeli hotels. Pamiętajmy jednak, że to pole room_hotel_id "ma wskazywać na pole hotel_id, więce musimy ustawić pole room_hotel_id jako klucz obcy i "wskazać" na pole hotel_id. Możemy to zrobić poleceniem.
USE HOTELS
GOALTER TABLE rooms
ADD CONSTRAINT fk_rooms_hotels FOREIGN KEY (room_hotel_id) REFERENCES hotels(hotel_id)
sprawdźmy teraz jak wygląda nasz schemat
gotowe 🙂