Laravel (2): Thiết kế database

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: