I've been developing a C# Bus System app using SQL, and I need some advice. I don't know if asking on here is the right thing to do, but I essentially need someone to analyse the .SQL file I have, where I have designed my database schema. Primary questions are really, is this designed in the right way (what is the right way?), are having UUIDs as primary keys for EVERY table necessary? Should it just be for the institution table? etc.
I don't know if there is anywhere I can go to pay an hour of their time to analyse it....
The SQL file is 430 lines long so, i've pasted it below, I apologise if this is not the right thing to do on here!
Thanks ^.^
-- phpMyAdmin SQL Dump
-- version 5.0.2
-- https://www.phpmyadmin.net/
--
-- Host: edu-route-test-db.cqobdbj3xwim.us-east-1.rds.amazonaws.com:3306
-- Generation Time: Feb 28, 2021 at 01:45 PM
-- Server version: 8.0.20
-- PHP Version: 7.3.21
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: EduRouteDB
--
-- --------------------------------------------------------
--
-- Table structure for table addresses
--
DROP TABLE IF EXISTS addresses
;
CREATE TABLE IF NOT EXISTS addresses
(
AddressId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
BuildingName
varchar(256) NOT NULL,
StreetName
varchar(256) NOT NULL,
Town
varchar(256) NOT NULL,
County
varchar(256) NOT NULL,
PostCode
varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
Country
varchar(256) NOT NULL,
PRIMARY KEY (AddressId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table bookings
--
DROP TABLE IF EXISTS bookings
;
CREATE TABLE IF NOT EXISTS bookings
(
BookingId
binary(16) NOT NULL,
StudentId
binary(16) NOT NULL,
StartDate
date NOT NULL,
EndDate
date NOT NULL,
TimeBooked
time NOT NULL,
RouteId
binary(16) NOT NULL,
StopId
binary(16) NOT NULL,
UserId
binary(16) NOT NULL,
InstitutionId
binary(16) NOT NULL,
PRIMARY KEY (BookingId
),
KEY StudentId_Bookings_FK
(StudentId
),
KEY RouteId_Bookings_FK
(RouteId
),
KEY StopId_Bookings_FK
(StopId
),
KEY InstitutionId_Bookings_FK
(InstitutionId
),
KEY UserId_Bookings_FK
(UserId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table buses
--
DROP TABLE IF EXISTS buses
;
CREATE TABLE IF NOT EXISTS buses
(
BusId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
BusName
varchar(256) NOT NULL,
VehicleRegistrationNumber
varchar(10) NOT NULL,
Capacity
int NOT NULL,
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PRIMARY KEY (BusId
),
KEY InstitutionId_Buses_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table buses_routes
--
DROP TABLE IF EXISTS buses_routes
;
CREATE TABLE IF NOT EXISTS buses_routes
(
BusId
binary(16) NOT NULL,
RouteId
binary(16) NOT NULL,
InstitutionId
binary(16) NOT NULL,
KEY BusId_BusesRoutes_FK
(BusId
),
KEY RouteId_BusesRoutes_FK
(RouteId
),
KEY InstitutionId_BusesRoutes_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table drivers
--
DROP TABLE IF EXISTS drivers
;
CREATE TABLE IF NOT EXISTS drivers
(
DriverId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
DriverName
varchar(256) NOT NULL,
BusId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
UserId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PRIMARY KEY (DriverId
),
KEY BusId_Drivers_FK
(BusId
),
KEY InstitutionId_Drivers_FK
(InstitutionId
),
KEY UserId_Drivers_FK
(UserId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table institutions
--
DROP TABLE IF EXISTS institutions
;
CREATE TABLE IF NOT EXISTS institutions
(
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
InstituteName
varchar(256) DEFAULT NULL,
InstituteLogoFullPath
varchar(256) DEFAULT NULL,
InstituteJoinDate
date DEFAULT NULL,
IsActive
tinyint(1) DEFAULT NULL,
PrincipalName
varchar(256) DEFAULT NULL,
AddressId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PRIMARY KEY (InstitutionId
),
KEY AddressId_FK
(AddressId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table parents
--
DROP TABLE IF EXISTS parents
;
CREATE TABLE IF NOT EXISTS parents
(
ParentId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
FirstName
varchar(256) NOT NULL,
MiddleName
varchar(256) NOT NULL,
LastName
varchar(256) NOT NULL,
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
UserId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PRIMARY KEY (ParentId
),
KEY InstitutionId_Parents_FK
(InstitutionId
),
KEY UserId_Parents_FK
(UserId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table permissions
--
DROP TABLE IF EXISTS permissions
;
CREATE TABLE IF NOT EXISTS permissions
(
PermissionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PermissionCategory
varchar(256) NOT NULL,
PermissionName
varchar(256) NOT NULL,
PRIMARY KEY (PermissionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table roles
--
DROP TABLE IF EXISTS roles
;
CREATE TABLE IF NOT EXISTS roles
(
RoleId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
RoleType
varchar(256) NOT NULL,
InstitutionId
binary(16) NOT NULL,
PRIMARY KEY (RoleId
),
KEY InstitutionId_Roles_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table roles_permissions
--
DROP TABLE IF EXISTS roles_permissions
;
CREATE TABLE IF NOT EXISTS roles_permissions
(
RoleId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PermissionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
KEY RoleId_Roles_Permissions_FK
(RoleId
),
KEY PermissionId_Roles_Permissions_FK
(PermissionId
),
KEY InstitutionId_Roles_Permissions_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table routes
--
DROP TABLE IF EXISTS routes
;
CREATE TABLE IF NOT EXISTS routes
(
RouteId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
RouteName
varchar(256) NOT NULL,
Mon
tinyint(1) NOT NULL DEFAULT '0',
Tue
tinyint(1) NOT NULL DEFAULT '0',
Wed
tinyint(1) NOT NULL DEFAULT '0',
Thu
tinyint(1) NOT NULL DEFAULT '0',
Fri
tinyint(1) NOT NULL DEFAULT '0',
Sat
tinyint(1) NOT NULL DEFAULT '0',
Sun
tinyint(1) NOT NULL DEFAULT '0',
StartDate
date NOT NULL,
EndDate
date NOT NULL,
StartTime
time NOT NULL,
EndTime
time NOT NULL,
CurrentNumberOfBookings
int NOT NULL,
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PRIMARY KEY (RouteId
),
KEY InstitutionId_Routes_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table routes_stops
--
DROP TABLE IF EXISTS routes_stops
;
CREATE TABLE IF NOT EXISTS routes_stops
(
RouteId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
StopId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
Time
time NOT NULL,
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
KEY RouteId_RoutesStops_FK
(RouteId
),
KEY StopId_RoutesStops_FK
(StopId
),
KEY InstitutionId_RoutesStops_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table staff
--
DROP TABLE IF EXISTS staff
;
CREATE TABLE IF NOT EXISTS staff
(
StaffId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
FirstName
varchar(256) NOT NULL,
MiddleName
varchar(256) NOT NULL,
LastName
varchar(256) NOT NULL,
UserId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
KEY UserId_FK
(UserId
),
KEY InstitutionId_Staff_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table stops
--
DROP TABLE IF EXISTS stops
;
CREATE TABLE IF NOT EXISTS stops
(
StopId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
StopName
varchar(256) NOT NULL,
Longitude
decimal(9,6) NOT NULL,
Latitude
decimal(9,6) NOT NULL,
AddressId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PRIMARY KEY (StopId
),
KEY AddressId_Stops_FK
(AddressId
),
KEY InstitutionId_Stops_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table students
--
DROP TABLE IF EXISTS students
;
CREATE TABLE IF NOT EXISTS students
(
StudentId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
FirstName
varchar(256) NOT NULL,
MiddleName
varchar(256) NOT NULL,
LastName
varchar(256) NOT NULL,
DateOfBirth
date NOT NULL,
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PRIMARY KEY (StudentId
),
KEY InstitutionId_Student_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table students_parents
--
DROP TABLE IF EXISTS students_parents
;
CREATE TABLE IF NOT EXISTS students_parents
(
StudentId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
ParentId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
KEY StudentId_StudentParent_FK
(StudentId
),
KEY ParentId_StudentParent_FK
(ParentId
),
KEY InstitutionId_StudentParent_FK
(InstitutionId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- --------------------------------------------------------
--
-- Table structure for table users
--
DROP TABLE IF EXISTS users
;
CREATE TABLE IF NOT EXISTS users
(
UserId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
Email
varchar(256) DEFAULT NULL,
Password
char(60) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
InstitutionId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
RoleId
binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid())),
PRIMARY KEY (UserId
),
KEY InstitutionId_FK
(InstitutionId
),
KEY RoleId_Users_FK
(RoleId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
--
-- Constraints for dumped tables
--
--
-- Constraints for table bookings
--
ALTER TABLE bookings
ADD CONSTRAINT InstitutionId_Bookings_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT RouteId_Bookings_FK
FOREIGN KEY (RouteId
) REFERENCES routes_stops
(RouteId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT StopId_Bookings_FK
FOREIGN KEY (StopId
) REFERENCES routes_stops
(StopId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT StudentId_Bookings_FK
FOREIGN KEY (StudentId
) REFERENCES students
(StudentId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT UserId_Bookings_FK
FOREIGN KEY (UserId
) REFERENCES users
(UserId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table buses
--
ALTER TABLE buses
ADD CONSTRAINT InstitutionId_Buses_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table buses_routes
--
ALTER TABLE buses_routes
ADD CONSTRAINT BusId_BusesRoutes_FK
FOREIGN KEY (BusId
) REFERENCES buses
(BusId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT InstitutionId_BusesRoutes_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT RouteId_BusesRoutes_FK
FOREIGN KEY (RouteId
) REFERENCES routes
(RouteId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table drivers
--
ALTER TABLE drivers
ADD CONSTRAINT BusId_Drivers_FK
FOREIGN KEY (BusId
) REFERENCES buses
(BusId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT InstitutionId_Drivers_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT UserId_Drivers_FK
FOREIGN KEY (UserId
) REFERENCES users
(UserId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table institutions
--
ALTER TABLE institutions
ADD CONSTRAINT AddressId_FK
FOREIGN KEY (AddressId
) REFERENCES addresses
(AddressId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table parents
--
ALTER TABLE parents
ADD CONSTRAINT InstitutionId_Parents_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT UserId_Parents_FK
FOREIGN KEY (UserId
) REFERENCES users
(UserId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table roles
--
ALTER TABLE roles
ADD CONSTRAINT InstitutionId_Roles_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table roles_permissions
--
ALTER TABLE roles_permissions
ADD CONSTRAINT InstitutionId_Roles_Permissions_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT PermissionId_Roles_Permissions_FK
FOREIGN KEY (PermissionId
) REFERENCES permissions
(PermissionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT RoleId_Roles_Permissions_FK
FOREIGN KEY (RoleId
) REFERENCES roles
(RoleId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table routes
--
ALTER TABLE routes
ADD CONSTRAINT InstitutionId_Routes_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table routes_stops
--
ALTER TABLE routes_stops
ADD CONSTRAINT InstitutionId_RoutesStops_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT RouteId_RoutesStops_FK
FOREIGN KEY (RouteId
) REFERENCES routes
(RouteId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT StopId_RoutesStops_FK
FOREIGN KEY (StopId
) REFERENCES stops
(StopId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table staff
--
ALTER TABLE staff
ADD CONSTRAINT InstitutionId_Staff_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT UserId_FK
FOREIGN KEY (UserId
) REFERENCES users
(UserId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table stops
--
ALTER TABLE stops
ADD CONSTRAINT AddressId_Stops_FK
FOREIGN KEY (AddressId
) REFERENCES addresses
(AddressId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT InstitutionId_Stops_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table students
--
ALTER TABLE students
ADD CONSTRAINT InstitutionId_Student_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table students_parents
--
ALTER TABLE students_parents
ADD CONSTRAINT InstitutionId_StudentParent_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT ParentId_StudentParent_FK
FOREIGN KEY (ParentId
) REFERENCES parents
(ParentId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT StudentId_StudentParent_FK
FOREIGN KEY (StudentId
) REFERENCES students
(StudentId
) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table users
--
ALTER TABLE users
ADD CONSTRAINT InstitutionId_FK
FOREIGN KEY (InstitutionId
) REFERENCES institutions
(InstitutionId
) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT RoleId_Users_FK
FOREIGN KEY (RoleId
) REFERENCES roles
(RoleId
) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Asked by Suzan Aydın
(133 rep)
Feb 28, 2021, 01:57 PM
Last activity: Feb 28, 2021, 10:15 PM
Last activity: Feb 28, 2021, 10:15 PM