LogicalAndPhysicalDesign: schema_creation.sql

File schema_creation.sql, 3.8 KB (added by 181201, 4 hours ago)
Line 
1BEGIN;
2
3DROP TABLE IF EXISTS booking_services CASCADE;
4DROP TABLE IF EXISTS sitter_services CASCADE;
5DROP TABLE IF EXISTS booking_pets CASCADE;
6DROP TABLE IF EXISTS admin_management CASCADE;
7DROP TABLE IF EXISTS payments CASCADE;
8DROP TABLE IF EXISTS reviews CASCADE;
9DROP TABLE IF EXISTS bookings CASCADE;
10DROP TABLE IF EXISTS services CASCADE;
11DROP TABLE IF EXISTS pets CASCADE;
12DROP TABLE IF EXISTS pet_types CASCADE;
13DROP TABLE IF EXISTS pet_sitters CASCADE;
14DROP TABLE IF EXISTS pet_owners CASCADE;
15DROP TABLE IF EXISTS admins CASCADE;
16DROP TABLE IF EXISTS users CASCADE;
17
18CREATE TABLE users (
19 user_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::text,
20 username VARCHAR(20) UNIQUE NOT NULL,
21 first_name VARCHAR(128) NOT NULL,
22 last_name VARCHAR(128) NOT NULL,
23 password VARCHAR(256) NOT NULL,
24 email VARCHAR(254) UNIQUE NOT NULL
25);
26
27CREATE TABLE admins (
28 user_id VARCHAR(36) PRIMARY KEY REFERENCES users(user_id) ON DELETE CASCADE
29);
30
31CREATE TABLE pet_owners (
32 user_id VARCHAR(36) PRIMARY KEY REFERENCES users(user_id) ON DELETE CASCADE
33);
34
35CREATE TABLE pet_sitters (
36 user_id VARCHAR(36) PRIMARY KEY REFERENCES users(user_id) ON DELETE CASCADE
37);
38
39CREATE TABLE pet_types (
40 pettype_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::text,
41 species VARCHAR(128) UNIQUE NOT NULL,
42 average_lifespan INTEGER,
43 needs_outdoor_walk BOOLEAN NOT NULL
44);
45
46CREATE TABLE pets (
47 pet_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::text,
48 name VARCHAR(128) NOT NULL,
49 photo TEXT,
50 age INTEGER NOT NULL CHECK (age >= 0),
51 special_needs TEXT,
52 description TEXT,
53 owner_id VARCHAR(36) NOT NULL REFERENCES pet_owners(user_id) ON DELETE CASCADE,
54 pettype_id VARCHAR(36) NOT NULL REFERENCES pet_types(pettype_id) ON DELETE RESTRICT
55);
56
57CREATE TABLE services (
58 service_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::text,
59 type VARCHAR(128) NOT NULL,
60 description TEXT
61);
62
63CREATE TABLE bookings (
64 booking_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::text,
65 status VARCHAR(32) NOT NULL CHECK (status IN ('Pending', 'Confirmed', 'Completed', 'Rejected')) DEFAULT 'Pending',
66 date_from DATE NOT NULL,
67 date_to DATE NOT NULL CHECK (date_to >= date_from),
68 address VARCHAR(512) NOT NULL,
69 owner_id VARCHAR(36) NOT NULL REFERENCES pet_owners(user_id) ON DELETE RESTRICT,
70 sitter_id VARCHAR(36) NOT NULL REFERENCES pet_sitters(user_id) ON DELETE RESTRICT
71);
72
73CREATE TABLE reviews (
74 review_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::text,
75 rating INTEGER NOT NULL CHECK (rating BETWEEN 1 AND 5),
76 comment TEXT,
77 booking_id VARCHAR(36) UNIQUE NOT NULL REFERENCES bookings(booking_id) ON DELETE CASCADE
78);
79
80CREATE TABLE payments (
81 payment_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::text,
82 amount INTEGER NOT NULL CHECK (amount > 0),
83 payment_type VARCHAR(32) NOT NULL,
84 booking_id VARCHAR(36) UNIQUE NOT NULL REFERENCES bookings(booking_id) ON DELETE CASCADE
85);
86
87CREATE TABLE admin_management (
88 admin_id VARCHAR(36) REFERENCES admins(user_id) ON DELETE CASCADE,
89 user_id VARCHAR(36) REFERENCES users(user_id) ON DELETE CASCADE,
90 PRIMARY KEY (admin_id, user_id)
91);
92
93CREATE TABLE booking_pets (
94 booking_id VARCHAR(36) REFERENCES bookings(booking_id) ON DELETE CASCADE,
95 pet_id VARCHAR(36) REFERENCES pets(pet_id) ON DELETE CASCADE,
96 PRIMARY KEY (booking_id, pet_id)
97);
98
99CREATE TABLE sitter_services (
100 sitter_id VARCHAR(36) REFERENCES pet_sitters(user_id) ON DELETE CASCADE,
101 service_id VARCHAR(36) REFERENCES services(service_id) ON DELETE CASCADE,
102 PRIMARY KEY (sitter_id, service_id)
103);
104
105CREATE TABLE booking_services (
106 booking_id VARCHAR(36) REFERENCES bookings(booking_id) ON DELETE CASCADE,
107 service_id VARCHAR(36) REFERENCES services(service_id) ON DELETE CASCADE,
108 PRIMARY KEY (booking_id, service_id)
109);
110
111COMMIT;