CCCPaste

Taxi Company

DROP TABLE IF EXISTS addresses CASCADE;
CREATE TABLE addresses(
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);


DROP TABLE IF EXISTS categories CASCADE;
CREATE TABLE categories(
id SERIAL PRIMARY KEY,
name VARCHAR(10) NOT NULL
);


DROP TABLE IF EXISTS clients CASCADE;
CREATE TABLE clients(
id SERIAL PRIMARY KEY,
full_name VARCHAR(50) NOT NULL,
phone_number VARCHAR(20) NOT NULL
);


DROP TABLE IF EXISTS drivers CASCADE;
CREATE TABLE drivers(
id SERIAL PRIMARY KEY,
first_name VARCHAR(30) NOT NULL,
last_name VARCHAR(30) NOT NULL,
age INT NOT NULL CHECK (age > 0),
rating NUMERIC(2) DEFAULT 5.5
);

DROP TABLE IF EXISTS cars CASCADE;
CREATE TABLE cars(
id SERIAL PRIMARY KEY,
make VARCHAR(20) NOT NULL,
model VARCHAR(20),
year INT DEFAULT 0 CHECK (year > 0) NOT NULL,
mileage INT DEFAULT 0 CHECK (mileage > 0),
condition CHAR(1) NOT NULL,
category_id INT NOT NULL,

CONSTRAINT fk_cars_categories
FOREIGN KEY (category_id)
REFERENCES categories(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);


DROP TABLE IF EXISTS courses CASCADE;
CREATE TABLE courses(
id SERIAL PRIMARY KEY,
from_address_id INT NOT NULL,
start TIMESTAMP NOT NULL,
bill NUMERIC(10,2) DEFAULT 10 CHECK (bill > 0),
car_id INT NOT NULL,
client_id INT NOT NULL,

CONSTRAINT fk_courses_addresses
FOREIGN KEY (from_address_id)
REFERENCES addresses(id)
ON DELETE CASCADE
ON UPDATE CASCADE,

CONSTRAINT fk_courses_cars
FOREIGN KEY (car_id)
REFERENCES cars(id)
ON DELETE CASCADE
ON UPDATE CASCADE,

CONSTRAINT fk_courses_clients
FOREIGN KEY (client_id)
REFERENCES clients(id)
ON DELETE CASCADE
ON UPDATE CASCADE

);

DROP TABLE IF EXISTS cars_drivers CASCADE;
CREATE TABLE cars_drivers(
car_id INT NOT NULL,
driver_id INT NOT NULL,

CONSTRAINT fk_cars_drivers_cars
FOREIGN KEY (car_id)
REFERENCES cars(id)
ON DELETE CASCADE
ON UPDATE CASCADE,

CONSTRAINT fk_cars_drivers_drivers
FOREIGN KEY (driver_id)
REFERENCES drivers(id)
ON DELETE CASCADE
ON UPDATE CASCADE

);