67 lines
2.8 KiB
SQL
67 lines
2.8 KiB
SQL
-- Table for Users
|
|
-- U_ID => User ID, Primary Key
|
|
-- first_name => User's First Name
|
|
-- last_name => User's Last Name
|
|
-- U_email => User's Registered Email
|
|
-- U_password => User's Password
|
|
CREATE TABLE users(u_id SERIAL PRIMARY KEY,
|
|
first_name varchar(255) NOT NULL,
|
|
last_name varchar(255) NOT NULL,
|
|
U_email varchar(255) NOT NULL UNIQUE,
|
|
U_password varchar(255) NOT NULL
|
|
);
|
|
|
|
-- Table for Stations
|
|
-- S_ID => Station ID in fashion of: 3xx denotes taking both lines 1 and 2,
|
|
-- 2xx denotes taking Line 2 Only,
|
|
-- 1xx denotes taking Line 1 Only.
|
|
-- name_ar => Station's name in Arabic
|
|
-- name_en => Station's name in English
|
|
-- tram_lines (DEPRICATE FROM ERD) => Would've denoted which lines are allowed
|
|
-- geo_loc => Geographical Location (Latitude, Longitude)
|
|
|
|
-- Comment regarding the "GEOGRAPHY" data type
|
|
-- https://stackoverflow.com/questions/30322924/how-to-store-longitude-latitude-as-a-geography-in-sql-server-2014
|
|
-- Double check for later purposes
|
|
CREATE TABLE stations(S_ID SERIAL PRIMARY KEY,
|
|
name_ar varchar(255) NOT NULL,
|
|
name_en varchar(255) NOT NULL,
|
|
-- Debating whether or not to denote
|
|
-- Tram lines as 1, 2, or 3
|
|
-- instead of multiple values
|
|
location GEOGRAPHY
|
|
);
|
|
|
|
-- Forgot Relation between User and Station
|
|
-- "Preferred Stations", need to rework ERD
|
|
-- Anyhow, Insert a new table as relation
|
|
-- M:N (i.e. Separate Table)
|
|
-- Where U_ID + S_ID (User ID, Station ID)
|
|
-- are compound keys
|
|
|
|
CREATE TABLE prefers(pref_UID SERIAL,
|
|
pref_SID SERIAL,
|
|
CONSTRAINT fk1 FOREIGN KEY (pref_UID) REFERENCES users(U_ID),
|
|
CONSTRAINT fk2 FOREIGN KEY (pref_SID) REFERENCES stations(S_ID),
|
|
CONSTRAINT pk1 PRIMARY KEY (pref_UID, pref_SID)
|
|
);
|
|
|
|
-- Ought to create table for "Arrival"
|
|
-- Except I dond see how it'd be implemented properly
|
|
-- but do take a look at whatever the mcfuck i write below
|
|
|
|
-- Documenting the Table
|
|
-- time_of_day => Time object, nanosecond accuracy, y'all handle it idk
|
|
-- week_day => varchar as {Mon, Tue, Wed}, Could probs just encode with 0 -> 6
|
|
-- tram_line => int ranging 1 -> 4
|
|
-- direction => Boolean, 1 full, 0 not as full
|
|
CREATE TABLE arrivals(
|
|
a_id SERIAL PRIMARY KEY,
|
|
time_of_day TIME,
|
|
week_day INTEGER,
|
|
tram_line INTEGER,
|
|
direction BOOLEAN,
|
|
CONSTRAINT in_week CHECK (week_day >= 0 AND week_day <= 6),
|
|
CONSTRAINT valid_line CHECK (tram_line >= 1 AND tram_line <= 4)
|
|
);
|