-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.sql
More file actions
100 lines (92 loc) · 4.02 KB
/
Copy pathdatabase.sql
File metadata and controls
100 lines (92 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
-- TransitOps Database Schema
-- Drop existing tables to ensure clean initialization
DROP TABLE IF EXISTS expenses CASCADE;
DROP TABLE IF EXISTS fuel_logs CASCADE;
DROP TABLE IF EXISTS maintenance_logs CASCADE;
DROP TABLE IF EXISTS trips CASCADE;
DROP TABLE IF EXISTS drivers CASCADE;
DROP TABLE IF EXISTS vehicles CASCADE;
DROP TABLE IF EXISTS users CASCADE;
-- 1. Users Table
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
full_name VARCHAR(255) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(50) NOT NULL CHECK (role IN ('Fleet Manager', 'Driver', 'Safety Officer', 'Financial Analyst')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 2. Vehicles Table
CREATE TABLE vehicles (
id SERIAL PRIMARY KEY,
registration_number VARCHAR(100) UNIQUE NOT NULL,
name_model VARCHAR(255) NOT NULL,
type VARCHAR(100) NOT NULL,
region VARCHAR(100) NOT NULL,
max_load_capacity DECIMAL(10, 2) NOT NULL CHECK (max_load_capacity > 0),
odometer DECIMAL(12, 2) NOT NULL DEFAULT 0 CHECK (odometer >= 0),
acquisition_cost DECIMAL(12, 2) NOT NULL CHECK (acquisition_cost >= 0),
status VARCHAR(50) NOT NULL DEFAULT 'Available' CHECK (status IN ('Available', 'On Trip', 'In Shop', 'Retired')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 3. Drivers Table
CREATE TABLE drivers (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
license_number VARCHAR(100) UNIQUE NOT NULL,
license_category VARCHAR(50) NOT NULL,
license_expiry_date DATE NOT NULL,
contact_number VARCHAR(50) NOT NULL,
safety_score DECIMAL(5, 2) NOT NULL DEFAULT 100 CHECK (safety_score >= 0 AND safety_score <= 100),
status VARCHAR(50) NOT NULL DEFAULT 'Available' CHECK (status IN ('Available', 'On Trip', 'Off Duty', 'Suspended')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 4. Trips Table
CREATE TABLE trips (
id SERIAL PRIMARY KEY,
source VARCHAR(255) NOT NULL,
destination VARCHAR(255) NOT NULL,
vehicle_id INT NOT NULL REFERENCES vehicles(id) ON DELETE RESTRICT,
driver_id INT NOT NULL REFERENCES drivers(id) ON DELETE RESTRICT,
cargo_weight DECIMAL(10, 2) NOT NULL CHECK (cargo_weight >= 0),
planned_distance DECIMAL(10, 2) NOT NULL CHECK (planned_distance > 0),
status VARCHAR(50) NOT NULL DEFAULT 'Draft' CHECK (status IN ('Draft', 'Dispatched', 'Completed', 'Cancelled')),
final_odometer DECIMAL(12, 2) CHECK (final_odometer >= 0),
fuel_consumed DECIMAL(10, 2) CHECK (fuel_consumed >= 0),
revenue DECIMAL(12, 2) NOT NULL DEFAULT 0 CHECK (revenue >= 0),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 5. Maintenance Logs Table
CREATE TABLE maintenance_logs (
id SERIAL PRIMARY KEY,
vehicle_id INT NOT NULL REFERENCES vehicles(id) ON DELETE CASCADE,
description TEXT NOT NULL,
cost DECIMAL(12, 2) NOT NULL CHECK (cost >= 0),
start_date DATE NOT NULL DEFAULT CURRENT_DATE,
end_date DATE,
status VARCHAR(50) NOT NULL DEFAULT 'Active' CHECK (status IN ('Active', 'Closed')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 6. Fuel Logs Table
CREATE TABLE fuel_logs (
id SERIAL PRIMARY KEY,
vehicle_id INT NOT NULL REFERENCES vehicles(id) ON DELETE CASCADE,
liters DECIMAL(10, 2) NOT NULL CHECK (liters > 0),
cost DECIMAL(12, 2) NOT NULL CHECK (cost >= 0),
date DATE NOT NULL DEFAULT CURRENT_DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 7. Expenses Table
CREATE TABLE expenses (
id SERIAL PRIMARY KEY,
vehicle_id INT NOT NULL REFERENCES vehicles(id) ON DELETE CASCADE,
trip_id INT REFERENCES trips(id) ON DELETE SET NULL,
type VARCHAR(50) NOT NULL CHECK (type IN ('Tolls', 'Maintenance', 'Fuel', 'Other')),
amount DECIMAL(12, 2) NOT NULL CHECK (amount >= 0),
date DATE NOT NULL DEFAULT CURRENT_DATE,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);