Data modeling is a systematic approach to designing and structuring data to support the needs of a database system. This chapter provides an in-depth guide to data modeling techniques, covering everything from foundational concepts to advanced strategies, ensuring that you gain comprehensive knowledge.
Data modeling is the process of defining and organizing data elements and their relationships. It creates a blueprint for how data will be stored, accessed, and updated in a database.
Entities: Customers, Orders, Products
Relationships:
- A customer places one or more orders.
- An order contains one or more products.
Table | Attributes | Primary Key | Foreign Key |
---|---|---|---|
Customers | CustomerID, Name, Email | CustomerID | |
Orders | OrderID, OrderDate, CustomerID | OrderID | CustomerID (FK) |
Products | ProductID, Name, Price | ProductID |
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100),
Email VARCHAR(100)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
Name VARCHAR(100),
Price DECIMAL(10, 2)
);
OrderID | Product1 | Product2 |
---|---|---|
1 | Phone | Charger |
CREATE TABLE Orders (
OrderID INT PRIMARY KEY
);
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
Name VARCHAR(100)
);
CREATE TABLE OrderDetails (
OrderID INT,
ProductID INT,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
CREATE TABLE OrdersWithProducts (
OrderID INT,
ProductID INT,
ProductName VARCHAR(100),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
Fact Table: Stores measurable data (e.g., Sales). Dimension Tables: Store descriptive data (e.g., Customers, Products).
CREATE TABLE Sales (
SaleID INT PRIMARY KEY,
CustomerID INT,
ProductID INT,
Quantity INT,
SaleDate DATE
);
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100)
);
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
Name VARCHAR(100),
Price DECIMAL(10, 2)
);
A student can enroll in multiple courses, and each course can have multiple students.
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(100)
);
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
Title VARCHAR(100)
);
CREATE TABLE Enrollments (
StudentID INT,
CourseID INT,
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
CREATE INDEX idx_customer_name ON Customers(Name);
CREATE INDEX idx_order_date ON Orders(OrderDate);
{
"OrderID": 1,
"Customer": {
"CustomerID": 123,
"Name": "John Doe"
},
"Products": [
{"ProductID": 456, "Name": "Phone", "Price": 699.99},
{"ProductID": 789, "Name": "Charger", "Price": 19.99}
]
}
Use migration tools like Flyway or Liquibase to apply changes across environments.
PRIMARY KEY
, FOREIGN KEY
, and CHECK
.
ALTER TABLE Orders
ADD CONSTRAINT chk_quantity CHECK (Quantity > 0);
Data modeling is the cornerstone of effective database design. Whether you are normalizing data for transactional systems or creating star schemas for analytical systems, understanding these techniques ensures that your databases are scalable, maintainable, and efficient. By following the strategies outlined in this chapter, you can create robust models that align with your project's goals while accommodating future growth. Happy coding !❤️