Changes between Version 1 and Version 2 of DatabaseCreation


Ignore:
Timestamp:
04/21/26 20:44:57 (11 days ago)
Author:
231027
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseCreation

    v1 v2  
    11= Креирање на базата
    22
     3
    34== DDL
    45
     6```sql
     7
     8CREATE TABLE "Event" (
     9    event_id BIGSERIAL PRIMARY KEY,
     10    name VARCHAR(255) NOT NULL,
     11    description TEXT NOT NULL,
     12    min_age INT NOT NULL
     13);
     14
     15CREATE TABLE "Concert" (
     16    event_id BIGINT PRIMARY KEY,
     17    concert_type VARCHAR(50) NOT NULL,
     18    setlist TEXT NOT NULL,
     19
     20    CONSTRAINT fk_concert_event FOREIGN KEY (event_id) REFERENCES "Event" (event_id)
     21        ON DELETE CASCADE
     22        ON UPDATE CASCADE
     23);
     24
     25CREATE TABLE "Play" (
     26    event_id BIGINT PRIMARY KEY,
     27    genre VARCHAR(50) NOT NULL,
     28    number_of_acts INT NOT NULL,
     29    language VARCHAR(50) NOT NULL,
     30    director VARCHAR(255) NOT NULL,
     31
     32    CONSTRAINT fk_play_event FOREIGN KEY (event_id) REFERENCES "Event" (event_id)
     33        ON DELETE CASCADE
     34        ON UPDATE CASCADE
     35);
     36
     37
     38CREATE TABLE "Performer" (
     39    performer_id BIGSERIAL PRIMARY KEY,
     40    name VARCHAR(255) NOT NULL,
     41    number_of_members INT NOT NULL,
     42    contact_email VARCHAR(255) NOT NULL UNIQUE,
     43    technical_requirements TEXT NOT NULL,
     44
     45    CONSTRAINT performer_contact_email_check CHECK (contact_email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')
     46);
     47
     48CREATE TABLE "Musical_Performer" (
     49    performer_id BIGINT PRIMARY KEY,
     50    musician_type VARCHAR(50) NOT NULL,
     51    genre VARCHAR(50) NOT NULL,
     52    record_label VARCHAR(255) NOT NULL,
     53
     54    CONSTRAINT fk_musical_performer_performer FOREIGN KEY (performer_id) REFERENCES "Performer" (performer_id)
     55        ON DELETE CASCADE
     56        ON UPDATE CASCADE
     57);
     58
     59CREATE TABLE "Acting_Performer" (
     60    performer_id BIGINT PRIMARY KEY,
     61    role_type VARCHAR(50) NOT NULL,
     62    acting_style VARCHAR(100) NOT NULL,
     63    agency VARCHAR(255) NOT NULL,
     64
     65    CONSTRAINT fk_acting_performer_performer FOREIGN KEY (performer_id) REFERENCES "Performer" (performer_id)
     66        ON DELETE CASCADE
     67        ON UPDATE CASCADE
     68);
     69
     70
     71CREATE TABLE "Venue" (
     72    venue_id BIGSERIAL PRIMARY KEY,
     73    name VARCHAR(255) NOT NULL,
     74    number_of_sections INT NOT NULL,
     75    number_of_seats INT NOT NULL,
     76    address_street VARCHAR(255) NOT NULL,
     77    address_city VARCHAR(100) NOT NULL,
     78    address_country VARCHAR(100) NOT NULL
     79);
     80
     81CREATE TABLE "Section" (
     82    section_id BIGSERIAL PRIMARY KEY,
     83    venue_id BIGINT NOT NULL,
     84    name VARCHAR(255) NOT NULL,
     85    number_of_seats INT NOT NULL,
     86
     87    CONSTRAINT fk_section_venue FOREIGN KEY (venue_id) REFERENCES "Venue" (venue_id)
     88        ON DELETE CASCADE
     89        ON UPDATE CASCADE,
     90    CONSTRAINT uq_section_venue_name UNIQUE (venue_id, name)
     91);
     92
     93CREATE TABLE "Seat" (
     94    seat_id BIGSERIAL PRIMARY KEY,
     95    section_id BIGINT NOT NULL,
     96    seat_number INT NOT NULL,
     97
     98    CONSTRAINT fk_seat_section FOREIGN KEY (section_id) REFERENCES "Section" (section_id)
     99        ON DELETE CASCADE
     100        ON UPDATE CASCADE,
     101    CONSTRAINT uq_seat_section_number UNIQUE (section_id, seat_number)
     102);
     103
     104
     105CREATE TABLE "Organizer" (
     106    organizer_id BIGSERIAL PRIMARY KEY,
     107    name VARCHAR(255) NOT NULL,
     108    contact_email VARCHAR(255) NOT NULL UNIQUE,
     109
     110    CONSTRAINT organizer_contact_email_check CHECK (contact_email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')
     111);
     112
     113CREATE TABLE "Sponsor" (
     114    sponsor_id BIGSERIAL PRIMARY KEY,
     115    name VARCHAR(255) NOT NULL,
     116    contact_email VARCHAR(255) NOT NULL UNIQUE,
     117    sponsor_type VARCHAR(50) NOT NULL,
     118
     119    CONSTRAINT sponsor_contact_email_check CHECK (contact_email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')
     120);
     121
     122
     123CREATE TABLE "Event_Happening" (
     124    event_happening_id BIGSERIAL PRIMARY KEY,
     125    event_id BIGINT NOT NULL,
     126    event_time TIMESTAMP NOT NULL,
     127    venue_id BIGINT NOT NULL,
     128    duration INT NOT NULL,
     129
     130    CONSTRAINT fk_event_happening_event FOREIGN KEY (event_id) REFERENCES "Event" (event_id)
     131        ON DELETE RESTRICT
     132        ON UPDATE CASCADE,
     133    CONSTRAINT fk_event_happening_venue FOREIGN KEY (venue_id) REFERENCES "Venue" (venue_id)
     134        ON DELETE RESTRICT
     135        ON UPDATE CASCADE,
     136    CONSTRAINT uq_happening_time_venue UNIQUE (event_time, venue_id)
     137);
     138
     139CREATE TABLE "Event_Period" (
     140    period_id BIGSERIAL PRIMARY KEY,
     141    event_happening_id BIGINT NOT NULL,
     142    name VARCHAR(255) NOT NULL,
     143    start_date DATE NOT NULL,
     144    end_date DATE NOT NULL,
     145    price_change_percent INT NOT NULL,
     146    increase_decrease BOOLEAN NOT NULL,
     147
     148    CONSTRAINT fk_event_period_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)
     149        ON DELETE CASCADE
     150        ON UPDATE CASCADE,
     151    CONSTRAINT uq_period_happening_name UNIQUE (event_happening_id, name),
     152    CONSTRAINT event_period_dates_check CHECK (start_date <= end_date)
     153);
     154
     155
     156CREATE TABLE "Event_Happening_Performer" (
     157    event_happening_id BIGINT NOT NULL,
     158    performer_id BIGINT NOT NULL,
     159
     160    CONSTRAINT pk_event_happening_performer PRIMARY KEY (event_happening_id, performer_id),
     161    CONSTRAINT fk_ehp_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)
     162        ON DELETE CASCADE
     163        ON UPDATE CASCADE,
     164    CONSTRAINT fk_ehp_performer FOREIGN KEY (performer_id) REFERENCES "Performer" (performer_id)
     165        ON DELETE CASCADE
     166        ON UPDATE CASCADE,
     167    CONSTRAINT uq_performer_at_time UNIQUE (performer_id, event_happening_id)
     168);
     169
     170CREATE TABLE "Event_Happening_Organizer" (
     171    event_happening_id BIGINT NOT NULL,
     172    organizer_id BIGINT NOT NULL,
     173
     174    CONSTRAINT event_happening_organizer PRIMARY KEY (event_happening_id, organizer_id),
     175    CONSTRAINT fk_eho_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)
     176        ON DELETE CASCADE
     177        ON UPDATE CASCADE,
     178    CONSTRAINT fk_eho_organizer FOREIGN KEY (organizer_id) REFERENCES "Organizer" (organizer_id)
     179        ON DELETE CASCADE
     180        ON UPDATE CASCADE
     181);
     182
     183CREATE TABLE "Event_Happening_Sponsor" (
     184    event_happening_id BIGINT NOT NULL,
     185    sponsor_id BIGINT NOT NULL,
     186
     187    CONSTRAINT event_happening_sponsor PRIMARY KEY (event_happening_id, sponsor_id),
     188    CONSTRAINT fk_ehs_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)
     189        ON DELETE CASCADE
     190        ON UPDATE CASCADE,
     191    CONSTRAINT fk_ehs_sponsor FOREIGN KEY (sponsor_id) REFERENCES "Sponsor" (sponsor_id)
     192        ON DELETE CASCADE
     193        ON UPDATE CASCADE
     194);
     195
     196
     197CREATE TABLE "User" (
     198    user_id BIGSERIAL PRIMARY KEY,
     199    username VARCHAR(50) NOT NULL UNIQUE,
     200    first_name VARCHAR(100) NOT NULL,
     201    last_name VARCHAR(100) NOT NULL,
     202    date_of_birth DATE NOT NULL,
     203    contact_email VARCHAR(255) NOT NULL UNIQUE,
     204    password VARCHAR(100) NOT NULL,
     205    registration_timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     206
     207    CONSTRAINT user_date_of_birth_check CHECK (date_of_birth < CURRENT_DATE),
     208    CONSTRAINT user_contact_email_check CHECK (contact_email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'),
     209    CONSTRAINT user_password_check CHECK (
     210        length(password) >= 8 AND
     211        password ~ '[A-Z]' AND
     212        password ~ '[a-z]' AND
     213        password ~ '[0-9]' AND
     214        password ~ '[^a-zA-Z0-9]'
     215    )
     216);
     217
     218CREATE TABLE "Event_Happening_Rating" (
     219    rating_id BIGSERIAL PRIMARY KEY,
     220    rating INT NOT NULL CHECK (rating BETWEEN 1 AND 10),
     221    comment TEXT,
     222    event_happening_id BIGINT NOT NULL,
     223    user_id BIGINT NOT NULL DEFAULT 0,
     224
     225    CONSTRAINT fk_event_happening_rating_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)
     226        ON DELETE CASCADE
     227        ON UPDATE CASCADE,
     228    CONSTRAINT fk_event_happening_rating_user FOREIGN KEY (user_id) REFERENCES "User" (user_id)
     229        ON DELETE SET DEFAULT
     230        ON UPDATE CASCADE,
     231    CONSTRAINT uq_rating_happening_user UNIQUE (event_happening_id, user_id)
     232);
     233
     234
     235CREATE TABLE "Ticket" (
     236    ticket_id BIGSERIAL PRIMARY KEY,
     237    ticket_type VARCHAR(50) NOT NULL,
     238    base_price FLOAT4 NOT NULL,
     239    is_available BOOLEAN NOT NULL DEFAULT TRUE,
     240    event_happening_id BIGINT NOT NULL,
     241    seat_id BIGINT NOT NULL,
     242
     243    CONSTRAINT fk_ticket_event_happening FOREIGN KEY (event_happening_id)
     244        REFERENCES "Event_Happening" (event_happening_id)
     245        ON DELETE RESTRICT
     246        ON UPDATE CASCADE,
     247    CONSTRAINT fk_ticket_seat FOREIGN KEY (seat_id)
     248        REFERENCES "Seat" (seat_id)
     249        ON DELETE CASCADE
     250        ON UPDATE CASCADE,
     251    CONSTRAINT uq_ticket_event_happening_seat UNIQUE (event_happening_id, seat_id)
     252);
     253
     254CREATE TABLE "Ticket_Purchase" (
     255    purchase_id BIGSERIAL PRIMARY KEY,
     256    ticket_id BIGINT NOT NULL,
     257    user_id BIGINT NOT NULL DEFAULT 0,
     258    qr_code VARCHAR(255) NOT NULL UNIQUE,
     259    purchase_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     260    purchase_amount FLOAT4 NOT NULL,
     261
     262    CONSTRAINT fk_purchase_ticket FOREIGN KEY (ticket_id) REFERENCES "Ticket" (ticket_id)
     263        ON DELETE RESTRICT
     264        ON UPDATE CASCADE,
     265    CONSTRAINT fk_purchase_user FOREIGN KEY (user_id) REFERENCES "User" (user_id)
     266        ON DELETE SET DEFAULT
     267        ON UPDATE CASCADE
     268);
     269
     270CREATE TABLE "Ticket_Refund" (
     271    refund_id BIGSERIAL PRIMARY KEY,
     272    purchase_id BIGINT NOT NULL UNIQUE,
     273    refund_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     274    refund_amount FLOAT4 NOT NULL,
     275    reason TEXT,
     276
     277    CONSTRAINT fk_refund_purchase FOREIGN KEY (purchase_id) REFERENCES "Ticket_Purchase" (purchase_id)
     278        ON DELETE CASCADE
     279        ON UPDATE CASCADE
     280);
     281
     282```
     283
    5284== Погледи (Views)