Changes between Version 1 and Version 2 of Eventix/Faza2A


Ignore:
Timestamp:
04/15/26 11:36:04 (2 weeks ago)
Author:
231070
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Eventix/Faza2A

    v1 v2  
    77== Содржина на DDL скрипта
    88
    9 CREATE TABLE APP_USER (
    10     id            BIGSERIAL    NOT NULL,
    11     first_name    VARCHAR(20),
    12     last_name     VARCHAR(20),
    13     email         VARCHAR(50)  NOT NULL UNIQUE,
    14     phone         VARCHAR(20)  NOT NULL,
    15     created_at    DATE         NOT NULL,
    16     password_hash VARCHAR(20)  NOT NULL,
    17     PRIMARY KEY (id),
    18     CONSTRAINT CHK_email_format
    19         CHECK (email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'),
    20     CONSTRAINT CHK_phone_number_format
    21         CHECK (phone ~ '^[0-9]{7,15}$')
    22 );
    23 
    24 CREATE TABLE ROLES (
    25     id   BIGSERIAL   NOT NULL,
    26     role VARCHAR(20) NOT NULL,
    27     PRIMARY KEY (id),
    28     CONSTRAINT CHK_role_title
    29         CHECK (role IN ('ADMINISTRATOR', 'USER'))
    30 );
    31 
    32 CREATE TABLE USER_ROLES (
    33     APP_USERid BIGINT NOT NULL,
    34     ROLESid    BIGINT NOT NULL,
    35     PRIMARY KEY (APP_USERid, ROLESid),
    36     CONSTRAINT FK_user_roles_user
    37         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    38         ON UPDATE CASCADE ON DELETE RESTRICT,
    39     CONSTRAINT FK_user_roles_role
    40         FOREIGN KEY (ROLESid) REFERENCES ROLES (id)
    41         ON UPDATE CASCADE ON DELETE RESTRICT
    42 );
    43 
    44 CREATE TABLE CATEGORIZATION (
    45     id   BIGSERIAL   NOT NULL,
    46     name VARCHAR(20) NOT NULL,
    47     PRIMARY KEY (id),
    48     CONSTRAINT CHK_category_values
    49         CHECK (name IN ('Concerts', 'Theatre', 'Cinema', 'Festivals', 'Exhibitions', 'Seminars'))
    50 );
    51 
    52 CREATE TABLE SUBCATEGORY (
    53     id              BIGSERIAL   NOT NULL,
    54     name            VARCHAR(20) NOT NULL,
    55     CATEGORIZATIONid BIGINT,
    56     PRIMARY KEY (id),
    57     CONSTRAINT FK_subcategory_categorization
    58         FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id)
    59         ON UPDATE CASCADE ON DELETE SET NULL
    60 );
    61 
    62 CREATE TABLE USER_CATEGORY_SUBSCRIPTION (
    63     APP_USERid       BIGINT NOT NULL DEFAULT 1,
    64     CATEGORIZATIONid BIGINT NOT NULL DEFAULT 1,
    65     PRIMARY KEY (APP_USERid, CATEGORIZATIONid),
    66     CONSTRAINT FK_user_category_sub_user
    67         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    68         ON UPDATE CASCADE ON DELETE SET DEFAULT,
    69     CONSTRAINT FK_user_category_sub_categorization
    70         FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id)
    71         ON UPDATE CASCADE ON DELETE SET DEFAULT
    72 );
    73 
    74 CREATE TABLE USER_SUBCATEGORY_SUBSCRIPTION (
    75     APP_USERid   BIGINT NOT NULL DEFAULT 1,
    76     SUBCATEGORYid BIGINT NOT NULL DEFAULT 1,
    77     PRIMARY KEY (APP_USERid, SUBCATEGORYid),
    78     CONSTRAINT FK_user_subcategory_sub_user
    79         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    80         ON UPDATE CASCADE ON DELETE SET DEFAULT,
    81     CONSTRAINT FK_user_subcategory_sub_subcategory
    82         FOREIGN KEY (SUBCATEGORYid) REFERENCES SUBCATEGORY (id)
    83         ON UPDATE CASCADE ON DELETE SET DEFAULT
    84 );
    85 
    86 CREATE TABLE EVENT (
    87     id              BIGSERIAL    NOT NULL,
    88     title           VARCHAR(50)  NOT NULL,
    89     description     VARCHAR(255),
    90     start_date      DATE         NOT NULL,
    91     end_date        DATE         NOT NULL,
    92     CATEGORIZATIONid BIGINT,
    93     PRIMARY KEY (id),
    94     CONSTRAINT CHK_event_dates
    95         CHECK (end_date >= start_date),
    96     CONSTRAINT FK_event_categorization
    97         FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id)
    98         ON UPDATE CASCADE ON DELETE SET NULL
    99 );
    100 
    101 CREATE TABLE EVENT_IMAGE (
    102     id        BIGSERIAL    NOT NULL,
    103     image_url VARCHAR(255) NOT NULL,
    104     EVENTid   BIGINT,
    105     PRIMARY KEY (id),
    106     CONSTRAINT FK_event_image_event
    107         FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
    108         ON UPDATE CASCADE ON DELETE CASCADE
    109 );
    110 
    111 CREATE TABLE EVENT_ROLE (
    112     id   BIGSERIAL   NOT NULL,
    113     role VARCHAR(20) NOT NULL,
    114     PRIMARY KEY (id),
    115     CONSTRAINT CHK_event_role_values
    116         CHECK (role IN ('EVENT_ADMIN', 'SALES_MANAGER', 'INFO_ADMIN', 'CONTENT_MANAGER'))
    117 );
    118 
    119 CREATE TABLE USER_EVENT (
    120     APP_USERid   BIGINT NOT NULL,
    121     EVENTid      BIGINT NOT NULL,
    122     EVENT_ROLEid BIGINT NOT NULL,
    123     PRIMARY KEY (APP_USERid, EVENTid),
    124     CONSTRAINT FK_user_event_user
    125         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    126         ON UPDATE CASCADE ON DELETE RESTRICT,
    127     CONSTRAINT FK_user_event_event
    128         FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
    129         ON UPDATE CASCADE ON DELETE RESTRICT,
    130     CONSTRAINT FK_user_event_role
    131         FOREIGN KEY (EVENT_ROLEid) REFERENCES EVENT_ROLE (id)
    132         ON UPDATE CASCADE ON DELETE RESTRICT
    133 );
    134 
    135 CREATE TABLE VENUE (
    136     id      BIGSERIAL   NOT NULL,
    137     name    VARCHAR(20) NOT NULL,
    138     city    VARCHAR(20),
    139     address VARCHAR(50) NOT NULL,
    140     PRIMARY KEY (id)
    141 );
    142 
    143 CREATE TABLE HALL (
    144     id       BIGSERIAL   NOT NULL,
    145     name     VARCHAR(20) NOT NULL,
    146     capacity INT         NOT NULL,
    147     VENUEid  BIGINT,
    148     PRIMARY KEY (id),
    149     CONSTRAINT CHK_capacity_positive_number
    150         CHECK (capacity > 0),
    151     CONSTRAINT FK_hall_venue
    152         FOREIGN KEY (VENUEid) REFERENCES VENUE (id)
    153         ON UPDATE CASCADE ON DELETE RESTRICT
    154 );
    155 
    156 CREATE TABLE EVENT_HALL (
    157     EVENTid        BIGINT  NOT NULL,
    158     HALLid         BIGINT  NOT NULL,
    159     allowed_access BOOLEAN NOT NULL,
    160     PRIMARY KEY (EVENTid, HALLid),
    161     CONSTRAINT FK_event_hall_event
    162         FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
    163         ON UPDATE CASCADE ON DELETE RESTRICT,
    164     CONSTRAINT FK_event_hall_hall
    165         FOREIGN KEY (HALLid) REFERENCES HALL (id)
    166         ON UPDATE CASCADE ON DELETE RESTRICT
    167 );
    168 
    169 CREATE TABLE TICKET_TYPE (
    170     id                 BIGSERIAL   NOT NULL,
    171     name               VARCHAR(50) NOT NULL,
    172     quantity_available INT         NOT NULL,
    173     PRIMARY KEY (id),
    174     CONSTRAINT CHK_ticket_quantity_positive_num
    175         CHECK (quantity_available >= 0),
    176     CONSTRAINT CHK_ticket_type_values
    177         CHECK (name IN ('GENERAL_ADMISSION', 'STANDARD', 'PARTER', 'VIP'))
    178 );
    179 
    180 CREATE TABLE SEAT (
    181     id            BIGSERIAL NOT NULL,
    182     number        INT       NOT NULL,
    183     HALLid        BIGINT,
    184     TICKET_TYPEid BIGINT,
    185     PRIMARY KEY (id),
    186     CONSTRAINT FK_seat_hall
    187         FOREIGN KEY (HALLid) REFERENCES HALL (id)
    188         ON UPDATE CASCADE ON DELETE RESTRICT,
    189     CONSTRAINT FK_seat_ticket_type
    190         FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id)
    191         ON UPDATE CASCADE ON DELETE SET NULL
    192 );
    193 
    194 CREATE TABLE EVENT_TICKET_TYPE (
    195     EVENTid       BIGINT NOT NULL,
    196     TICKET_TYPEid BIGINT NOT NULL,
    197     price         INT    NOT NULL,
    198     PRIMARY KEY (EVENTid, TICKET_TYPEid),
    199     CONSTRAINT CHK_ticket_price_positive_num
    200         CHECK (price > 0),
    201     CONSTRAINT FK_event_ticket_type_event
    202         FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
    203         ON UPDATE CASCADE ON DELETE RESTRICT,
    204     CONSTRAINT FK_event_ticket_type_ticket_type
    205         FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id)
    206         ON UPDATE CASCADE ON DELETE RESTRICT
    207 );
    208 
    209 CREATE TABLE STATUS (
    210     id          BIGSERIAL    NOT NULL,
    211     name        VARCHAR(20)  NOT NULL,
    212     description VARCHAR(255),
    213     PRIMARY KEY (id),
    214     CONSTRAINT CHK_order_status_values
    215         CHECK (name IN ('CREATED', 'PAID', 'CANCELLED'))
    216 );
    217 
    218 CREATE TABLE PROMO_CODE (
    219     id              BIGSERIAL   NOT NULL,
    220     code            VARCHAR(20) NOT NULL UNIQUE,
    221     discount_percent INT        NOT NULL,
    222     expiration_date  DATE       NOT NULL,
    223     APP_USERid       BIGINT     DEFAULT 1,
    224     PRIMARY KEY (id),
    225     CONSTRAINT CHK_discount_percent
    226         CHECK (discount_percent > 0 AND discount_percent < 100),
    227     CONSTRAINT FK_promo_code_user
    228         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    229         ON UPDATE CASCADE ON DELETE SET DEFAULT
    230 );
    231 
    232 CREATE TABLE USER_ORDER (
    233     id           BIGSERIAL NOT NULL,
    234     order_date   DATE      NOT NULL,
    235     total_amount INT       NOT NULL,
    236     APP_USERid   BIGINT,
    237     STATUSid     BIGINT,
    238     PROMO_CODEid BIGINT,
    239     PRIMARY KEY (id),
    240     CONSTRAINT CHK_order_amount_positive_num
    241         CHECK (total_amount > 0),
    242     CONSTRAINT FK_user_order_user
    243         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    244         ON UPDATE CASCADE ON DELETE RESTRICT,
    245     CONSTRAINT FK_user_order_status
    246         FOREIGN KEY (STATUSid) REFERENCES STATUS (id)
    247         ON UPDATE CASCADE ON DELETE RESTRICT,
    248     CONSTRAINT FK_user_order_promo_code
    249         FOREIGN KEY (PROMO_CODEid) REFERENCES PROMO_CODE (id)
    250         ON UPDATE CASCADE ON DELETE SET NULL
    251 );
    252 
    253 CREATE TABLE TICKET (
    254     id            BIGSERIAL   NOT NULL,
    255     code          VARCHAR(50) NOT NULL UNIQUE,
    256     status        VARCHAR(20) NOT NULL,
    257     TICKET_TYPEid BIGINT,
    258     USER_ORDERid  BIGINT,
    259     SEATid        BIGINT,
    260     APP_USERid    BIGINT,
    261     EVENTid       BIGINT,
    262     HALLid        BIGINT,
    263     PRIMARY KEY (id),
    264     CONSTRAINT CHK_ticket_status_values
    265         CHECK (status IN ('ACTIVE', 'USED', 'CANCELLED')),
    266     CONSTRAINT FK_ticket_ticket_type
    267         FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id)
    268         ON UPDATE CASCADE ON DELETE RESTRICT,
    269     CONSTRAINT FK_ticket_user_order
    270         FOREIGN KEY (USER_ORDERid) REFERENCES USER_ORDER (id)
    271         ON UPDATE CASCADE ON DELETE RESTRICT,
    272     CONSTRAINT FK_ticket_seat
    273         FOREIGN KEY (SEATid) REFERENCES SEAT (id)
    274         ON UPDATE CASCADE ON DELETE RESTRICT,
    275     CONSTRAINT FK_ticket_user
    276         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    277         ON UPDATE CASCADE ON DELETE RESTRICT,
    278     CONSTRAINT FK_ticket_event
    279         FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
    280         ON UPDATE CASCADE ON DELETE RESTRICT,
    281     CONSTRAINT FK_ticket_hall
    282         FOREIGN KEY (HALLid) REFERENCES HALL (id)
    283         ON UPDATE CASCADE ON DELETE RESTRICT
    284 );
    285 
    286 CREATE TABLE PAYMENT_METHOD (
    287     id   BIGSERIAL   NOT NULL,
    288     name VARCHAR(20) NOT NULL,
    289     PRIMARY KEY (id),
    290     CONSTRAINT CHK_payment_method_name
    291         CHECK (name IN ('CASH', 'CARD'))
    292 );
    293 
    294 CREATE TABLE PAYMENT (
    295     id               BIGSERIAL   NOT NULL,
    296     amount           INT         NOT NULL,
    297     status           VARCHAR(20) NOT NULL,
    298     payment_date     DATE        NOT NULL,
    299     USER_ORDERid     BIGINT,
    300     PAYMENT_METHODid BIGINT,
    301     PRIMARY KEY (id),
    302     CONSTRAINT CHK_payment_status_values
    303         CHECK (status IN ('PENDING', 'COMPLETED', 'FAILED')),
    304     CONSTRAINT CHK_amount_positive_number
    305         CHECK (amount > 0),
    306     CONSTRAINT FK_payment_user_order
    307         FOREIGN KEY (USER_ORDERid) REFERENCES USER_ORDER (id)
    308         ON UPDATE CASCADE ON DELETE RESTRICT,
    309     CONSTRAINT FK_payment_payment_method
    310         FOREIGN KEY (PAYMENT_METHODid) REFERENCES PAYMENT_METHOD (id)
    311         ON UPDATE CASCADE ON DELETE RESTRICT
    312 );
    313 
    314 CREATE TABLE REFUND (
    315     id        BIGSERIAL    NOT NULL,
    316     amount    INT          NOT NULL,
    317     reason    VARCHAR(255) NOT NULL,
    318     status    VARCHAR(20)  NOT NULL,
    319     PAYMENTid BIGINT,
    320     PRIMARY KEY (id),
    321     CONSTRAINT CHK_refund_amount_positive_num
    322         CHECK (amount > 0),
    323     CONSTRAINT CHK_refund_status_values
    324         CHECK (status IN ('REQUESTED', 'APPROVED', 'REJECTED')),
    325     CONSTRAINT FK_refund_payment
    326         FOREIGN KEY (PAYMENTid) REFERENCES PAYMENT (id)
    327         ON UPDATE CASCADE ON DELETE RESTRICT
    328 );
    329 
    330 CREATE TABLE REVIEW (
    331     id         BIGSERIAL    NOT NULL,
    332     rating     INT          NOT NULL,
    333     comment    VARCHAR(255),
    334     APP_USERid BIGINT DEFAULT 1,
    335     EVENTid    BIGINT,
    336     PRIMARY KEY (id),
    337     CONSTRAINT CHK_rating_range
    338         CHECK (rating BETWEEN 1 AND 5),
    339     CONSTRAINT FK_review_user
    340         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    341         ON UPDATE CASCADE ON DELETE SET DEFAULT,
    342     CONSTRAINT FK_review_event
    343         FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
    344         ON UPDATE CASCADE ON DELETE CASCADE
    345 );
    346 
    347 CREATE TABLE NOTIFICATION (
    348     id         BIGSERIAL    NOT NULL,
    349     message    VARCHAR(150) NOT NULL,
    350     created_at DATE         NOT NULL,
    351     APP_USERid BIGINT DEFAULT 1,
    352     PRIMARY KEY (id),
    353     CONSTRAINT FK_notification_user
    354         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    355         ON UPDATE CASCADE ON DELETE SET DEFAULT
    356 );
    357 
    358 CREATE TABLE WAITLIST (
    359     id         BIGSERIAL   NOT NULL,
    360     created_at DATE        NOT NULL,
    361     status     VARCHAR(20) NOT NULL,
    362     EVENTid    BIGINT,
    363     PRIMARY KEY (id),
    364     CONSTRAINT CHK_waitlist_status_values
    365         CHECK (status IN ('PENDING', 'CONFIRMED', 'CANCELLED')),
    366     CONSTRAINT FK_waitlist_event
    367         FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
    368         ON UPDATE CASCADE ON DELETE RESTRICT
    369 );
    370 
    371 CREATE TABLE USER_WAITLIST (
    372     APP_USERid BIGINT NOT NULL,
    373     WAITLISTid BIGINT NOT NULL,
    374     PRIMARY KEY (APP_USERid, WAITLISTid),
    375     CONSTRAINT FK_user_waitlist_user
    376         FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
    377         ON UPDATE CASCADE ON DELETE RESTRICT,
    378     CONSTRAINT FK_user_waitlist_waitlist
    379         FOREIGN KEY (WAITLISTid) REFERENCES WAITLIST (id)
    380         ON UPDATE CASCADE ON DELETE RESTRICT
    381 );
     9Прикачена во Attachments.