wiki:DatabaseCreation

Version 4 (modified by 231027, 11 days ago) ( diff )

--

Креирање на базата

DDL

`

CREATE TABLE "Event" (

event_id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT NOT NULL, min_age INT NOT NULL

);

CREATE TABLE "Concert" (

event_id BIGINT PRIMARY KEY, concert_type VARCHAR(50) NOT NULL, setlist TEXT NOT NULL,

CONSTRAINT fk_concert_event FOREIGN KEY (event_id) REFERENCES "Event" (event_id)

ON DELETE CASCADE ON UPDATE CASCADE

);

CREATE TABLE "Play" (

event_id BIGINT PRIMARY KEY, genre VARCHAR(50) NOT NULL, number_of_acts INT NOT NULL, language VARCHAR(50) NOT NULL, director VARCHAR(255) NOT NULL,

CONSTRAINT fk_play_event FOREIGN KEY (event_id) REFERENCES "Event" (event_id)

ON DELETE CASCADE ON UPDATE CASCADE

);

CREATE TABLE "Performer" (

performer_id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, number_of_members INT NOT NULL, contact_email VARCHAR(255) NOT NULL UNIQUE, technical_requirements TEXT NOT NULL,

CONSTRAINT performer_contact_email_check CHECK (contact_email ~ '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')

);

CREATE TABLE "Musical_Performer" (

performer_id BIGINT PRIMARY KEY, musician_type VARCHAR(50) NOT NULL, genre VARCHAR(50) NOT NULL, record_label VARCHAR(255) NOT NULL,

CONSTRAINT fk_musical_performer_performer FOREIGN KEY (performer_id) REFERENCES "Performer" (performer_id)

ON DELETE CASCADE ON UPDATE CASCADE

);

CREATE TABLE "Acting_Performer" (

performer_id BIGINT PRIMARY KEY, role_type VARCHAR(50) NOT NULL, acting_style VARCHAR(100) NOT NULL, agency VARCHAR(255) NOT NULL,

CONSTRAINT fk_acting_performer_performer FOREIGN KEY (performer_id) REFERENCES "Performer" (performer_id)

ON DELETE CASCADE ON UPDATE CASCADE

);

CREATE TABLE "Venue" (

venue_id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, number_of_sections INT NOT NULL, number_of_seats INT NOT NULL, address_street VARCHAR(255) NOT NULL, address_city VARCHAR(100) NOT NULL, address_country VARCHAR(100) NOT NULL

);

CREATE TABLE "Section" (

section_id BIGSERIAL PRIMARY KEY, venue_id BIGINT NOT NULL, name VARCHAR(255) NOT NULL, number_of_seats INT NOT NULL,

CONSTRAINT fk_section_venue FOREIGN KEY (venue_id) REFERENCES "Venue" (venue_id)

ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT uq_section_venue_name UNIQUE (venue_id, name)

);

CREATE TABLE "Seat" (

seat_id BIGSERIAL PRIMARY KEY, section_id BIGINT NOT NULL, seat_number INT NOT NULL,

CONSTRAINT fk_seat_section FOREIGN KEY (section_id) REFERENCES "Section" (section_id)

ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT uq_seat_section_number UNIQUE (section_id, seat_number)

);

CREATE TABLE "Organizer" (

organizer_id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, contact_email VARCHAR(255) NOT NULL UNIQUE,

CONSTRAINT organizer_contact_email_check CHECK (contact_email ~ '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')

);

CREATE TABLE "Sponsor" (

sponsor_id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, contact_email VARCHAR(255) NOT NULL UNIQUE, sponsor_type VARCHAR(50) NOT NULL,

CONSTRAINT sponsor_contact_email_check CHECK (contact_email ~ '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')

);

CREATE TABLE "Event_Happening" (

event_happening_id BIGSERIAL PRIMARY KEY, event_id BIGINT NOT NULL, event_time TIMESTAMP NOT NULL, venue_id BIGINT NOT NULL, duration INT NOT NULL,

CONSTRAINT fk_event_happening_event FOREIGN KEY (event_id) REFERENCES "Event" (event_id)

ON DELETE RESTRICT ON UPDATE CASCADE,

CONSTRAINT fk_event_happening_venue FOREIGN KEY (venue_id) REFERENCES "Venue" (venue_id)

ON DELETE RESTRICT ON UPDATE CASCADE,

CONSTRAINT uq_happening_time_venue UNIQUE (event_time, venue_id)

);

CREATE TABLE "Event_Period" (

period_id BIGSERIAL PRIMARY KEY, event_happening_id BIGINT NOT NULL, name VARCHAR(255) NOT NULL, start_date DATE NOT NULL, end_date DATE NOT NULL, price_change_percent INT NOT NULL, increase_decrease BOOLEAN NOT NULL,

CONSTRAINT fk_event_period_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)

ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT uq_period_happening_name UNIQUE (event_happening_id, name), CONSTRAINT event_period_dates_check CHECK (start_date <= end_date)

);

CREATE TABLE "Event_Happening_Performer" (

event_happening_id BIGINT NOT NULL, performer_id BIGINT NOT NULL,

CONSTRAINT pk_event_happening_performer PRIMARY KEY (event_happening_id, performer_id), CONSTRAINT fk_ehp_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)

ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT fk_ehp_performer FOREIGN KEY (performer_id) REFERENCES "Performer" (performer_id)

ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT uq_performer_at_time UNIQUE (performer_id, event_happening_id)

);

CREATE TABLE "Event_Happening_Organizer" (

event_happening_id BIGINT NOT NULL, organizer_id BIGINT NOT NULL,

CONSTRAINT event_happening_organizer PRIMARY KEY (event_happening_id, organizer_id), CONSTRAINT fk_eho_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)

ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT fk_eho_organizer FOREIGN KEY (organizer_id) REFERENCES "Organizer" (organizer_id)

ON DELETE CASCADE ON UPDATE CASCADE

);

CREATE TABLE "Event_Happening_Sponsor" (

event_happening_id BIGINT NOT NULL, sponsor_id BIGINT NOT NULL,

CONSTRAINT event_happening_sponsor PRIMARY KEY (event_happening_id, sponsor_id), CONSTRAINT fk_ehs_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)

ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT fk_ehs_sponsor FOREIGN KEY (sponsor_id) REFERENCES "Sponsor" (sponsor_id)

ON DELETE CASCADE ON UPDATE CASCADE

);

CREATE TABLE "User" (

user_id BIGSERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, date_of_birth DATE NOT NULL, contact_email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, registration_timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

CONSTRAINT user_date_of_birth_check CHECK (date_of_birth < CURRENT_DATE), CONSTRAINT user_contact_email_check CHECK (contact_email ~ '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'), CONSTRAINT user_password_check CHECK (

length(password) >= 8 AND password ~ '[A-Z]' AND password ~ '[a-z]' AND password ~ '[0-9]' AND password ~ '[a-zA-Z0-9]'

)

);

CREATE TABLE "Event_Happening_Rating" (

rating_id BIGSERIAL PRIMARY KEY, rating INT NOT NULL CHECK (rating BETWEEN 1 AND 10), comment TEXT, event_happening_id BIGINT NOT NULL, user_id BIGINT NOT NULL DEFAULT 0,

CONSTRAINT fk_event_happening_rating_event_happening FOREIGN KEY (event_happening_id) REFERENCES "Event_Happening" (event_happening_id)

ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT fk_event_happening_rating_user FOREIGN KEY (user_id) REFERENCES "User" (user_id)

ON DELETE SET DEFAULT ON UPDATE CASCADE,

CONSTRAINT uq_rating_happening_user UNIQUE (event_happening_id, user_id)

);

CREATE TABLE "Ticket" (

ticket_id BIGSERIAL PRIMARY KEY, ticket_type VARCHAR(50) NOT NULL, base_price FLOAT4 NOT NULL, is_available BOOLEAN NOT NULL DEFAULT TRUE, event_happening_id BIGINT NOT NULL, seat_id BIGINT NOT NULL,

CONSTRAINT fk_ticket_event_happening FOREIGN KEY (event_happening_id)

REFERENCES "Event_Happening" (event_happening_id) ON DELETE RESTRICT ON UPDATE CASCADE,

CONSTRAINT fk_ticket_seat FOREIGN KEY (seat_id)

REFERENCES "Seat" (seat_id) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT uq_ticket_event_happening_seat UNIQUE (event_happening_id, seat_id)

);

CREATE TABLE "Ticket_Purchase" (

purchase_id BIGSERIAL PRIMARY KEY, ticket_id BIGINT NOT NULL, user_id BIGINT NOT NULL DEFAULT 0, qr_code VARCHAR(255) NOT NULL UNIQUE, purchase_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, purchase_amount FLOAT4 NOT NULL,

CONSTRAINT fk_purchase_ticket FOREIGN KEY (ticket_id) REFERENCES "Ticket" (ticket_id)

ON DELETE RESTRICT ON UPDATE CASCADE,

CONSTRAINT fk_purchase_user FOREIGN KEY (user_id) REFERENCES "User" (user_id)

ON DELETE SET DEFAULT ON UPDATE CASCADE

);

CREATE TABLE "Ticket_Refund" (

refund_id BIGSERIAL PRIMARY KEY, purchase_id BIGINT NOT NULL UNIQUE, refund_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, refund_amount FLOAT4 NOT NULL, reason TEXT,

CONSTRAINT fk_refund_purchase FOREIGN KEY (purchase_id) REFERENCES "Ticket_Purchase" (purchase_id)

ON DELETE CASCADE ON UPDATE CASCADE

);

`

Погледи (Views)

Note: See TracWiki for help on using the wiki.