| Version 1 (modified by , 2 weeks ago) ( diff ) |
|---|
Фаза 2A – Генерирање DDL
Опис
Оваа фаза опфаќа генерирање на DDL за ЕР дијаграмот со соодветни ограничувања и дифолтни вредности.
Содржина на DDL скрипта
CREATE TABLE APP_USER (
id BIGSERIAL NOT NULL, first_name VARCHAR(20), last_name VARCHAR(20), email VARCHAR(50) NOT NULL UNIQUE, phone VARCHAR(20) NOT NULL, created_at DATE NOT NULL, password_hash VARCHAR(20) NOT NULL, PRIMARY KEY (id), CONSTRAINT CHK_email_format
CHECK (email ~ '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'),
CONSTRAINT CHK_phone_number_format
CHECK (phone ~ '[0-9]{7,15}$')
);
CREATE TABLE ROLES (
id BIGSERIAL NOT NULL, role VARCHAR(20) NOT NULL, PRIMARY KEY (id), CONSTRAINT CHK_role_title
CHECK (role IN ('ADMINISTRATOR', 'USER'))
);
CREATE TABLE USER_ROLES (
APP_USERid BIGINT NOT NULL, ROLESid BIGINT NOT NULL, PRIMARY KEY (APP_USERid, ROLESid), CONSTRAINT FK_user_roles_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_user_roles_role
FOREIGN KEY (ROLESid) REFERENCES ROLES (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE CATEGORIZATION (
id BIGSERIAL NOT NULL, name VARCHAR(20) NOT NULL, PRIMARY KEY (id), CONSTRAINT CHK_category_values
CHECK (name IN ('Concerts', 'Theatre', 'Cinema', 'Festivals', 'Exhibitions', 'Seminars'))
);
CREATE TABLE SUBCATEGORY (
id BIGSERIAL NOT NULL, name VARCHAR(20) NOT NULL, CATEGORIZATIONid BIGINT, PRIMARY KEY (id), CONSTRAINT FK_subcategory_categorization
FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id) ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE USER_CATEGORY_SUBSCRIPTION (
APP_USERid BIGINT NOT NULL DEFAULT 1, CATEGORIZATIONid BIGINT NOT NULL DEFAULT 1, PRIMARY KEY (APP_USERid, CATEGORIZATIONid), CONSTRAINT FK_user_category_sub_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT FK_user_category_sub_categorization
FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id) ON UPDATE CASCADE ON DELETE SET DEFAULT
);
CREATE TABLE USER_SUBCATEGORY_SUBSCRIPTION (
APP_USERid BIGINT NOT NULL DEFAULT 1, SUBCATEGORYid BIGINT NOT NULL DEFAULT 1, PRIMARY KEY (APP_USERid, SUBCATEGORYid), CONSTRAINT FK_user_subcategory_sub_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT FK_user_subcategory_sub_subcategory
FOREIGN KEY (SUBCATEGORYid) REFERENCES SUBCATEGORY (id) ON UPDATE CASCADE ON DELETE SET DEFAULT
);
CREATE TABLE EVENT (
id BIGSERIAL NOT NULL, title VARCHAR(50) NOT NULL, description VARCHAR(255), start_date DATE NOT NULL, end_date DATE NOT NULL, CATEGORIZATIONid BIGINT, PRIMARY KEY (id), CONSTRAINT CHK_event_dates
CHECK (end_date >= start_date),
CONSTRAINT FK_event_categorization
FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id) ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE EVENT_IMAGE (
id BIGSERIAL NOT NULL, image_url VARCHAR(255) NOT NULL, EVENTid BIGINT, PRIMARY KEY (id), CONSTRAINT FK_event_image_event
FOREIGN KEY (EVENTid) REFERENCES EVENT (id) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE EVENT_ROLE (
id BIGSERIAL NOT NULL, role VARCHAR(20) NOT NULL, PRIMARY KEY (id), CONSTRAINT CHK_event_role_values
CHECK (role IN ('EVENT_ADMIN', 'SALES_MANAGER', 'INFO_ADMIN', 'CONTENT_MANAGER'))
);
CREATE TABLE USER_EVENT (
APP_USERid BIGINT NOT NULL, EVENTid BIGINT NOT NULL, EVENT_ROLEid BIGINT NOT NULL, PRIMARY KEY (APP_USERid, EVENTid), CONSTRAINT FK_user_event_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_user_event_event
FOREIGN KEY (EVENTid) REFERENCES EVENT (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_user_event_role
FOREIGN KEY (EVENT_ROLEid) REFERENCES EVENT_ROLE (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE VENUE (
id BIGSERIAL NOT NULL, name VARCHAR(20) NOT NULL, city VARCHAR(20), address VARCHAR(50) NOT NULL, PRIMARY KEY (id)
);
CREATE TABLE HALL (
id BIGSERIAL NOT NULL, name VARCHAR(20) NOT NULL, capacity INT NOT NULL, VENUEid BIGINT, PRIMARY KEY (id), CONSTRAINT CHK_capacity_positive_number
CHECK (capacity > 0),
CONSTRAINT FK_hall_venue
FOREIGN KEY (VENUEid) REFERENCES VENUE (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE EVENT_HALL (
EVENTid BIGINT NOT NULL, HALLid BIGINT NOT NULL, allowed_access BOOLEAN NOT NULL, PRIMARY KEY (EVENTid, HALLid), CONSTRAINT FK_event_hall_event
FOREIGN KEY (EVENTid) REFERENCES EVENT (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_event_hall_hall
FOREIGN KEY (HALLid) REFERENCES HALL (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE TICKET_TYPE (
id BIGSERIAL NOT NULL, name VARCHAR(50) NOT NULL, quantity_available INT NOT NULL, PRIMARY KEY (id), CONSTRAINT CHK_ticket_quantity_positive_num
CHECK (quantity_available >= 0),
CONSTRAINT CHK_ticket_type_values
CHECK (name IN ('GENERAL_ADMISSION', 'STANDARD', 'PARTER', 'VIP'))
);
CREATE TABLE SEAT (
id BIGSERIAL NOT NULL, number INT NOT NULL, HALLid BIGINT, TICKET_TYPEid BIGINT, PRIMARY KEY (id), CONSTRAINT FK_seat_hall
FOREIGN KEY (HALLid) REFERENCES HALL (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_seat_ticket_type
FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id) ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE EVENT_TICKET_TYPE (
EVENTid BIGINT NOT NULL, TICKET_TYPEid BIGINT NOT NULL, price INT NOT NULL, PRIMARY KEY (EVENTid, TICKET_TYPEid), CONSTRAINT CHK_ticket_price_positive_num
CHECK (price > 0),
CONSTRAINT FK_event_ticket_type_event
FOREIGN KEY (EVENTid) REFERENCES EVENT (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_event_ticket_type_ticket_type
FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE STATUS (
id BIGSERIAL NOT NULL, name VARCHAR(20) NOT NULL, description VARCHAR(255), PRIMARY KEY (id), CONSTRAINT CHK_order_status_values
CHECK (name IN ('CREATED', 'PAID', 'CANCELLED'))
);
CREATE TABLE PROMO_CODE (
id BIGSERIAL NOT NULL, code VARCHAR(20) NOT NULL UNIQUE, discount_percent INT NOT NULL, expiration_date DATE NOT NULL, APP_USERid BIGINT DEFAULT 1, PRIMARY KEY (id), CONSTRAINT CHK_discount_percent
CHECK (discount_percent > 0 AND discount_percent < 100),
CONSTRAINT FK_promo_code_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE SET DEFAULT
);
CREATE TABLE USER_ORDER (
id BIGSERIAL NOT NULL, order_date DATE NOT NULL, total_amount INT NOT NULL, APP_USERid BIGINT, STATUSid BIGINT, PROMO_CODEid BIGINT, PRIMARY KEY (id), CONSTRAINT CHK_order_amount_positive_num
CHECK (total_amount > 0),
CONSTRAINT FK_user_order_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_user_order_status
FOREIGN KEY (STATUSid) REFERENCES STATUS (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_user_order_promo_code
FOREIGN KEY (PROMO_CODEid) REFERENCES PROMO_CODE (id) ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE TICKET (
id BIGSERIAL NOT NULL, code VARCHAR(50) NOT NULL UNIQUE, status VARCHAR(20) NOT NULL, TICKET_TYPEid BIGINT, USER_ORDERid BIGINT, SEATid BIGINT, APP_USERid BIGINT, EVENTid BIGINT, HALLid BIGINT, PRIMARY KEY (id), CONSTRAINT CHK_ticket_status_values
CHECK (status IN ('ACTIVE', 'USED', 'CANCELLED')),
CONSTRAINT FK_ticket_ticket_type
FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_ticket_user_order
FOREIGN KEY (USER_ORDERid) REFERENCES USER_ORDER (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_ticket_seat
FOREIGN KEY (SEATid) REFERENCES SEAT (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_ticket_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_ticket_event
FOREIGN KEY (EVENTid) REFERENCES EVENT (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_ticket_hall
FOREIGN KEY (HALLid) REFERENCES HALL (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE PAYMENT_METHOD (
id BIGSERIAL NOT NULL, name VARCHAR(20) NOT NULL, PRIMARY KEY (id), CONSTRAINT CHK_payment_method_name
CHECK (name IN ('CASH', 'CARD'))
);
CREATE TABLE PAYMENT (
id BIGSERIAL NOT NULL, amount INT NOT NULL, status VARCHAR(20) NOT NULL, payment_date DATE NOT NULL, USER_ORDERid BIGINT, PAYMENT_METHODid BIGINT, PRIMARY KEY (id), CONSTRAINT CHK_payment_status_values
CHECK (status IN ('PENDING', 'COMPLETED', 'FAILED')),
CONSTRAINT CHK_amount_positive_number
CHECK (amount > 0),
CONSTRAINT FK_payment_user_order
FOREIGN KEY (USER_ORDERid) REFERENCES USER_ORDER (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_payment_payment_method
FOREIGN KEY (PAYMENT_METHODid) REFERENCES PAYMENT_METHOD (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE REFUND (
id BIGSERIAL NOT NULL, amount INT NOT NULL, reason VARCHAR(255) NOT NULL, status VARCHAR(20) NOT NULL, PAYMENTid BIGINT, PRIMARY KEY (id), CONSTRAINT CHK_refund_amount_positive_num
CHECK (amount > 0),
CONSTRAINT CHK_refund_status_values
CHECK (status IN ('REQUESTED', 'APPROVED', 'REJECTED')),
CONSTRAINT FK_refund_payment
FOREIGN KEY (PAYMENTid) REFERENCES PAYMENT (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE REVIEW (
id BIGSERIAL NOT NULL, rating INT NOT NULL, comment VARCHAR(255), APP_USERid BIGINT DEFAULT 1, EVENTid BIGINT, PRIMARY KEY (id), CONSTRAINT CHK_rating_range
CHECK (rating BETWEEN 1 AND 5),
CONSTRAINT FK_review_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE SET DEFAULT,
CONSTRAINT FK_review_event
FOREIGN KEY (EVENTid) REFERENCES EVENT (id) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE NOTIFICATION (
id BIGSERIAL NOT NULL, message VARCHAR(150) NOT NULL, created_at DATE NOT NULL, APP_USERid BIGINT DEFAULT 1, PRIMARY KEY (id), CONSTRAINT FK_notification_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE SET DEFAULT
);
CREATE TABLE WAITLIST (
id BIGSERIAL NOT NULL, created_at DATE NOT NULL, status VARCHAR(20) NOT NULL, EVENTid BIGINT, PRIMARY KEY (id), CONSTRAINT CHK_waitlist_status_values
CHECK (status IN ('PENDING', 'CONFIRMED', 'CANCELLED')),
CONSTRAINT FK_waitlist_event
FOREIGN KEY (EVENTid) REFERENCES EVENT (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
CREATE TABLE USER_WAITLIST (
APP_USERid BIGINT NOT NULL, WAITLISTid BIGINT NOT NULL, PRIMARY KEY (APP_USERid, WAITLISTid), CONSTRAINT FK_user_waitlist_user
FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT FK_user_waitlist_waitlist
FOREIGN KEY (WAITLISTid) REFERENCES WAITLIST (id) ON UPDATE CASCADE ON DELETE RESTRICT
);
Attachments (2)
- ddlEventix.sql (12.9 KB ) - added by 4 days ago.
- ddl.sql (13.2 KB ) - added by 3 days ago.
Download all attachments as: .zip
