1 | DROP TABLE IF EXISTS event_analytics;
|
---|
2 | DROP TABLE IF EXISTS conflict_risk;
|
---|
3 | DROP TABLE IF EXISTS predictions;
|
---|
4 | DROP TABLE IF EXISTS notifications;
|
---|
5 | DROP TABLE IF EXISTS subscription;
|
---|
6 | DROP TABLE IF EXISTS plan;
|
---|
7 | DROP TABLE IF EXISTS users;
|
---|
8 | DROP TABLE IF EXISTS roles;
|
---|
9 | DROP TABLE IF EXISTS event_details;
|
---|
10 | DROP TABLE IF EXISTS locations;
|
---|
11 | DROP TABLE IF EXISTS actors;
|
---|
12 | DROP TABLE IF EXISTS actor_types;
|
---|
13 | DROP TABLE IF EXISTS countries;
|
---|
14 | DROP TABLE IF EXISTS events;
|
---|
15 |
|
---|
16 | CREATE TABLE countries (
|
---|
17 | country_code VARCHAR(5) PRIMARY KEY,
|
---|
18 | country_name VARCHAR(100)
|
---|
19 | );
|
---|
20 |
|
---|
21 | CREATE TABLE actor_types (
|
---|
22 | type_code VARCHAR(10) PRIMARY KEY,
|
---|
23 | type_description VARCHAR(100)
|
---|
24 | );
|
---|
25 |
|
---|
26 | CREATE TABLE events (
|
---|
27 | global_event_id SERIAL PRIMARY KEY,
|
---|
28 | sql_date DATE NOT NULL,
|
---|
29 | month_year VARCHAR(6) NOT NULL,
|
---|
30 | year INT NOT NULL,
|
---|
31 | fraction_date DECIMAL(8, 4) NOT NULL,
|
---|
32 | is_root_event BOOLEAN NOT NULL,
|
---|
33 | event_code VARCHAR(10) NOT NULL,
|
---|
34 | goldstein_scale DECIMAL(5, 2),
|
---|
35 | num_mentions INT,
|
---|
36 | num_sources INT,
|
---|
37 | num_articles INT,
|
---|
38 | avg_tone DECIMAL(5, 2)
|
---|
39 | );
|
---|
40 |
|
---|
41 | CREATE TABLE actors (
|
---|
42 | actor_id SERIAL PRIMARY KEY,
|
---|
43 | actor_code VARCHAR(10) NOT NULL,
|
---|
44 | actor_name VARCHAR(100) NOT NULL,
|
---|
45 | country_code VARCHAR(5),
|
---|
46 | type_code VARCHAR(10),
|
---|
47 | FOREIGN KEY (country_code) REFERENCES countries(country_code),
|
---|
48 | FOREIGN KEY (type_code) REFERENCES actor_types(type_code)
|
---|
49 | );
|
---|
50 |
|
---|
51 | CREATE TABLE locations (
|
---|
52 | location_id SERIAL PRIMARY KEY,
|
---|
53 | full_name VARCHAR(100) NOT NULL,
|
---|
54 | country_code VARCHAR(5),
|
---|
55 | adm1_code VARCHAR(10),
|
---|
56 | latitude DECIMAL(8, 6),
|
---|
57 | longitude DECIMAL(9, 6),
|
---|
58 | feature_id VARCHAR(20),
|
---|
59 | FOREIGN KEY (country_code) REFERENCES countries(country_code)
|
---|
60 | );
|
---|
61 |
|
---|
62 | CREATE TABLE event_details (
|
---|
63 | global_event_id INT,
|
---|
64 | actor_id INT,
|
---|
65 | location_id INT,
|
---|
66 | PRIMARY KEY (global_event_id, actor_id, location_id),
|
---|
67 | FOREIGN KEY (global_event_id) REFERENCES events (global_event_id) ON DELETE CASCADE,
|
---|
68 | FOREIGN KEY (actor_id) REFERENCES actors (actor_id) ON DELETE CASCADE,
|
---|
69 | FOREIGN KEY (location_id) REFERENCES locations (location_id) ON DELETE CASCADE
|
---|
70 | );
|
---|
71 |
|
---|
72 | CREATE TABLE roles (
|
---|
73 | role_id SERIAL PRIMARY KEY,
|
---|
74 | role_name VARCHAR(50) NOT NULL
|
---|
75 | );
|
---|
76 |
|
---|
77 | CREATE TABLE users (
|
---|
78 | user_id SERIAL PRIMARY KEY,
|
---|
79 | first_name VARCHAR(50) NOT NULL,
|
---|
80 | last_name VARCHAR(50) NOT NULL,
|
---|
81 | email VARCHAR(100) UNIQUE NOT NULL,
|
---|
82 | password_hash VARCHAR(255) NOT NULL,
|
---|
83 | role_id INT NOT NULL,
|
---|
84 | last_login_date DATE,
|
---|
85 | register_date DATE NOT NULL,
|
---|
86 | FOREIGN KEY (role_id) REFERENCES roles (role_id) ON DELETE CASCADE
|
---|
87 | );
|
---|
88 |
|
---|
89 | CREATE TABLE plan (
|
---|
90 | plan_id SERIAL PRIMARY KEY,
|
---|
91 | plan_name VARCHAR(50) NOT NULL,
|
---|
92 | max_events INT,
|
---|
93 | max_notifications INT,
|
---|
94 | max_predictions INT DEFAULT 10
|
---|
95 | );
|
---|
96 |
|
---|
97 | CREATE TABLE subscription (
|
---|
98 | subscription_id SERIAL PRIMARY KEY,
|
---|
99 | user_id INT NOT NULL,
|
---|
100 | plan_id INT NOT NULL,
|
---|
101 | start_date DATE NOT NULL,
|
---|
102 | end_date DATE,
|
---|
103 | status VARCHAR(20) NOT NULL,
|
---|
104 | FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE,
|
---|
105 | FOREIGN KEY (plan_id) REFERENCES plan (plan_id) ON DELETE CASCADE
|
---|
106 | );
|
---|
107 |
|
---|
108 | CREATE TABLE notifications (
|
---|
109 | notification_id SERIAL PRIMARY KEY,
|
---|
110 | user_id INT NOT NULL,
|
---|
111 | event_id INT NOT NULL,
|
---|
112 | notification_date DATE NOT NULL,
|
---|
113 | status VARCHAR(20) NOT NULL,
|
---|
114 | FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE,
|
---|
115 | FOREIGN KEY (event_id) REFERENCES events (global_event_id) ON DELETE CASCADE
|
---|
116 | );
|
---|
117 |
|
---|
118 | CREATE TABLE predictions (
|
---|
119 | prediction_id SERIAL PRIMARY KEY,
|
---|
120 | event_id INT NOT NULL,
|
---|
121 | actor_id INT NOT NULL,
|
---|
122 | predicted_date DATE NOT NULL,
|
---|
123 | prediction_type VARCHAR(50) NOT NULL,
|
---|
124 | confidence_score DECIMAL(5,2) NOT NULL,
|
---|
125 | FOREIGN KEY (event_id) REFERENCES events (global_event_id) ON DELETE CASCADE,
|
---|
126 | FOREIGN KEY (actor_id) REFERENCES actors (actor_id) ON DELETE CASCADE
|
---|
127 | );
|
---|
128 |
|
---|
129 | CREATE TABLE conflict_risk (
|
---|
130 | conflict_id SERIAL PRIMARY KEY,
|
---|
131 | actor1_id INT NOT NULL,
|
---|
132 | actor2_id INT NOT NULL,
|
---|
133 | risk_score DECIMAL(5, 2),
|
---|
134 | predicted_date DATE NOT NULL,
|
---|
135 | description TEXT,
|
---|
136 | FOREIGN KEY (actor1_id) REFERENCES actors (actor_id) ON DELETE CASCADE,
|
---|
137 | FOREIGN KEY (actor2_id) REFERENCES actors (actor_id) ON DELETE CASCADE
|
---|
138 | );
|
---|
139 |
|
---|
140 | CREATE TABLE event_analytics (
|
---|
141 | analytics_id SERIAL PRIMARY KEY,
|
---|
142 | actor_id INT NOT NULL,
|
---|
143 | event_id INT NOT NULL,
|
---|
144 | date DATE NOT NULL,
|
---|
145 | conflict_coefficient DECIMAL(5, 2),
|
---|
146 | mentions_count INT,
|
---|
147 | avg_tone DECIMAL(5, 2),
|
---|
148 | description TEXT,
|
---|
149 | FOREIGN KEY (actor_id) REFERENCES actors (actor_id) ON DELETE CASCADE,
|
---|
150 | FOREIGN KEY (event_id) REFERENCES events (global_event_id) ON DELETE CASCADE
|
---|
151 | );
|
---|