Database Definition
Create the SQL files that we'll use to initialize our application.
We'll cover the following
We’ll create three .sql
files in the data
directory: database.sql
, structure.sql
, and content.sql
.
Let’s get started.
Database schema
The main purpose of the intended application is to track the time we spend on a given project. Each project consists of a number of tasks. All the projects are stored in a relational database called tracker
. The relational database management system that is used in this context is MySQL.
In the root directory of our project, we’ll create a new folder called data/
:
mkdir data & cd data
Then, we’ll create the following .sql files in our new folder:
database.sql
touch database.sql
This file will be in charge of creating our database and selecting it for use. We’ll add the following SQL code within it:
CREATE DATABASE IF NOT EXISTS tracker CHARACTER SET UTF8 COLLATE UTF8_UNICODE_CI;
USE tracker;
The name of the database we’ll create is tracker
.
structure.sql
touch structure.sql
We can now create tables for our database:
DROP TABLE IF EXISTS tasks, projects;
CREATE TABLE projects (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
category VARCHAR(100) NOT NULL
);
CREATE TABLE tasks (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
date_task DATE NOT NULL,
time_task INT(3) NOT NULL,
project_id INT(11) NOT NULL,
CONSTRAINT fk_tas_pro
FOREIGN KEY (project_id)
REFERENCES projects(id)
ON DELETE CASCADE
)
Note: The script shown above is in charge of creating two tables —the
tasks
and theprojects
table— if they don’t already exist in the database. Each table has properties, like itsid
andtitle
. Thetasks
table depends on theprojects
table and we’ll use theforeign key
and thereferences
constraint to link them together.
content.sql
touch content.sql
We can now populate our tables with some initial content:
INSERT INTO projects
VALUES
(1, 'Learn Laravel', 'Personal'),
(2, 'Learn Reactjs', 'Personal'),
(3, 'Project 3', 'Business');
INSERT INTO tasks
VALUES
(1, 'Task 1', '2020-08-01', 25, 1),
(2, 'Task 2', '2020-09-15', 45, 2),
(3, 'Task 3', '2020-09-09', 25, 3);
Our file structure will look like this:
Get hands-on with 1400+ tech skills courses.