Cách chuẩn hóa Cơ sở dữ liệu từ 1 bảng thành các bảng có quan hệ
Ví dụ: ta cần lưu trữ thông tin Sản phẩm, và Chuyên mục để phân loại Sản phẩm trong tablesanpham
như sau:
sp_id
: ID tự tăng dùng để định danh duy nhất 1 Sản phẩmsp_ten
: tên Sản phẩmsp_gia
: giá bán Sản phẩmlsp_ten
: sản phẩm thuộc Loại nào đó
Cách lưu trữ tất cả thông tin trong cùng 1 table sanpham
này có vài điểm hạn chế:
Dư thừa dữ liệu
Xem xét ví dụ trên, chúng ta phân tích như sau: Cùng 1 chuỗi "Điện thoại", lại xuất hiện dư thừa đến 3 lần trong dữ liệu trên. Ví dụ:- Chuỗi
Điện thoại
có10 ký tự
, mỗi ký tự tốn2 bytes
để lưu trữ => cần10 * 2 = 20 bytes
để lưu trữ hết chuỗi này - Việc xuất hiện dư thừa đến 3 lần, làm chúng ta tiêu tốn
3 lần * 20 bytes = 60 bytes
dung lượng lưu trữ
Cách giải quyết
Step 1: Tách dữ liệu ra thành 2 bảng (table):
- Table
sanpham
- Table
loaisanpham
Step 2: xác định quan hệ giữa 2 table sanpham
và loaisanpham
Ta có quan hệ như sau:
- 1
Sản phẩm
thì thuộc mộtLoại sản phẩm
nào đó - 1
Loại sản phẩm
thì có thể không có hoặc có nhiềuSản phẩm
Step 3: khởi tạo cột dùng để liên kết giữa 2 bảng và tạo liên kết Khóa ngoại
Do quan hệ chúng ta sử dụng làKhông-Nhiều (0-n) hay Một-Nhiều (1-n) => còn gọi là quan hệ dạng Cha-Con (Master-Detail)
, nên sẽ có một số quy tắc thiết kế như sau:
- Cột khóa ngoại (Foreign key - FK) sẽ được đặt bên table con (detail)
sanpham
, với một số quy tắc sau:- Quy cách đặt tên: thường đặt tên giống như cột khóa chính (Primary key - PK) bên table cha
loaisanpham
. - Để có thể tạo quan hệ ràng buộc Khóa ngoại với nhau thì kiểu dữ liệu của cột Khóa ngoại (bên table
sanpham
) và Khóa chính (bên tableloaisanpham
) phải giống hệt nhau.
- Quy cách đặt tên: thường đặt tên giống như cột khóa chính (Primary key - PK) bên table cha
Thực hành
Tạo khóa ngoại cho tableshop_products
và table shop_categories
trong HeidiSQL:
Step 1: tạo table shop_categories
Step 2: tạo table shop_products
Step 3: tạo khóa ngoại Foreign Key liên kết giữa 2 table
Step 4: nhập dữ liệu data cho table shop_categories
Step 5: nhập dữ liệu data cho table shop_products
Xong!
Mục lục
Chương trình học
- Giới thiệu, cài đặt môi trường thực hành 1
- Tổng quan, khái niệm về database 2
-
Các lệnh tạo cấu trúc (schema database)
7
- Mô hình thực thể ER của cơ sở dữ liệu (database) NetaShop #2448
- Tạo cơ sở dữ liệu (database) NetaShop - Sử dụng HeidiSQL #8587
- Tạo bảng (table) Danh mục phẳng - Sử dụng HeidiSQL #8582
- Tạo bảng (table) Danh mục có liên kết khóa ngoại (có quan hệ) - Sử dụng HeidiSQL #8597
- Tạo bảng (table) theo quan hệ Nhiều - Nhiều (N-N) - Sử dụng HeidiSQL #8619
- Tạo bảng (table) có Quan hệ Tự thân (self foreign key) - Sử dụng HeidiSQL #8664
- Cơ sở dữ liệu mẫu salomon #11820
- Các lệnh cập nhật dữ liệu (Insert - Update - Delete) 3
-
Các lệnh truy vấn dữ liệu (query data)
6
- Câu lệnh Truy vấn dữ liệu SELECT Đơn giản #2666
- Câu lệnh Truy vấn dữ liệu SELECT với bộ lọc dữ liệu WHERE #2668
- Câu lệnh Truy vấn dữ liệu SELECT với sắp xếp dữ liệu ORDER BY #2669
- Câu lệnh Truy vấn dữ liệu SELECT với mệnh đề giới hạn dữ liệu LIMIT OFFSET #8693
- Tìm hiểu cơ chế phân trang (Pagination) và cách viết câu lệnh truy vấn dữ liệu SELECT áp dụng cơ chế phân trang (Pagination) với LIMIT OFFSET #12249
- Bài tập Truy vấn CSDL #2457
- Các lệnh truy vấn dữ liệu (query data) - Nâng cao 5
- Bài tập Tổng hợp 1
-
Phân tích, thiết kế Hệ thống
8
- Các mối quan hệ giữa các Thực thể (Entity) #8596
- Bài tập thiết kế Cơ sơ dữ liệu quản lý Nhân viên và Phòng ban #8600
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Giảng viên và Sinh viên #8601
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Chấm công Tiền lương #8620
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Nhân sự #8629
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Bán hàng Thương mại điện tử (Có quản lý Nhập, Xuất, Kho hàng) #9352
- Kho sách, nguồn tài liệu tham khảo Cơ sở dữ liệu MySQL #9001
- Plugin tự động sinh tài liệu mô tả cấu trúc của các bảng cho MySQL Workbench #9356
- Quản trị người dùng và cấp quyền trong MySQL 1
- Tham khảo 2
Các bài học
Bài học trước Bài học tiếp theo
Chương trình học
Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...Chương trình học
- Giới thiệu, cài đặt môi trường thực hành 1
- Tổng quan, khái niệm về database 2
-
Các lệnh tạo cấu trúc (schema database)
7
- Mô hình thực thể ER của cơ sở dữ liệu (database) NetaShop #2448
- Tạo cơ sở dữ liệu (database) NetaShop - Sử dụng HeidiSQL #8587
- Tạo bảng (table) Danh mục phẳng - Sử dụng HeidiSQL #8582
- Tạo bảng (table) Danh mục có liên kết khóa ngoại (có quan hệ) - Sử dụng HeidiSQL #8597
- Tạo bảng (table) theo quan hệ Nhiều - Nhiều (N-N) - Sử dụng HeidiSQL #8619
- Tạo bảng (table) có Quan hệ Tự thân (self foreign key) - Sử dụng HeidiSQL #8664
- Cơ sở dữ liệu mẫu salomon #11820
- Các lệnh cập nhật dữ liệu (Insert - Update - Delete) 3
-
Các lệnh truy vấn dữ liệu (query data)
6
- Câu lệnh Truy vấn dữ liệu SELECT Đơn giản #2666
- Câu lệnh Truy vấn dữ liệu SELECT với bộ lọc dữ liệu WHERE #2668
- Câu lệnh Truy vấn dữ liệu SELECT với sắp xếp dữ liệu ORDER BY #2669
- Câu lệnh Truy vấn dữ liệu SELECT với mệnh đề giới hạn dữ liệu LIMIT OFFSET #8693
- Tìm hiểu cơ chế phân trang (Pagination) và cách viết câu lệnh truy vấn dữ liệu SELECT áp dụng cơ chế phân trang (Pagination) với LIMIT OFFSET #12249
- Bài tập Truy vấn CSDL #2457
- Các lệnh truy vấn dữ liệu (query data) - Nâng cao 5
- Bài tập Tổng hợp 1
-
Phân tích, thiết kế Hệ thống
8
- Các mối quan hệ giữa các Thực thể (Entity) #8596
- Bài tập thiết kế Cơ sơ dữ liệu quản lý Nhân viên và Phòng ban #8600
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Giảng viên và Sinh viên #8601
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Chấm công Tiền lương #8620
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Nhân sự #8629
- Bài tập thiết kế Cơ sở dữ liệu Quản lý Bán hàng Thương mại điện tử (Có quản lý Nhập, Xuất, Kho hàng) #9352
- Kho sách, nguồn tài liệu tham khảo Cơ sở dữ liệu MySQL #9001
- Plugin tự động sinh tài liệu mô tả cấu trúc của các bảng cho MySQL Workbench #9356
- Quản trị người dùng và cấp quyền trong MySQL 1
- Tham khảo 2
Bài học trước Bài học tiếp theo
Menu Tiện ích
Menu Hướng dẫn Học tập
❤🧡💛💚💙💜 Học là phải THỰC HÀNH ❤🧡💛💚💙💜
Thực hiện các bước tuần tự theo nội dung Bài học nhé!