| 28 | | book_id BIGINT NOT NULL, |
| 29 | | title VARCHAR(255) NOT NULL, |
| 30 | | isbn VARCHAR(20) NOT NULL, |
| 31 | | publication_year INT NOT NULL, |
| 32 | | total_copies INT NOT NULL, |
| 33 | | edition BIGINT, |
| 34 | | publisher_id BIGINT, |
| 35 | | author_id BIGINT, |
| 36 | | location_id BIGINT, |
| 37 | | CONSTRAINT book_pkey PRIMARY KEY (book_id) |
| 38 | | ); |
| 39 | | |
| 40 | | ... |
| | 28 | book_id BIGINT NOT NULL, |
| | 29 | title VARCHAR(255) NOT NULL, |
| | 30 | isbn VARCHAR(20) NOT NULL, |
| | 31 | publication_year INT NOT NULL, |
| | 32 | total_copies INT NOT NULL, |
| | 33 | edition BIGINT, |
| | 34 | publisher_id BIGINT, |
| | 35 | author_id BIGINT, |
| | 36 | location_id BIGINT, |
| | 37 | CONSTRAINT book_pkey PRIMARY KEY (book_id), |
| | 38 | CONSTRAINT fk_author |
| | 39 | FOREIGN KEY (author_id) |
| | 40 | REFERENCES public.author(author_id), |
| | 41 | CONSTRAINT fk_location |
| | 42 | FOREIGN KEY (location_id) |
| | 43 | REFERENCES public.location(location_id), |
| | 44 | CONSTRAINT fk_publisher |
| | 45 | FOREIGN KEY (publisher_id) |
| | 46 | REFERENCES public.publisher(publisher_id) |
| | 47 | ); |
| | 48 | |
| | 49 | CREATE TABLE public.bookcopy ( |
| | 50 | copy_id BIGINT NOT NULL, |
| | 51 | book_id BIGINT, |
| | 52 | location_id BIGINT, |
| | 53 | available INT, |
| | 54 | status_id BIGINT, |
| | 55 | library_id BIGINT, |
| | 56 | reservation_id INT, |
| | 57 | CONSTRAINT bookcopy_pkey PRIMARY KEY (copy_id), |
| | 58 | CONSTRAINT bookcopy_library_id_fkey |
| | 59 | FOREIGN KEY (library_id) |
| | 60 | REFERENCES public.library(library_id), |
| | 61 | CONSTRAINT bookcopy_location_id_fkey |
| | 62 | FOREIGN KEY (location_id) |
| | 63 | REFERENCES public.location(location_id), |
| | 64 | CONSTRAINT bookcopy_status_id_fkey |
| | 65 | FOREIGN KEY (status_id) |
| | 66 | REFERENCES public.bookstatus(status_id), |
| | 67 | CONSTRAINT fk_bookcopy_reservation |
| | 68 | FOREIGN KEY (reservation_id) |
| | 69 | REFERENCES public.reservation(reservation_id) |
| | 70 | ); |
| | 71 | |
| | 72 | CREATE TABLE public.bookgenre ( |
| | 73 | book_genre_id BIGINT NOT NULL, |
| | 74 | book_id BIGINT, |
| | 75 | genre_id BIGINT, |
| | 76 | CONSTRAINT bookgenre_pkey PRIMARY KEY (book_genre_id), |
| | 77 | CONSTRAINT bookgenre_genre_id_fkey |
| | 78 | FOREIGN KEY (genre_id) |
| | 79 | REFERENCES public.genre(genre_id) |
| | 80 | ); |
| | 81 | |
| | 82 | CREATE TABLE public.booklanguages ( |
| | 83 | book_language_id BIGINT NOT NULL, |
| | 84 | book_id BIGINT, |
| | 85 | language_id BIGINT, |
| | 86 | CONSTRAINT booklanguages_pkey PRIMARY KEY (book_language_id), |
| | 87 | CONSTRAINT booklanguages_language_id_fkey |
| | 88 | FOREIGN KEY (language_id) |
| | 89 | REFERENCES public.language(language_id) |
| | 90 | ); |
| | 91 | |
| | 92 | CREATE TABLE public.bookstatus ( |
| | 93 | status_id BIGINT NOT NULL, |
| | 94 | name VARCHAR(50), |
| | 95 | description TEXT, |
| | 96 | CONSTRAINT bookstatus_pkey PRIMARY KEY (status_id) |
| | 97 | ); |
| | 98 | |
| | 99 | CREATE TABLE public.borrowing ( |
| | 100 | borrowing_id BIGINT NOT NULL DEFAULT nextval('borrowing_seq'::regclass), |
| | 101 | book_id BIGINT, |
| | 102 | borrow_date DATE, |
| | 103 | return_date DATE, |
| | 104 | due_date DATE, |
| | 105 | return_status INT, |
| | 106 | copy_id BIGINT, |
| | 107 | membership_id BIGINT, |
| | 108 | borrowed_by BIGINT, |
| | 109 | returned_by BIGINT, |
| | 110 | reservation_id BIGINT, |
| | 111 | CONSTRAINT borrowing_pkey PRIMARY KEY (borrowing_id), |
| | 112 | CONSTRAINT borrowing_borrowed_by_fkey |
| | 113 | FOREIGN KEY (borrowed_by) |
| | 114 | REFERENCES public.employee(employee_id), |
| | 115 | CONSTRAINT borrowing_copy_id_fkey |
| | 116 | FOREIGN KEY (copy_id) |
| | 117 | REFERENCES public.bookcopy(copy_id), |
| | 118 | CONSTRAINT borrowing_membership_id_fkey |
| | 119 | FOREIGN KEY (membership_id) |
| | 120 | REFERENCES public.membership(membership_id), |
| | 121 | CONSTRAINT borrowing_reservation_id_fkey |
| | 122 | FOREIGN KEY (reservation_id) |
| | 123 | REFERENCES public.reservation(reservation_id), |
| | 124 | CONSTRAINT borrowing_returned_by_fkey |
| | 125 | FOREIGN KEY (returned_by) |
| | 126 | REFERENCES public.employee(employee_id) |
| | 127 | ); |
| | 128 | |
| | 129 | CREATE TABLE public.employee ( |
| | 130 | employee_id BIGINT NOT NULL, |
| | 131 | first_name VARCHAR(100), |
| | 132 | last_name VARCHAR(100), |
| | 133 | email VARCHAR(150), |
| | 134 | phone VARCHAR(50), |
| | 135 | employee_type_id BIGINT, |
| | 136 | hire_date DATE, |
| | 137 | salary INT, |
| | 138 | CONSTRAINT employee_pkey PRIMARY KEY (employee_id), |
| | 139 | CONSTRAINT employee_employee_type_id_fkey |
| | 140 | FOREIGN KEY (employee_type_id) |
| | 141 | REFERENCES public.employeetype(employee_type_id) |
| | 142 | ); |
| | 143 | |
| | 144 | CREATE TABLE public.employeetype ( |
| | 145 | employee_type_id BIGINT NOT NULL, |
| | 146 | type_name VARCHAR(100), |
| | 147 | description TEXT, |
| | 148 | CONSTRAINT employeetype_pkey PRIMARY KEY (employee_type_id) |
| | 149 | ); |
| | 150 | |
| | 151 | CREATE TABLE public.fee ( |
| | 152 | fee_id BIGINT NOT NULL, |
| | 153 | amount INT, |
| | 154 | description TEXT, |
| | 155 | fee_type_id BIGINT, |
| | 156 | membership_id BIGINT, |
| | 157 | CONSTRAINT fee_pkey PRIMARY KEY (fee_id), |
| | 158 | CONSTRAINT fee_fee_type_id_fkey |
| | 159 | FOREIGN KEY (fee_type_id) |
| | 160 | REFERENCES public.feetype(fee_type_id), |
| | 161 | CONSTRAINT fee_membership_id_fkey |
| | 162 | FOREIGN KEY (membership_id) |
| | 163 | REFERENCES public.membership(membership_id) |
| | 164 | ); |
| | 165 | |
| | 166 | CREATE TABLE public.feetype ( |
| | 167 | fee_type_id BIGINT NOT NULL, |
| | 168 | type_name VARCHAR(255), |
| | 169 | description TEXT, |
| | 170 | CONSTRAINT feetype_pkey PRIMARY KEY (fee_type_id) |
| | 171 | ); |
| | 172 | |
| | 173 | CREATE TABLE public.fine ( |
| | 174 | fine_id BIGINT NOT NULL, |
| | 175 | membership_id BIGINT, |
| | 176 | borrowing_id BIGINT, |
| | 177 | amount INT, |
| | 178 | created_date DATE, |
| | 179 | payment_id BIGINT, |
| | 180 | fee_type_id BIGINT, |
| | 181 | CONSTRAINT fine_pkey PRIMARY KEY (fine_id), |
| | 182 | CONSTRAINT fine_borrowing_id_fkey |
| | 183 | FOREIGN KEY (borrowing_id) |
| | 184 | REFERENCES public.borrowing(borrowing_id), |
| | 185 | CONSTRAINT fine_fee_type_id_fkey |
| | 186 | FOREIGN KEY (fee_type_id) |
| | 187 | REFERENCES public.feetype(fee_type_id), |
| | 188 | CONSTRAINT fine_membership_id_fkey |
| | 189 | FOREIGN KEY (membership_id) |
| | 190 | REFERENCES public.membership(membership_id), |
| | 191 | CONSTRAINT fine_payment_id_fkey |
| | 192 | FOREIGN KEY (payment_id) |
| | 193 | REFERENCES public.payment(payment_id) |
| | 194 | ); |
| | 195 | |
| | 196 | CREATE TABLE public.genre ( |
| | 197 | genre_id BIGSERIAL NOT NULL, |
| | 198 | name VARCHAR(100), |
| | 199 | description TEXT, |
| | 200 | CONSTRAINT genre_pkey PRIMARY KEY (genre_id) |
| | 201 | ); |
| | 202 | |
| | 203 | CREATE TABLE public.language ( |
| | 204 | language_id BIGINT NOT NULL, |
| | 205 | name VARCHAR(100), |
| | 206 | code VARCHAR(10), |
| | 207 | native_name VARCHAR(100), |
| | 208 | CONSTRAINT language_pkey PRIMARY KEY (language_id) |
| | 209 | ); |
| | 210 | |
| | 211 | CREATE TABLE public.library ( |
| | 212 | library_id BIGINT NOT NULL, |
| | 213 | name VARCHAR(255), |
| | 214 | address TEXT, |
| | 215 | contact_email VARCHAR(150), |
| | 216 | CONSTRAINT library_pkey PRIMARY KEY (library_id) |
| | 217 | ); |
| | 218 | |
| | 219 | CREATE TABLE public.location ( |
| | 220 | location_id BIGINT NOT NULL, |
| | 221 | name VARCHAR(100), |
| | 222 | address TEXT, |
| | 223 | floor INT, |
| | 224 | section VARCHAR(50), |
| | 225 | library_id BIGINT, |
| | 226 | CONSTRAINT location_pkey PRIMARY KEY (location_id), |
| | 227 | CONSTRAINT location_library_id_fkey |
| | 228 | FOREIGN KEY (library_id) |
| | 229 | REFERENCES public.library(library_id) |
| | 230 | ); |
| | 231 | |
| | 232 | CREATE TABLE public.member ( |
| | 233 | member_id BIGINT NOT NULL DEFAULT nextval('member_id_seq'::regclass), |
| | 234 | first_name VARCHAR(100), |
| | 235 | last_name VARCHAR(100), |
| | 236 | email VARCHAR(150), |
| | 237 | phone VARCHAR(50), |
| | 238 | member_type_id BIGINT, |
| | 239 | membership_start_date DATE, |
| | 240 | membership_end_date DATE, |
| | 241 | address TEXT, |
| | 242 | membership_status VARCHAR(20), |
| | 243 | CONSTRAINT member_pkey PRIMARY KEY (member_id), |
| | 244 | CONSTRAINT member_member_type_id_fkey |
| | 245 | FOREIGN KEY (member_type_id) |
| | 246 | REFERENCES public.membershiptype(member_type_id) |
| | 247 | ); |
| | 248 | |
| | 249 | CREATE TABLE public.membership ( |
| | 250 | membership_id BIGINT NOT NULL, |
| | 251 | member_id BIGINT, |
| | 252 | start_date DATE, |
| | 253 | end_date DATE, |
| | 254 | status INT, |
| | 255 | member_type_id BIGINT, |
| | 256 | CONSTRAINT membership_pkey PRIMARY KEY (membership_id), |
| | 257 | CONSTRAINT membership_member_id_fkey |
| | 258 | FOREIGN KEY (member_id) |
| | 259 | REFERENCES public.member(member_id), |
| | 260 | CONSTRAINT membership_member_type_id_fkey |
| | 261 | FOREIGN KEY (member_type_id) |
| | 262 | REFERENCES public.membershiptype(member_type_id) |
| | 263 | ); |
| | 264 | |
| | 265 | CREATE TABLE public.membershiptype ( |
| | 266 | member_type_id BIGINT NOT NULL, |
| | 267 | type_name VARCHAR(100), |
| | 268 | max_borrow_limit INT, |
| | 269 | max_days INT, |
| | 270 | fee_per_day INT, |
| | 271 | CONSTRAINT membershiptype_pkey PRIMARY KEY (member_type_id) |
| | 272 | ); |
| | 273 | |
| | 274 | CREATE TABLE public.payment ( |
| | 275 | payment_id BIGINT NOT NULL, |
| | 276 | member_id BIGINT, |
| | 277 | fee_id BIGINT, |
| | 278 | payment_date DATE, |
| | 279 | amount INT, |
| | 280 | CONSTRAINT payment_pkey PRIMARY KEY (payment_id), |
| | 281 | CONSTRAINT payment_fee_id_fkey |
| | 282 | FOREIGN KEY (fee_id) |
| | 283 | REFERENCES public.fee(fee_id), |
| | 284 | CONSTRAINT payment_member_id_fkey |
| | 285 | FOREIGN KEY (member_id) |
| | 286 | REFERENCES public.member(member_id) |
| | 287 | ); |
| | 288 | |
| | 289 | CREATE TABLE public.publisher ( |
| | 290 | publisher_id BIGINT NOT NULL, |
| | 291 | name VARCHAR(255), |
| | 292 | website VARCHAR(255), |
| | 293 | registration_number VARCHAR(100), |
| | 294 | CONSTRAINT publisher_pkey PRIMARY KEY (publisher_id) |
| | 295 | ); |
| | 296 | |
| | 297 | CREATE TABLE public.reservation ( |
| | 298 | reservation_id BIGINT NOT NULL DEFAULT nextval('reservation_seq'::regclass), |
| | 299 | member_id BIGINT, |
| | 300 | book_id BIGINT, |
| | 301 | requested_date DATE, |
| | 302 | expected_date DATE, |
| | 303 | status CHAR(20), |
| | 304 | copy_id BIGINT, |
| | 305 | CONSTRAINT reservation_pkey PRIMARY KEY (reservation_id), |
| | 306 | CONSTRAINT reservation_copy_id_fkey |
| | 307 | FOREIGN KEY (copy_id) |
| | 308 | REFERENCES public.bookcopy(copy_id), |
| | 309 | CONSTRAINT reservation_member_id_fkey |
| | 310 | FOREIGN KEY (member_id) |
| | 311 | REFERENCES public.member(member_id) |
| | 312 | |
| | 313 | ); |