normalization: normalized_ddl_schema.sql

File normalized_ddl_schema.sql, 4.6 KB (added by 155036, 13 hours 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 actor_types;
13DROP TABLE IF EXISTS countries;
14DROP TABLE IF EXISTS events;
15
16CREATE TABLE countries (
17 country_code VARCHAR(5) PRIMARY KEY,
18 country_name VARCHAR(100)
19);
20
21CREATE TABLE actor_types (
22 type_code VARCHAR(10) PRIMARY KEY,
23 type_description VARCHAR(100)
24);
25
26CREATE 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
41CREATE 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
51CREATE 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
62CREATE 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
72CREATE TABLE roles (
73 role_id SERIAL PRIMARY KEY,
74 role_name VARCHAR(50) NOT NULL
75);
76
77CREATE 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
89CREATE 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
97CREATE 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
108CREATE 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
118CREATE 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
129CREATE 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
140CREATE 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);