design: ddlscript.sql

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