62 lines
1.5 KiB
SQL
62 lines
1.5 KiB
SQL
-- COUNTRIES
|
|
CREATE TABLE country (
|
|
code VARCHAR(3) PRIMARY KEY,
|
|
alpha3 CHAR(3) NOT NULL,
|
|
name VARCHAR(100) NOT NULL,
|
|
translations JSONB,
|
|
|
|
UNIQUE (name)
|
|
);
|
|
|
|
-- PERSONS
|
|
CREATE TABLE person (
|
|
id SERIAL PRIMARY KEY,
|
|
first_name VARCHAR(100) NOT NULL,
|
|
last_name VARCHAR(100) NOT NULL,
|
|
first_name_transcription VARCHAR(100) NOT NULL,
|
|
last_name_transcription VARCHAR(100) NOT NULL,
|
|
address_line VARCHAR(200) NOT NULL,
|
|
postal_code VARCHAR(20) NOT NULL,
|
|
city VARCHAR(100) NOT NULL,
|
|
address_country VARCHAR(100) NOT NULL,
|
|
email VARCHAR(255) NOT NULL,
|
|
contact_phone VARCHAR(50) NOT NULL,
|
|
birth_date DATE NOT NULL,
|
|
document_number VARCHAR(50) NOT NULL,
|
|
country_code VARCHAR(3) NOT NULL,
|
|
|
|
FOREIGN KEY (country_code) REFERENCES country(code),
|
|
|
|
-- UNIQUE dokument po državi
|
|
UNIQUE (document_number, country_code)
|
|
);
|
|
|
|
-- SPORTS
|
|
CREATE TABLE sport (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
UNIQUE (name)
|
|
);
|
|
|
|
-- EVENTS
|
|
CREATE TABLE event (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(150) NOT NULL,
|
|
event_date DATE NOT NULL
|
|
);
|
|
|
|
-- REGISTRATIONS
|
|
CREATE TABLE registration (
|
|
id SERIAL PRIMARY KEY,
|
|
person_id INT NOT NULL,
|
|
sport_id INT NOT NULL,
|
|
event_id INT NOT NULL,
|
|
registered_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
FOREIGN KEY (person_id) REFERENCES person(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (sport_id) REFERENCES sport(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (event_id) REFERENCES event(id) ON DELETE CASCADE,
|
|
|
|
UNIQUE (person_id, sport_id, event_id)
|
|
);
|