Bài trước: Laravel (1): Web framework - Composer
-----
1.1
Thiết kế cơ sở dữ liệu
Sử dụng một phần mềm nào đó để thiết kế cơ sở dữ liệu. Công
việc bao gồm: định nghĩa các bảng và chỉ ra mối liên hệ giữa các bảng. Bạn có
thể sử dụng các hệ quản trị cơ sở dữ liệu hoặc các công cụ trực tuyến trên
Internet để thiết kế cơ sở dữ liệu. Các bạn mới học nên tự mình thiết kế cơ sở
dữ liệu, nhập từng dòng khai báo, chứ không nên lấy cơ sở dữ liệu có sẵn về sử
dụng.
Ví dụ ở đây sẽ sử dụng công cụ trực tuyến dbdiagram.io (https://dbdiagram.io/) để thiết kế cơ sở dữ liệu.
Sau khi thiết kế cơ sở dữ liệu trên dbdiagram.io, bạn có thể
xuất (export) ra một tập tin để nhúng (import) vào các hệ quản trị cơ sở dữ liệu
khác. Thực chất là dbdiagram.io sẽ lưu các lệnh tạo bảng và các khai báo ràng
buộc khóa ngoại (foreign key) vào một tập tin để bạn sử dụng sau này.
Tên database: shop_thoitrang
Danh sách các bảng
[products]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
name |
varchar |
|
price |
int |
|
feature_image |
varchar |
|
content |
text |
|
user_id |
int |
Khóa ngoại (users) |
category_id |
int |
Khóa ngoại (categories) |
created_at |
timestamp |
|
updated_at |
timestamp |
|
Mối quan hệ:
– categories [1 - n] products
– users [1 - n] products
Đoạn mã tạo bảng products trong dbdiagram.io:
Table products {
id int [pk]
name varchar
price int
feature_image varchar
content text
user_id int
category_id int
created_at timestamp
updated_at timestamp
}
[categories]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
name |
varchar |
|
parent_id |
int |
|
created_at |
timestamp |
|
updated_at |
timestamp |
|
Đoạn mã tạo bảng products trong dbdiagram.io:
Table categories {
id int [pk]
name varchar
parent_id int
created_at timestamp
updated_at timestamp
}
Khai báo mối quan hệ nhiều-một giữa products và categories
Ref: products.category_id > categories.id // many-to-one
[tags]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
name |
varchar |
|
created_at |
timestamp |
|
updated_at |
timestamp |
|
Đoạn mã tạo bảng tags trong dbdiagram.io:
Table tags {
id int [pk]
name varchar
created_id timestamp
updated_id timestamp
}
[product_tag]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
product_id |
int |
Khóa ngoại (products) |
tag_id |
int |
Khóa ngoại (tags) |
created_at |
timestamp |
|
updated_at |
timestamp |
|
[dbdiagram.io]
Table product_tag {
id int [pk]
product_id int
tag_id int
created_at timestamp
updated_at timestamp
}
Ref: products.id - product_tag.product_id // one-to-one
Ref: tags.id - product_tag.tag_id // one-to-one
[customers]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
name |
varchar |
|
address |
text |
|
created_at |
timestamp |
|
updated_at |
timestamp |
|
[dbdiagram.io]
Table customers {
id int [pk]
name varchar
address text
created_at timestamp
updated_at timestamp
}
[orders]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
user_id |
int |
|
customer_id |
int |
Khóa ngoại (customers) |
status |
varchar |
|
created_at |
timestamp |
|
[dbdiagram.io]
Table orders {
id int [pk]
user_id int
customer_id int
status varchar
created_at timestamp
}
Ref: orders.customer_id > customers.id
[order_items]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
order_id |
int |
Khóa ngoại (orders) |
product_id |
int |
Khóa ngoại (products) |
quantity |
int |
|
[dbdiagram.io]
Table order_items {
id int [pk]
order_id int
product_id int
quantity int
}
Ref: orders.id > order_items.id
Ref: order_items.product_id > products.id
[product_image] // lưu các ảnh phụ của một product
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
image |
varchar |
|
product_id |
int |
Khóa ngoại (products) |
created_at |
timestamp |
|
updated_at |
timestamp |
|
[dbdiagram.io]
Table product_image {
id int [pk]
image varchar
product_id int
created_at timestamp
updated_at timestamp
}
Ref: product_image.product_id < products.id // một ảnh dùng cho nhiều product
[users]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
name |
varchar |
|
email |
varchar |
|
password |
varchar |
|
created_at |
timestamp |
|
updated_at |
timestamp |
|
[dbdiagram.io]
Table users {
id int [pk]
name varchar
email varchar
password varchar
created_at timestamp
updated_at timestamp
}
Ref: products.user_id > users.id
[menus]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
name |
varchar |
|
parent_id |
int |
|
created_at |
timestamp |
|
updated_at |
timestamp |
|
[dbdiagram.io]
Table menus {
id int [pk]
name varchar
parent_id int
created_at timestamp
updated_at timestamp
}
[settings]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
config_key |
varchar |
|
config_value |
varchar |
|
created_at |
timestamp |
|
updated_at |
timestamp |
|
[dbdiagram.io]
Table settings {
id int [pk]
config_key varchar
config_value varchar
created_at timestamp
updated_at timestamp
}
[sliders]
Tên trường |
Kiểu dữ liệu |
Chú thích |
id |
int |
Khóa chính |
name |
varchar |
|
description |
varchar |
|
image |
varchar |
|
created_at |
timestamp |
|
updated_at |
timestamp |
|
[dbdiagram.io]
Table sliders {
id int [pk]
name varchar
description varchar
image varchar
created_at timestamp
updated_at timestamp
}
Xem thêm clip số 2 của tác giả Đỗ Viết Đức [Phân tích thiết
kế database cho dự án]:
https://www.youtube.com/watch?v=F4UQX4ASZ7k&list=PL3V6a6RU5ogEAKIuGjfPEJ77FGmEAQXTT&index=2
-----
Cập nhật: 23/5/2021
Đọc thêm: