RelationlDesign: kreiranje_na_tabeli_verz2.sql

File kreiranje_na_tabeli_verz2.sql, 6.4 KB (added by 221012, 12 days ago)
Line 
1DROP TABLE IF EXISTS MessageD;
2DROP TABLE IF EXISTS DocumentD;
3DROP TABLE IF EXISTS Inspection;
4DROP TABLE IF EXISTS MaintenanceLog;
5DROP TABLE IF EXISTS ServiceRequest;
6DROP TABLE IF EXISTS Payment;
7DROP TABLE IF EXISTS Lease;
8DROP TABLE IF EXISTS Listing;
9DROP TABLE IF EXISTS UnitImage;
10DROP TABLE IF EXISTS PropertyImage;
11DROP TABLE IF EXISTS Unit;
12DROP TABLE IF EXISTS Property;
13DROP TABLE IF EXISTS LandlordProfile;
14DROP TABLE IF EXISTS TenantProfile;
15DROP TABLE IF EXISTS UserD;
16DROP TABLE IF EXISTS Address;
17DROP TABLE IF EXISTS PropertyType;
18DROP TABLE IF EXISTS ServiceCategory;
19DROP TABLE IF EXISTS PaymentMethod;
20
21drop schema if exists domify cascade;
22
23create schema domify;
24
25SET search_path TO domify;
26
27CREATE TABLE Address (
28 id BIGINT PRIMARY KEY,
29 street VARCHAR(255) NOT NULL,
30 number VARCHAR(50) NOT NULL,
31 municipality VARCHAR(100) NOT NULL,
32 city VARCHAR(100) NOT NULL,
33 country VARCHAR(100) NOT NULL
34);
35
36CREATE TABLE PropertyType (
37 id BIGINT PRIMARY KEY,
38 name VARCHAR(100) NOT NULL
39);
40
41CREATE TABLE ServiceCategory (
42 id BIGINT PRIMARY KEY,
43 name VARCHAR(100) NOT NULL
44);
45
46CREATE TABLE PaymentMethod (
47 id BIGINT PRIMARY KEY,
48 name VARCHAR(100) NOT NULL
49);
50
51CREATE TABLE UserD (
52 id BIGINT PRIMARY KEY,
53 first_name VARCHAR(100) NOT NULL,
54 last_name VARCHAR(100) NOT NULL,
55 email VARCHAR(255) NOT NULL UNIQUE,
56 password_hash VARCHAR(255) NOT NULL,
57 date_of_birth DATE NOT NULL,
58 rating DECIMAL(3,2) NOT NULL DEFAULT 0.00,
59 bio TEXT,
60 address_id BIGINT NOT NULL,
61 FOREIGN KEY (address_id) REFERENCES Address(id) ON DELETE RESTRICT
62);
63
64CREATE TABLE TenantProfile (
65 id BIGINT PRIMARY KEY,
66 FOREIGN KEY (id) REFERENCES UserD(id) ON DELETE CASCADE
67);
68
69CREATE TABLE LandlordProfile (
70 id BIGINT PRIMARY KEY,
71 managed_properties_count INT NOT NULL DEFAULT 0,
72 is_agent BOOL NOT NULL,
73 FOREIGN KEY (id) REFERENCES UserD(id) ON DELETE CASCADE
74);
75
76
77CREATE TABLE Property (
78 id BIGINT PRIMARY KEY,
79 title VARCHAR(255) NOT NULL,
80 description TEXT NOT NULL,
81 created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
82 owner_id BIGINT NOT NULL,
83 property_type_id BIGINT NOT NULL,
84 address_id BIGINT NOT NULL,
85 FOREIGN KEY (owner_id) REFERENCES UserD(id) ON DELETE RESTRICT,
86 FOREIGN KEY (property_type_id) REFERENCES PropertyType(id) ON DELETE RESTRICT,
87 FOREIGN KEY (address_id) REFERENCES Address(id) ON DELETE RESTRICT
88);
89
90CREATE TABLE Unit (
91 id BIGINT PRIMARY KEY,
92 unit_number VARCHAR(50) NOT NULL,
93 floor INT NOT NULL,
94 bedrooms INT NOT NULL,
95 bathrooms INT NOT NULL,
96 area_sq_m DECIMAL(8,2) NOT NULL,
97 rent_amount DECIMAL(10,2),
98 property_id BIGINT NOT NULL,
99 FOREIGN KEY (property_id) REFERENCES Property(id) ON DELETE CASCADE
100);
101
102CREATE TABLE PropertyImage (
103 id BIGINT PRIMARY KEY,
104 image VARCHAR(500) NOT NULL,
105 property_id BIGINT NOT NULL,
106 FOREIGN KEY (property_id) REFERENCES Property(id) ON DELETE CASCADE
107);
108
109CREATE TABLE Listing (
110 id BIGINT PRIMARY KEY,
111 title VARCHAR(255) NOT NULL,
112 available_from DATE NOT NULL,
113 available_to DATE NOT NULL,
114 status VARCHAR(50) NOT NULL DEFAULT 'available',
115 description TEXT,
116 unit_id BIGINT NOT NULL,
117 FOREIGN KEY (unit_id) REFERENCES Unit(id) ON DELETE CASCADE
118);
119
120CREATE TABLE Lease (
121 id BIGINT PRIMARY KEY,
122 start_date DATE NOT NULL,
123 end_date DATE NOT NULL,
124 rent_amount DECIMAL(10,2) NOT NULL,
125 deposit_amount DECIMAL(10,2) NOT NULL,
126 listing_id BIGINT NOT NULL,
127 tenant_id BIGINT NOT NULL,
128 landlord_id BIGINT NOT NULL,
129 FOREIGN KEY (listing_id) REFERENCES Listing(id) ON DELETE RESTRICT,
130 FOREIGN KEY (tenant_id) REFERENCES TenantProfile(id) ON DELETE RESTRICT,
131 FOREIGN KEY (landlord_id) REFERENCES LandlordProfile(id) ON DELETE RESTRICT
132);
133
134CREATE TABLE Payment (
135 id BIGINT PRIMARY KEY,
136 amount DECIMAL(10,2) NOT NULL,
137 status VARCHAR(50) NOT NULL,
138 payment_date DATE NOT NULL,
139 lease_id BIGINT NOT NULL,
140 payment_method_id BIGINT NOT NULL,
141 FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE,
142 FOREIGN KEY (payment_method_id) REFERENCES PaymentMethod(id) ON DELETE RESTRICT
143);
144
145CREATE TABLE ServiceRequest (
146 id BIGINT PRIMARY KEY,
147 description TEXT NOT NULL,
148 request_date DATE NOT NULL,
149 status VARCHAR(50) NOT NULL,
150 lease_id BIGINT NOT NULL,
151 service_category_id BIGINT NOT NULL,
152 FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE,
153 FOREIGN KEY (service_category_id) REFERENCES ServiceCategory(id) ON DELETE RESTRICT
154);
155
156CREATE TABLE MaintenanceLog (
157 id BIGINT PRIMARY KEY,
158 description TEXT NOT NULL,
159 maintenance_date DATE NOT NULL,
160 service_request_id BIGINT NOT NULL,
161 user_id BIGINT NOT NULL,
162 FOREIGN KEY (service_request_id) REFERENCES ServiceRequest(id) ON DELETE CASCADE,
163 FOREIGN KEY (user_id) REFERENCES UserD(id) ON DELETE CASCADE
164);
165
166CREATE TABLE Inspection (
167 id BIGINT PRIMARY KEY,
168 inspection_date DATE NOT NULL,
169 notes TEXT NOT NULL,
170 lease_id BIGINT NOT NULL,
171 landlord_id BIGINT NOT NULL,
172 FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE,
173 FOREIGN KEY (landlord_id) REFERENCES LandlordProfile(id) ON DELETE RESTRICT
174);
175
176CREATE TABLE DocumentD (
177 id BIGINT PRIMARY KEY,
178 file_type VARCHAR(50) NOT NULL,
179 file_url VARCHAR(500) NOT NULL,
180 uploaded_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
181 user_id BIGINT,
182 lease_id BIGINT,
183 FOREIGN KEY (user_id) REFERENCES UserD(id) ON DELETE CASCADE,
184 FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE,
185 CHECK (user_id IS NOT NULL OR lease_id IS NOT NULL)
186);
187
188CREATE TABLE MessageD (
189 id BIGINT PRIMARY KEY,
190 content TEXT NOT NULL,
191 sent_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
192 from_user_id BIGINT NOT NULL,
193 to_user_id BIGINT NOT NULL,
194 lease_id BIGINT NOT NULL,
195 FOREIGN KEY (from_user_id) REFERENCES UserD(id) ON DELETE CASCADE,
196 FOREIGN KEY (to_user_id) REFERENCES UserD(id) ON DELETE CASCADE,
197 FOREIGN KEY (lease_id) REFERENCES Lease(id) ON DELETE CASCADE
198);
199
200CREATE TABLE UnitImage (
201 id BIGINT PRIMARY KEY,
202 image VARCHAR(500) NOT NULL,
203 unit_id BIGINT NOT NULL,
204 FOREIGN KEY (unit_id) REFERENCES Unit(id) ON DELETE CASCADE
205);
206
207CREATE TABLE Interested (
208 listing_id BIGINT NOT NULL,
209 tenant_profile_id BIGINT NOT NULL,
210 PRIMARY KEY (listing_id, tenant_profile_id),
211 FOREIGN KEY (listing_id) REFERENCES Listing(id) ON DELETE CASCADE,
212 FOREIGN KEY (tenant_profile_id) REFERENCES TenantProfile(id) ON DELETE CASCADE
213);