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
- Cơ sở dữ liệu
-
Thiết kế Cơ sở dữ liệu
12
- Mô hình dữ liệu Quan niệm CDM (Conceptual Data Model) #10551
- Mô hình dữ liệu Vật lý PDM (Physical Data Model) #10560
- [Bài tập 1.1] - Thực hành thiết kế sơ đồ CDM trang web Thương mại điện tử #10552
- [Bài tập 1.2] - Thực hành thiết kế sơ đồ PDM (ER) trang web Thương mại điện tử #10571
- [Bài tập 1.3] - Thực hành thiết kế sơ đồ CDM hệ thống Quản trị Thiết bị / Phòng học #10554
- [Bài tập 1.4] - Thực hành thiết kế sơ đồ PDM (ER) hệ thống Quản trị Thiết bị / Phòng học #10572
- [Bài tập 1.5] - Thực hành thiết kế sơ đồ CDM hệ thống Kênh phát nhạc #10556
- [Bài tập 1.6] - Thực hành thiết kế sơ đồ PDM (ER) hệ thống Kênh phát nhạc #10573
- [Bài tập 1.7] - Thực hành thiết kế sơ đồ CDM trang web Quản lý Truyện tranh / Tiểu thuyết #10569
- [Bài tập 1.8] - Thực hành thiết kế sơ đồ PDM (ER) trang web Quản lý Truyện tranh / Tiểu thuyết #10574
- [Bài tập 1.9] - Thực hành thiết kế sơ đồ CDM hệ thống Quản trị Nhân sự #10575
- [Bài tập 1.10] - Thực hành thiết kế sơ đồ PDM (ER) hệ thống Quản trị Nhân sự #10558
- Hệ quản trị Cơ sở dữ liệu MySQL - Tổng quan, khái niệm về database 2
- Hệ quản trị Cơ sở dữ liệu MySQL - Các lệnh tạo cấu trúc (schema database) 2
-
Hệ quản trị Cơ sở dữ liệu MySQL - Tạo cấu trúc database với HeidiSQL
9
- 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
- [Bài tập 2.1] - Thực hành tạo cấu trúc database với PDM (ER) trang web Thương mại điện tử #10598
- [Bài tập 2.2] - Thực hành tạo cấu trúc database với PDM (ER) trang web Quản lý Truyện tranh / Tiểu thuyết #10603
- Cách export (dump) cơ sở dữ liệu MySQL bằng HeidiSQL #8343
- [Bài tập 2.3] - Thực hành tạo cấu trúc database với PDM (ER) trang web Quản lý Bóng đá #11614
-
Hệ quản trị Cơ sở dữ liệu MySQL - Các lệnh cập nhật dữ liệu (Insert - Update - Delete)
5
- Câu lệnh Thêm dữ liệu (INSERT) #2663
- Câu lệnh Cập nhật dữ liệu (UPDATE) #2665
- Câu lệnh Xóa dữ liệu (DELETE) #2664
- [Bài tập 2.3] - Thực hành thao tác các câu lệnh cập nhật dữ liệu trang web Thương mại điện tử #10605
- [Bài tập 2.4] - Thực hành thao tác các câu lệnh cập nhật dữ liệu trang web Quản lý Truyện tranh / Tiểu thuyết #10625
- Hệ quản trị Cơ sở dữ liệu MySQL - Các lệnh truy vấn dữ liệu (Select query data) 3
-
Ngôn ngữ lập trình PHP - Cú pháp căn bản
13
- Sơ đồ vận hành của một Website #1311
- Trình diễn (render) dữ liệu Đơn giản ra giao diện (HTML, CSS, JS) sử dụng PHP #8696
- Trình diễn (render) dữ liệu Danh sách Array ra giao diện (HTML, CSS, JS) sử dụng PHP #9564
- [Bài tập] - Tạo các trang web PHP cho phép Khách truy cập tương ứng từ địa chỉ web URL #10651
- [Bài tập] - Khai báo các biến dữ liệu Đơn giản trong PHP và Render dữ liệu Đơn giản ra giao diện (HTML, CSS, JS) sử dụng PHP #10669
- [Bài tập] - Khai báo các biến dữ liệu Mảng Array và Render dữ liệu Danh sách Array ra giao diện (HTML, CSS, JS) sử dụng PHP #10670
- [Bài tập] - Xét kết quả tốt nghiệp của Sinh viên dựa theo thang điểm 10 sử dụng PHP #10695
- [Bài tập] - Làm quen với vòng lặp FOR / FOREACH / WHILE / DO WHILE trong PHP #10704
- Hàm (function) trong PHP #10713
- Các hàm (functions) xử lý Ngày tháng (datetime) trong PHP #10727
- Các hàm (functions) kiểm tra Biến (Variable) và các hàm kiểm tra Kiểu dữ liệu (data types) của biến trong PHP #10728
- [Bài tập] - Làm quen với hàm (function) trong PHP #10721
- [Bài tập] - Làm quen và sử dụng các hàm (functions) thông dụng có sẵn trong PHP #10753
-
Ngôn ngữ lập trình PHP - Xử lý Request và Response
6
- Thu thập và Xử lý dữ liệu bằng Yêu cầu GET (Request GET) trong PHP #8704
- Thu thập và Xử lý dữ liệu bằng Yêu cầu POST (Request POST) trong PHP #8705
- [Bài tập] - Tạo Form Đăng nhập và truyền dữ liệu bằng Request POST trong PHP #10771
- [Bài tập] - Tạo Form Liên hệ và truyền dữ liệu bằng Request POST trong PHP #10772
- [Bài tập] - Tạo trang Danh sách Sinh viên và truyền dữ liệu chức năng Sửa/Xóa bằng Request GET trong PHP #10773
- Bài tập tạo Form Tìm kiếm Thu thập và Xử lý dữ liệu bằng Yêu cầu GET (Request GET) trong PHP #8717
- Ngôn ngữ lập trình PHP - Thiết kế bố cục (layouts) cho trang web 3
-
Ngôn ngữ lập trình PHP - Thao tác với Cơ sở dữ liệu MySQL
16
- Quy trình (workflow) xử lý thao tác với cơ sở dữ liệu MySQL trong PHP #9623
- Tạo kết nối đến CSDL MySQL trong PHP #8116
- Thực thi câu lệnh SELECT trong PHP #8124
- Thực thi câu lệnh INSERT trong PHP #8118
- Thực thi câu lệnh INSERT với FORM trong PHP #8126
- Thực thi câu lệnh UPDATE trong PHP #8120
- Thực thi câu lệnh UPDATE với FORM trong PHP #8133
- Thực thi câu lệnh DELETE trong PHP #8122
- Thực thi câu lệnh DELETE với FORM trong PHP #8130
- [Bài tập] - Tạo trang web hiển thị Danh sách các Truyện tranh/Tiểu thuyết hiện có trong Database ra ngoài Trang chủ - Thực thi câu lệnh SELECT trong PHP #10803
- [Bài tập] - Tạo trang web hiển thị Chi tiết của một Truyện tranh/Tiểu thuyết - Thực thi câu lệnh SELECT trong PHP #10807
- [Bài tập] - Tạo trang web hiển thị Nội dung của một Chương/Tập cụ thể thuộc một Truyện tranh/Tiểu thuyết nào đó - Thực thi câu lệnh SELECT trong PHP #10812
- [Bài tập] - Tạo trang web Quản lý hiển thị Danh sách Truyện tranh - Index #10819
- [Bài tập] - Tạo trang web Quản lý hiển thị Danh sách Tiểu thuyết - Index #10822
- [Bài tập] - Tạo trang web Quản lý Thêm mới Truyện tranh - Create #10831
- [Bài tập] - Tạo trang web Quản lý Thêm mới Tiểu thuyết - Create #10836
- Đồ án cuối khóa 6
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
- Cơ sở dữ liệu
-
Thiết kế Cơ sở dữ liệu
12
- Mô hình dữ liệu Quan niệm CDM (Conceptual Data Model) #10551
- Mô hình dữ liệu Vật lý PDM (Physical Data Model) #10560
- [Bài tập 1.1] - Thực hành thiết kế sơ đồ CDM trang web Thương mại điện tử #10552
- [Bài tập 1.2] - Thực hành thiết kế sơ đồ PDM (ER) trang web Thương mại điện tử #10571
- [Bài tập 1.3] - Thực hành thiết kế sơ đồ CDM hệ thống Quản trị Thiết bị / Phòng học #10554
- [Bài tập 1.4] - Thực hành thiết kế sơ đồ PDM (ER) hệ thống Quản trị Thiết bị / Phòng học #10572
- [Bài tập 1.5] - Thực hành thiết kế sơ đồ CDM hệ thống Kênh phát nhạc #10556
- [Bài tập 1.6] - Thực hành thiết kế sơ đồ PDM (ER) hệ thống Kênh phát nhạc #10573
- [Bài tập 1.7] - Thực hành thiết kế sơ đồ CDM trang web Quản lý Truyện tranh / Tiểu thuyết #10569
- [Bài tập 1.8] - Thực hành thiết kế sơ đồ PDM (ER) trang web Quản lý Truyện tranh / Tiểu thuyết #10574
- [Bài tập 1.9] - Thực hành thiết kế sơ đồ CDM hệ thống Quản trị Nhân sự #10575
- [Bài tập 1.10] - Thực hành thiết kế sơ đồ PDM (ER) hệ thống Quản trị Nhân sự #10558
- Hệ quản trị Cơ sở dữ liệu MySQL - Tổng quan, khái niệm về database 2
- Hệ quản trị Cơ sở dữ liệu MySQL - Các lệnh tạo cấu trúc (schema database) 2
-
Hệ quản trị Cơ sở dữ liệu MySQL - Tạo cấu trúc database với HeidiSQL
9
- 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
- [Bài tập 2.1] - Thực hành tạo cấu trúc database với PDM (ER) trang web Thương mại điện tử #10598
- [Bài tập 2.2] - Thực hành tạo cấu trúc database với PDM (ER) trang web Quản lý Truyện tranh / Tiểu thuyết #10603
- Cách export (dump) cơ sở dữ liệu MySQL bằng HeidiSQL #8343
- [Bài tập 2.3] - Thực hành tạo cấu trúc database với PDM (ER) trang web Quản lý Bóng đá #11614
-
Hệ quản trị Cơ sở dữ liệu MySQL - Các lệnh cập nhật dữ liệu (Insert - Update - Delete)
5
- Câu lệnh Thêm dữ liệu (INSERT) #2663
- Câu lệnh Cập nhật dữ liệu (UPDATE) #2665
- Câu lệnh Xóa dữ liệu (DELETE) #2664
- [Bài tập 2.3] - Thực hành thao tác các câu lệnh cập nhật dữ liệu trang web Thương mại điện tử #10605
- [Bài tập 2.4] - Thực hành thao tác các câu lệnh cập nhật dữ liệu trang web Quản lý Truyện tranh / Tiểu thuyết #10625
- Hệ quản trị Cơ sở dữ liệu MySQL - Các lệnh truy vấn dữ liệu (Select query data) 3
-
Ngôn ngữ lập trình PHP - Cú pháp căn bản
13
- Sơ đồ vận hành của một Website #1311
- Trình diễn (render) dữ liệu Đơn giản ra giao diện (HTML, CSS, JS) sử dụng PHP #8696
- Trình diễn (render) dữ liệu Danh sách Array ra giao diện (HTML, CSS, JS) sử dụng PHP #9564
- [Bài tập] - Tạo các trang web PHP cho phép Khách truy cập tương ứng từ địa chỉ web URL #10651
- [Bài tập] - Khai báo các biến dữ liệu Đơn giản trong PHP và Render dữ liệu Đơn giản ra giao diện (HTML, CSS, JS) sử dụng PHP #10669
- [Bài tập] - Khai báo các biến dữ liệu Mảng Array và Render dữ liệu Danh sách Array ra giao diện (HTML, CSS, JS) sử dụng PHP #10670
- [Bài tập] - Xét kết quả tốt nghiệp của Sinh viên dựa theo thang điểm 10 sử dụng PHP #10695
- [Bài tập] - Làm quen với vòng lặp FOR / FOREACH / WHILE / DO WHILE trong PHP #10704
- Hàm (function) trong PHP #10713
- Các hàm (functions) xử lý Ngày tháng (datetime) trong PHP #10727
- Các hàm (functions) kiểm tra Biến (Variable) và các hàm kiểm tra Kiểu dữ liệu (data types) của biến trong PHP #10728
- [Bài tập] - Làm quen với hàm (function) trong PHP #10721
- [Bài tập] - Làm quen và sử dụng các hàm (functions) thông dụng có sẵn trong PHP #10753
-
Ngôn ngữ lập trình PHP - Xử lý Request và Response
6
- Thu thập và Xử lý dữ liệu bằng Yêu cầu GET (Request GET) trong PHP #8704
- Thu thập và Xử lý dữ liệu bằng Yêu cầu POST (Request POST) trong PHP #8705
- [Bài tập] - Tạo Form Đăng nhập và truyền dữ liệu bằng Request POST trong PHP #10771
- [Bài tập] - Tạo Form Liên hệ và truyền dữ liệu bằng Request POST trong PHP #10772
- [Bài tập] - Tạo trang Danh sách Sinh viên và truyền dữ liệu chức năng Sửa/Xóa bằng Request GET trong PHP #10773
- Bài tập tạo Form Tìm kiếm Thu thập và Xử lý dữ liệu bằng Yêu cầu GET (Request GET) trong PHP #8717
- Ngôn ngữ lập trình PHP - Thiết kế bố cục (layouts) cho trang web 3
-
Ngôn ngữ lập trình PHP - Thao tác với Cơ sở dữ liệu MySQL
16
- Quy trình (workflow) xử lý thao tác với cơ sở dữ liệu MySQL trong PHP #9623
- Tạo kết nối đến CSDL MySQL trong PHP #8116
- Thực thi câu lệnh SELECT trong PHP #8124
- Thực thi câu lệnh INSERT trong PHP #8118
- Thực thi câu lệnh INSERT với FORM trong PHP #8126
- Thực thi câu lệnh UPDATE trong PHP #8120
- Thực thi câu lệnh UPDATE với FORM trong PHP #8133
- Thực thi câu lệnh DELETE trong PHP #8122
- Thực thi câu lệnh DELETE với FORM trong PHP #8130
- [Bài tập] - Tạo trang web hiển thị Danh sách các Truyện tranh/Tiểu thuyết hiện có trong Database ra ngoài Trang chủ - Thực thi câu lệnh SELECT trong PHP #10803
- [Bài tập] - Tạo trang web hiển thị Chi tiết của một Truyện tranh/Tiểu thuyết - Thực thi câu lệnh SELECT trong PHP #10807
- [Bài tập] - Tạo trang web hiển thị Nội dung của một Chương/Tập cụ thể thuộc một Truyện tranh/Tiểu thuyết nào đó - Thực thi câu lệnh SELECT trong PHP #10812
- [Bài tập] - Tạo trang web Quản lý hiển thị Danh sách Truyện tranh - Index #10819
- [Bài tập] - Tạo trang web Quản lý hiển thị Danh sách Tiểu thuyết - Index #10822
- [Bài tập] - Tạo trang web Quản lý Thêm mới Truyện tranh - Create #10831
- [Bài tập] - Tạo trang web Quản lý Thêm mới Tiểu thuyết - Create #10836
- Đồ án cuối khóa 6
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é!