Креирање и пополнување на база на податоци (DDL, DML)
DDL
CREATE TABLE public.author (
author_id BIGINT NOT NULL,
first_name VARCHAR(100),
last_name VARCHAR(100),
birth_date DATE,
nationality VARCHAR(100),
CONSTRAINT author_pkey PRIMARY KEY (author_id)
CONSTRAINT uq_author_name UNIQUE (first_name, last_name),
CONSTRAINT chk_first_name_length CHECK (LENGTH(TRIM(first_name)) BETWEEN 2 AND 100),
CONSTRAINT chk_last_name_length CHECK (LENGTH(TRIM(last_name)) BETWEEN 2 AND 100)
);
CREATE TABLE public.author_book (
author_id BIGINT NOT NULL,
book_id BIGINT NOT NULL,
CONSTRAINT author_book_pkey PRIMARY KEY (author_id, book_id),
CONSTRAINT author_book_author_id_fkey
FOREIGN KEY (author_id)
REFERENCES public.author(author_id)
);
CREATE TABLE public.book (
book_id BIGINT NOT NULL,
title VARCHAR(255) NOT NULL,
isbn VARCHAR(20) NOT NULL,
publication_year INT NOT NULL,
total_copies INT NOT NULL,
edition BIGINT,
publisher_id BIGINT,
author_id BIGINT,
location_id BIGINT,
CONSTRAINT uq_book_title UNIQUE (title),
CONSTRAINT uq_book_isbn UNIQUE (isbn),
CONSTRAINT book_pkey PRIMARY KEY (book_id),
CONSTRAINT fk_author
FOREIGN KEY (author_id)
REFERENCES public.author(author_id),
CONSTRAINT fk_location
FOREIGN KEY (location_id)
REFERENCES public.location(location_id),
CONSTRAINT fk_publisher
FOREIGN KEY (publisher_id)
REFERENCES public.publisher(publisher_id)
);
CREATE TABLE public.bookcopy (
copy_id BIGINT NOT NULL,
book_id BIGINT,
location_id BIGINT,
available INT,
status_id BIGINT,
library_id BIGINT,
reservation_id INT,
CONSTRAINT bookcopy_pkey PRIMARY KEY (copy_id),
CONSTRAINT bookcopy_library_id_fkey
FOREIGN KEY (library_id)
REFERENCES public.library(library_id),
CONSTRAINT bookcopy_location_id_fkey
FOREIGN KEY (location_id)
REFERENCES public.location(location_id),
CONSTRAINT bookcopy_status_id_fkey
FOREIGN KEY (status_id)
REFERENCES public.bookstatus(status_id),
CONSTRAINT fk_bookcopy_reservation
FOREIGN KEY (reservation_id)
REFERENCES public.reservation(reservation_id)
);
CREATE TABLE public.bookgenre (
book_genre_id BIGINT NOT NULL,
book_id BIGINT,
genre_id BIGINT,
CONSTRAINT bookgenre_pkey PRIMARY KEY (book_genre_id),
CONSTRAINT bookgenre_genre_id_fkey
FOREIGN KEY (genre_id)
REFERENCES public.genre(genre_id)
);
CREATE TABLE public.booklanguages (
book_language_id BIGINT NOT NULL,
book_id BIGINT,
language_id BIGINT,
CONSTRAINT booklanguages_pkey PRIMARY KEY (book_language_id),
CONSTRAINT booklanguages_language_id_fkey
FOREIGN KEY (language_id)
REFERENCES public.language(language_id)
);
CREATE TABLE public.bookstatus (
status_id BIGINT NOT NULL,
name VARCHAR(50),
description TEXT,
CONSTRAINT bookstatus_pkey PRIMARY KEY (status_id)
);
CREATE TABLE public.borrowing (
borrowing_id BIGINT NOT NULL DEFAULT nextval('borrowing_seq'::regclass),
book_id BIGINT,
borrow_date DATE,
return_date DATE,
due_date DATE,
return_status INT,
copy_id BIGINT,
membership_id BIGINT,
borrowed_by BIGINT,
returned_by BIGINT,
reservation_id BIGINT,
CONSTRAINT borrowing_pkey PRIMARY KEY (borrowing_id),
CONSTRAINT borrowing_borrowed_by_fkey
FOREIGN KEY (borrowed_by)
REFERENCES public.employee(employee_id),
CONSTRAINT chk_borrowing_dates
CHECK (
due_date >= borrow_date
AND (return_date IS NULL OR return_date >= borrow_date)
),
CONSTRAINT borrowing_copy_id_fkey
FOREIGN KEY (copy_id)
REFERENCES public.bookcopy(copy_id),
CONSTRAINT borrowing_membership_id_fkey
FOREIGN KEY (membership_id)
REFERENCES public.membership(membership_id),
CONSTRAINT borrowing_reservation_id_fkey
FOREIGN KEY (reservation_id)
REFERENCES public.reservation(reservation_id),
CONSTRAINT uq_borrowing_reservation
UNIQUE (reservation_id),
CONSTRAINT borrowing_returned_by_fkey
FOREIGN KEY (returned_by)
REFERENCES public.employee(employee_id)
);
CREATE TABLE public.employee (
employee_id BIGINT NOT NULL,
first_name VARCHAR(100),
last_name VARCHAR(100),
email VARCHAR(150),
phone VARCHAR(50),
employee_type_id BIGINT,
hire_date DATE,
salary INT,
CONSTRAINT employee_pkey PRIMARY KEY (employee_id),
CONSTRAINT employee_employee_type_id_fkey
FOREIGN KEY (employee_type_id)
REFERENCES public.employeetype(employee_type_id)
);
CREATE TABLE public.employeetype (
employee_type_id BIGINT NOT NULL,
type_name VARCHAR(100),
description TEXT,
CONSTRAINT employeetype_pkey PRIMARY KEY (employee_type_id)
);
CREATE TABLE public.fee (
fee_id BIGINT NOT NULL,
amount INT,
description TEXT,
fee_type_id BIGINT,
membership_id BIGINT,
CONSTRAINT fee_pkey PRIMARY KEY (fee_id),
CONSTRAINT fee_fee_type_id_fkey
FOREIGN KEY (fee_type_id)
REFERENCES public.feetype(fee_type_id),
CONSTRAINT fee_membership_id_fkey
FOREIGN KEY (membership_id)
REFERENCES public.membership(membership_id)
);
CREATE TABLE public.feetype (
fee_type_id BIGINT NOT NULL,
type_name VARCHAR(255),
description TEXT,
CONSTRAINT feetype_pkey PRIMARY KEY (fee_type_id)
);
CREATE TABLE public.fine (
fine_id BIGINT NOT NULL,
membership_id BIGINT,
borrowing_id BIGINT,
amount INT,
created_date DATE,
payment_id BIGINT,
fee_type_id BIGINT,
CONSTRAINT fine_pkey PRIMARY KEY (fine_id),
CONSTRAINT fine_borrowing_id_fkey
FOREIGN KEY (borrowing_id)
REFERENCES public.borrowing(borrowing_id),
CONSTRAINT fine_fee_type_id_fkey
FOREIGN KEY (fee_type_id)
REFERENCES public.feetype(fee_type_id),
CONSTRAINT fine_membership_id_fkey
FOREIGN KEY (membership_id)
REFERENCES public.membership(membership_id),
CONSTRAINT fine_payment_id_fkey
FOREIGN KEY (payment_id)
REFERENCES public.payment(payment_id)
);
CREATE TABLE public.genre (
genre_id BIGSERIAL NOT NULL,
name VARCHAR(100),
description TEXT,
CONSTRAINT genre_pkey PRIMARY KEY (genre_id)
);
CREATE TABLE public.language (
language_id BIGINT NOT NULL,
name VARCHAR(100),
code VARCHAR(10),
native_name VARCHAR(100),
CONSTRAINT language_pkey PRIMARY KEY (language_id)
);
CREATE TABLE public.library (
library_id BIGINT NOT NULL,
name VARCHAR(255),
address TEXT,
contact_email VARCHAR(150),
CONSTRAINT library_pkey PRIMARY KEY (library_id)
);
CREATE TABLE public.location (
location_id BIGINT NOT NULL,
name VARCHAR(100),
address TEXT,
floor INT,
section VARCHAR(50),
library_id BIGINT,
CONSTRAINT location_pkey PRIMARY KEY (location_id),
CONSTRAINT location_library_id_fkey
FOREIGN KEY (library_id)
REFERENCES public.library(library_id)
);
CREATE TABLE public.member (
member_id BIGINT NOT NULL DEFAULT nextval('member_id_seq'::regclass),
first_name VARCHAR(100),
last_name VARCHAR(100),
email VARCHAR(150),
phone VARCHAR(50),
member_type_id BIGINT,
membership_start_date DATE,
membership_end_date DATE,
address TEXT,
membership_status VARCHAR(20),
CONSTRAINT member_pkey PRIMARY KEY (member_id),
CONSTRAINT member_member_type_id_fkey
FOREIGN KEY (member_type_id)
REFERENCES public.membershiptype(member_type_id)
);
CREATE TABLE public.membership (
membership_id BIGINT NOT NULL,
member_id BIGINT,
start_date DATE,
end_date DATE,
status INT,
member_type_id BIGINT,
CONSTRAINT membership_pkey PRIMARY KEY (membership_id),
CONSTRAINT membership_member_id_fkey
FOREIGN KEY (member_id)
REFERENCES public.member(member_id),
CONSTRAINT membership_member_type_id_fkey
FOREIGN KEY (member_type_id)
REFERENCES public.membershiptype(member_type_id)
);
CREATE TABLE public.membershiptype (
member_type_id BIGINT NOT NULL,
type_name VARCHAR(100),
max_borrow_limit INT,
max_days INT,
fee_per_day INT,
CONSTRAINT membershiptype_pkey PRIMARY KEY (member_type_id)
);
CREATE TABLE public.payment (
payment_id BIGINT NOT NULL,
member_id BIGINT,
fee_id BIGINT,
payment_date DATE,
amount INT,
CONSTRAINT payment_pkey PRIMARY KEY (payment_id),
CONSTRAINT payment_fee_id_fkey
FOREIGN KEY (fee_id)
REFERENCES public.fee(fee_id),
CONSTRAINT payment_member_id_fkey
FOREIGN KEY (member_id)
REFERENCES public.member(member_id)
);
CREATE TABLE public.publisher (
publisher_id BIGINT NOT NULL,
name VARCHAR(255),
website VARCHAR(255),
registration_number VARCHAR(100),
CONSTRAINT publisher_pkey PRIMARY KEY (publisher_id)
);
CREATE TABLE public.reservation (
reservation_id BIGINT NOT NULL DEFAULT nextval('reservation_seq'::regclass),
member_id BIGINT,
book_id BIGINT,
requested_date DATE,
expected_date DATE,
status CHAR(20),
copy_id BIGINT,
CONSTRAINT reservation_pkey PRIMARY KEY (reservation_id),
CONSTRAINT reservation_copy_id_fkey
FOREIGN KEY (copy_id)
REFERENCES public.bookcopy(copy_id),
CONSTRAINT reservation_member_id_fkey
FOREIGN KEY (member_id)
REFERENCES public.member(member_id)
);
Last modified
4 days ago
Last modified on 06/11/26 15:29:36
Note:
See TracWiki
for help on using the wiki.
