Database Modelling

Introduction
Imagine yourself building a family tree. What do you do while building it? Exactly, you try to arrange people onto different nodes of that tree and every node relates to some branches. Here the brunch defines the relationships and the people placed on each node could be thought of entities. Database modelling is quite like it with some changing tunes. Formally speaking database modelling involves relationship identifications that fits perfectly with the business logic provided. It involves identifying entities and structuring the relationships between them.
Why is it important?
What would happen if an engineer start building a house without any prior design of the house that is being constructed? It will eventually end up with lots of disappoint to the customer for whom it was being built as well as may require making lots of changes that would not only cost money and time but also the experience of the customer. Similarly, it is always suggested to have a decent model of your database before you start building an application that is dependent on it.
How is it done?
Database modelling involves the following tasks:
Requirement Analysis:
As mentioned above we model the database according to the business requirements. Therefore, it is important that you ask relevant question about the business logic which you are going to implement through the application.
You also need to ask them about how they want to store data and make them aware about the technical and economic feasibility issues that may occur.
Entity Relationship Diagram:
This process involves building a visual representation of database. It is like a blueprint that you are going to refer throughout the process of database creation. This diagram even comes handy while writing queries and other stuffs which require a track of relationships.
Normalization:
Normalization itself is a quite large topic and I would create a separate article on it to cover each topic in depth. However, the main purpose of normalization is to remove redundancy and to ensure data integrity.
Data type and Constraints:
As the name suggests we try to define the appropriate datatype for each of the field to maintain data accuracy. Constraints are the restrictions imposed onto the operations performed on any table. For example, a pin code is a categorical data, hence it should be enumerated type, and we should not allow any operation that puts a random value in that field.
Indexing:
Within an application there are lots of users who perform lots of operations without considering about the technology used behind there for to serve them with best performing application it is essential that your operations run faster in backend and provides data as fast as possible. Indexing is a concept that could be used to optimize query performance. Therefore, it is crucial to identify the fields that should be indexed.
Database model of my project:

Here I have provided a detailed model of the database.
Task For You
Using the previous knowledge of creating table in Laravel try to build this tables with proper data types and establish proper relationship among them.
However, I would provide the creation of the database in Laravel using this model in the upcoming session. Thank you for providing your valuable time.

