-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjectSQLSample.sql
More file actions
136 lines (112 loc) · 4.05 KB
/
ProjectSQLSample.sql
File metadata and controls
136 lines (112 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
CREATE TABLE Hotel_Chain (
Hotel_Chain_ID SERIAL,
hotel_chain_name VARCHAR(20) NOT NULL,
Central_Office VARCHAR(50) NOT NULL,
Number_Of_Hotels INTEGER DEFAULT 0,
Contact_Email VARCHAR(50) NOT NULL,
PRIMARY KEY (Hotel_Chain_ID)
);
CREATE TABLE HotelChain_PhoneNumbers (
Hotel_Chain_ID INTEGER,
Phone_Number NUMERIC(10),
PRIMARY KEY (Hotel_Chain_ID, Phone_Number),
FOREIGN KEY (Hotel_Chain_ID) REFERENCES hotel_chain (Hotel_Chain_ID) ON DELETE CASCADE
);
CREATE TABLE Hotel (
Hotel_Chain_ID INTEGER NOT NULL,
Hotel_ID SERIAL,
Hotel_name VARCHAR(50) NOT NULL,
Hotel_City VARCHAR(50) NOT NULL,
Hotel_Contact_Email VARCHAR(50) NOT NULL,
Number_Of_Rooms INTEGER DEFAULT 0 NOT NULL,
Rating INTEGER CHECK (Rating BETWEEN 1 AND 5),
manager_ssn NUMERIC(9),
PRIMARY KEY (Hotel_ID),
FOREIGN KEY (Hotel_Chain_ID) REFERENCES Hotel_Chain(Hotel_Chain_ID) ON DELETE CASCADE
);
CREATE TABLE Hotel_PhoneNumbers (
Hotel_ID INTEGER,
Phone_Number NUMERIC(10),
PRIMARY KEY (Hotel_ID, Phone_Number),
FOREIGN KEY (Hotel_ID) REFERENCES hotel(Hotel_ID) ON DELETE CASCADE
);
CREATE TABLE Room (
Hotel_ID INTEGER,
Room_Number INTEGER,
Can_Be_Extended BOOLEAN NOT NULL,
Has_Sea_View BOOLEAN NOT NULL,
Has_Mountain_View BOOLEAN NOT NULL,
Room_Capacity INTEGER NOT NULL,
Price INTEGER NOT NULL,
PRIMARY KEY (Hotel_ID, Room_Number),
FOREIGN KEY (Hotel_ID) REFERENCES Hotel(Hotel_ID) ON DELETE CASCADE
);
CREATE TABLE Room_Amenities (
hotel_id INTEGER,
Room_Number INTEGER,
Amenity VARCHAR(100),
PRIMARY KEY (Hotel_ID, Room_Number, Amenity),
FOREIGN KEY (hotel_id) REFERENCES Hotel(Hotel_ID) ON DELETE CASCADE,
FOREIGN KEY (hotel_id, Room_Number) REFERENCES Room(hotel_id, Room_Number) ON DELETE CASCADE
);
CREATE TABLE Room_List_of_Problems (
hotel_id INTEGER,
Room_Number INTEGER,
Problem VARCHAR(100),
PRIMARY KEY (Hotel_ID, Room_Number, Problem),
FOREIGN KEY (Hotel_ID) REFERENCES Hotel(Hotel_ID) ON DELETE CASCADE,
FOREIGN KEY (hotel_id, Room_Number) REFERENCES Room(hotel_id, Room_Number) ON DELETE CASCADE
);
CREATE TABLE users (
username VARCHAR(20),
password VARCHAR(20) NOT NULL,
type VARCHAR(10) DEFAULT 'user' CHECK (type IN ('user', 'employee', 'admin')),
PRIMARY KEY (username)
);
CREATE TABLE Booking (
Booking_ID SERIAL,
Time_Created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
check_in_date DATE NOT NULL,
check_out_date DATE NOT NULL,
Is_Renting BOOLEAN DEFAULT false,
username VARCHAR(20),
Is_Paid BOOLEAN DEFAULT false,
Hotel_ID INTEGER NOT NULL,
Room_Number INTEGER NOT NULL,
FOREIGN KEY (username) REFERENCES users(username) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (Hotel_ID) REFERENCES Hotel(Hotel_ID) ON DELETE CASCADE,
FOREIGN KEY (hotel_id, Room_Number) REFERENCES Room(hotel_id, Room_Number) ON DELETE CASCADE,
PRIMARY KEY (Booking_ID)
);
CREATE TABLE Employee (
SSN NUMERIC(9) NOT NULL,
Name VARCHAR(20) NOT NULL,
username VARCHAR(20),
Hotel_ID INTEGER NOT NULL,
FOREIGN KEY (Hotel_ID) REFERENCES Hotel(Hotel_ID) ON DELETE SET NULL, --supposing we don't fire them if the hotel closes
FOREIGN KEY (username) REFERENCES users(username) ON UPDATE CASCADE ON DELETE CASCADE,
PRIMARY KEY (SSN)
);
ALTER TABLE hotel ADD CONSTRAINT manages_a FOREIGN KEY (manager_ssn) REFERENCES employee(ssn) ON DELETE SET NULL;
CREATE TABLE Archive (
Booking_ID INTEGER,
Time_Created TIME,
check_in_date DATE,
check_out_date DATE,
Is_Renting BOOLEAN,
username VARCHAR(20),
Is_Paid BOOLEAN,
Room_Number INTEGER,
Hotel_ID INTEGER,
PRIMARY KEY (Booking_ID)
);
CREATE VIEW rooms_by_area AS SELECT hotel_city, count(*) FROM hotel JOIN room ON hotel.hotel_id = room.hotel_id GROUP BY hotel_city;
CREATE VIEW hotel_room_capacity AS SELECT room_number, room_capacity FROM room WHERE hotel_id = 40;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO web;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO postgres;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO web;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO postgres;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO web;