Các loại chuẩn hoá trong CSDL Quan hệ

Cùng LPTECH tìm hiểu các loại chuẩn hoá trong CSDL Quan hệ quan trọng cho việc thiết kế cơ sở dữ liệu trong Thiết kế website. Đó là các chuẩn hóa cơ sở dữ liệu quan hệ. Thông thường, chủ đề này mang tính học thuật do vậy phù hợp hơn ở trung tâm, viện nghiên cứu. Tuy nhiên, việc hiểu biết những nguyên lý cơ bản của chuẩn hóa cơ sở dữ liệu và áp dụng chúng vào công việc thiết kế cơ sỡ dữ liệu hàng ngày mà chúng ta phải làm thực sự là không phức tạp mà còn giúp cải thiện hiệu năng hoạt động của cơ sở dữ liệu.

Cơ sở dữ liệu quan hệ là gì ?

RDBMS - Relational Database Management System là hệ quản trị cơ sở dữ liệu quan hệ được giới thiệu bởi E.F.Codd.

RDBMS là mô hình cơ bản cho ngôn ngữ SQL và cho tất cả các cơ sở dữ liệu hư MS SQL Server, IBM Server, IBM DB2, Oracle, MySQL và Microsoft Access

Chuẩn hóa CSDL là gì ?

Chuẩn hóa CSDL là để giúp cho việc tổ chức dữ liệu trong cơ sở dữ liệu một cách hiệu quả. Có hai mục đích chính để chuẩn hóa dữ liệu:

  1. Giảm lượng dữ liệu dư thừa (ví dụ như lưu trữ cùng một dữ liệu trong 1 bảng)
  2. Đảm bảo độc lập dữ liệu (dữ liệu liên quan đặt trong cùng 1 bảng) Cả 2 mục đích trên đều giúp giảm thiểu không gian sử dụng trong cơ sở dữ liệu và đảm bảo dữ liệu được lưu trữ một cách logic.

Các Chuẩn thông thường

Cộng đồng những người phát triển cở sở dữ liệu đã đưa ra 5 chuẩn được đánh số từ 1 (chuẩn 1 hoặc 1NF-Normal form) đến 5 (chuẩn 5 hoặc 5NF). Trong thực tế làm việc, chúng ta sẽ thường xuyên gặp 1NF, 2NF, 3NF và 4NF. Tuy nhiên, chuẩn 5 gần như là không gặp nên sẽ không bàn luận trong bài viết này.

Ngay bây giờ hãy cùng LPTech tìm hiểu qua các loại chuẩn hoá CSDL Quan hệ Phổ biến nào.

Chuẩn 1Normal Form - 1NF

Chuẩn 1 hay gọi tắt là 1NF là tập hợp các quy định cơ bản để tổ chức cơ sở dữ liệu như sau:

  1. Giảm cột dữ liệu dư thừa từ cùng 1 bảng
  2. Tạo các bảng riêng biệt cho mỗi nhóm dữ liệu liên quan đến nhau và định nghĩa mỗi dòng với một cột duy nhất (gọi là primary key) Để thỏa mãn các tiêu chí của chuẩn 1 chúng ta phải không được để trùng lặp các giá trị trong dòng của bảng. Nguyên lý này được gọi là nguyên tử hóa bảng (atomicity of table)và bảng như này gọi là bảng nguyên tử. Để hiểu hơn về chuẩn 1 chúng ta xem xét ví dụ sau: bảng quản lý nhân sự lưu trữ quan hệ giữa quản lý và nhân viên. Để hiểu rõ hơn về chuẩn hóa 1 chúng ta có quy tắc sau mỗi quản lý có một hoặc nhiều nhân viên nhưng mỗi nhân viên chỉ có duy nhất một quản lý.

Khi tạo bảng tính cho việc quản lý trên, chúng ta tạo một bảng có các cột sau:

- Manager
- Subordiante 1
- Subordiante 2
- Subordiante 3
- Subordiante 4

Tuy nhiên, khi áp chuẩn 1 vào chúng ta cần loại bỏ cột dữ liệu lặp trong cùng 1 bảng. Cụ thể trong trường hợp này, cột nhân viên 1,2,3,4 bị lặp lại. Nếu quản lý có 1 nhân viên thì cột nhân viên 2,3,4 sẽ thừa và như vậy gây lãng phí không gian lưu trữ. Hơn nữa, quản lý có 4 nhân viên rồi thì chuyện gì xảy ra khi có thêm nhân viên mới? Cấu trúc bảng lúc này sẽ phải chỉnh lại. Thay đổi cấu trúc bảng như sau:

- Manager
- Subordinates

Vì vậy, chúng ta không cần có nhiều cột nhân viên nữa mà sẽ chỉ còn 2 cột quản lý và nhân viên. Tuy nhiên, cột nhân viên lúc này có nhiều giá trị như “A,B,C”. Giải pháp này cũng ko được vì cột nhân viên vẫn có lặp dữ liệu và không duy nhất (non-atomic). Chuyện gì xảy ra khi chúng ta muốn thêm hoặc loại bỏ 1 nhân viên. Chúng ta sẽ phải đọc và ghi lại nội dung của cột đó. Nó sẽ không là vấn đề nếu như quản lý có ít nhân viên, nhưng nếu quản lý có hàng trăm nhân viên thì điều này là phức tạp cho việc xử lý truy vấn dữ liệu.

Hướng tiếp cận khác, cột nhân viên sẽ là duy nhất một giá trị, tuy nhiên cột quản lý sẽ có nhiều giá trị.

- Manager
- Subordinate

Bây giờ, vấn đề sẽ là tìm ra cột làm khóa chính. Với hướng tiếp cận như này thì cột nhân viên sẽ là khóa chính. Trong thực tế, lựa chọn trên có vẻ hợp lý khi mà mỗi nhân viên chỉ có duy nhất một quản lý. Tuy nhiên, chuyện gì sẽ xảy ra khi chúng ta thuê một nhân viên tên Nguyen Van A và chúng ta đã lưu trữ quan hệ của người này rồi.

Cách tốt nhất là sử dụng mã số duy nhất(employee ID) cho nhân viên làm khóa chính. Và bảng cuối cùng của chúng ta sẽ trông như sau:

- Manager ID
- Subordinate ID

Chuẩn 2Normal Form - 2NF

Chuẩn 2NF sẽ giúp các lập trình viên loại bỏ các giá trị trùng lặp. Khi thiết kế cơ cơ sở dữ liệu cho KH cần chú ý đến việc trùng lặp, hãy áp dụng chuẩn 2NF nhé:

  1. Bao gồm toàn bộ yêu cầu của chuẩn1.
  2. Xóa bỏ tập con dữ liệu trong nhiều hảng của 1 bảng và đặt chúng vào các bảng riêng biệt.
  3. Tạo quan hệ giữa các bảng mới thông qua sử dụng khóa ngoại (foreign keys)

Để hiểu rõ hơn chúng ta cùng tìm hiểu ví dụ sau:  Bảng lưu trữ thông tin khách hàng của một shop online. Chúng ta có một bảng đơn gọi là Customers có các cột sau:

- CustNum
- FirstName
- LastName
- Address
- City
- State
- ZIP

Có một sự dư thừa nhỏ là chúng ta đang lưu trữ “Sea Cliff, NY 11579” and “Miami, FL 33157” 2 lần cho mỗi dòng. Điều này có thể không ảnh hưởng quá nhiều cho không gian lưu trữ nhưng nếu chúng ta ko hàng trăm trường hợp như vậy thì sẽ rất lãng phí không gian lưu trữ. Ngoài ra, nếu ZIP code cho Sea Cliff có bị thay đổi thì chúng ta cần thay đổi cho rất nhiều chỗ trong cơ sở dữ liệu.

Trong chuẩn 2, việc làm giảm thông tin dư thừa là tách ra và lưu trữ vào các bảng riêng biệt. Bảng mới của chúng có (gọi là bảng ZIPs) có những cột sau:

- ZIP
- City
- State

Như vậy, chúng ta sẽ loại bỏ được giá trị trùng lặp trong bảng Customers. Đấy là tiêu chí đầu tiên của chuẩn 1 đã được thỏa mãn. Chúng ta vẫn cần sử dụng khóa ngoại để nối 2 bảng lại với nhau. Chúng ta sử dụng ZIP code (khóa chính cho bảng ZIPs) để tạo quan hệ. Và đây là bảng Customers mới:


- CustNum
- FirstName
- LastName
- Address
- ZIP

Như vậy chúng ta đã làm giảm thiểu tối đa việc lặp thông tin và cấu trúc lại bảng theo chuẩn 2.

Chuẩn 3Normal Form - 3NF

Chuẩn 3 Normal Form sẽ áp dụng một số tiêu chí sau để đảm bảo tính tối ưu nhất của CSDL:

  1. Bao gồm tất cả yêu cầu của chuẩn 1 và chuẩn 2.
  2. Xóa bỏ những cột không phụ thuộc vào khóa chính

Để hiểu rõ hơn chúng ta xem xét ví dụ sau: Chúng ta có bảng orders bao gồm các thuộc tính sau:

- Order Number
- Customer Number
- Unit Price
- Quantity
- Total

Chú ý, điều đầu tiên là bảng của chúng ta cần phải thỏa mãn chuẩn 1NF, 2 NF. Có sự lặp cột dữ liệu không? - Không. Có khóa chính chưa ? - Có rồi, chính là cột order number. Do đó, bảng này thỏa mãn 1NF. Có tập con dữ liệu trong nhiều dòng ko ? - Không, vì thế bảng này cũng thỏa mãn 2NF.

Bây giờ, chúng ta cùng xem tất cả cột có phụ thuộc vào khóa chính không? Qua bảng trên chúng ta thấy cột total được xác định bằng unit price nhân với quantity. Do vậy cột này không phụ thuộc vào khóa chính. Và bảng của chúng ta lúc này chỉ sử dụng các thuộc tính sau:

- Order Number
- Customer Number
- Unit Price
- Quantity

Và bây giờ bảng của chúng ta đã thỏa mãn chuẩn 3NF. Và total lúc này không được lưu trữ trong cơ sở dữ liệu và được tính trực tiếp khi chúng ta truy vấn.

SELECT OrderNumber, UnitPrice*Quantity AS Total FROM Orders

Chuẩn 4 (4NF)

Cuối cùng, chuẩn 4 (4NF) có thêm một số yêu cầu sau:

  1. Tất cả yêu cầu của chuẩn 3
  2. Một quan hệ là chuẩn 4 nếu nó không có phụ thuộc nhiều giá trị Chú ý, các chuẩn hóa trên có tích chất tích lũy. Vì vậy, cơ sở dữ liệu đã đạt chuẩn 2 thì nó phải đạt đầy đủ tiêu chí của chuẩn 1.

Chuẩn Boyce-Codd (BCNF hoặc 3.5NF)

Chuẩn Boyce-Codd bao gồm các yêu cầu sau:

  1. Toàn bộ yêu cầu của chuẩn 3
  2. Mọi sự xác định phải là khóa ứng viên (candidate key) Ví dụ: bảng lưu thông tin của nhân viên có các thuộc tính sau: employee_id, first_name, last_name, title. Trong bảng này, cột emloyee_id giúp xác định first_name và last_name. Tương tự, cặp (first_name, last_name) cũng sẽ xác định được employee_id

Tóm lại, Các đơn vị thiết kế website hoặc các bạn đang là lập trình viên hãy luôn nhớ các tiêu chuẩn trên để áp dụng triệt để vào dự án của mình. Đem lại hiệu quả tốt nhất và chất lượng dự án cao. CSDL rất quan trọng nên việc thiết kế cơ sở dữ liệu quan hệ chiếm đến 50% chất lượng toàn dự án.

Thông tin liên hệ

Nếu bạn có thắc mắc gì, có thể gửi yêu cầu cho chúng tôi, và chúng tôi sẽ liên lạc lại với bạn sớm nhất có thể .

Công ty TNHH TMĐT Công nghệ LP

Giấy phép kinh doanh số 0315561312/GP bởi Sở Kế Hoạch và Đầu Tư TP. Hồ Chí Minh.

Văn phòng: Lầu 4, Toà nhà Lê Trí, 164 Phan Văn Trị, Phường 12,Quận Bình Thạnh, HCMC

Hotline: 0338 586 864

Mail: sales@lptech.asia

Zalo:LP Tech Zalo Official

Liên hệ qua Zalo: 0338586864 ( hoặc bấm vào link này: http://lptech.asia/zalo-lptech). Hoặc nhập thông tin mà bạn cần hỗ trợ vào ô liên hệ bên dưới để lên lạc với LPTech nhé.

Bài viết cùng chuyên mục

Repository là gì? Các đặc điểm và tính năng của...

Repository là kho lưu trữ mã nguồn quan trọng trong lập trình, giúp quản lý và chia sẻ mã nguồn hiệu quả. Cùng tìm hiểu chi tiết về...

LLM là gì? Tổng quan chi tiết về mô hình ngôn ngữ...

LLM là gì? Mô hình ngôn ngữ lớn (LLM) là một bước đột phá trong trí tuệ nhân tạo, giúp máy hiểu và xử lý ngôn ngữ tự nhiên vượt trội. Tìm...

Redis là gì? Các đặc điểm và phân loại dữ liệu...

Redis là gì? Hệ thống cơ sở dữ liệu NoSQL phổ biến với tốc độ xử lý vượt trội, hỗ trợ lưu trữ linh hoạt và nhiều ứng dụng trong công nghệ...

NGINX là gì? Hướng dẫn cài đặt và cấu hình NGINX

NGINX là gì? NGINX là một máy chủ web phổ biến được sử dụng rộng rãi nhờ khả năng xử lý lượng lớn kết nối và tối ưu hóa hiệu suất.

Buffer là gì? Công dụng của Buffer trong truyền...

Buffer là gì? Đây là một vùng bộ nhớ tạm thời giúp xử lý và lưu trữ dữ liệu trong lập trình và công nghệ. Tìm hiểu về khái niệm và công...

Env là gì? Hướng dẫn lưu trữ biến môi trường hiệu...

Các lập trình viên thường sử dụng file .env để lưu trữ các biến môi trường một cách an toàn và tiện lợi. Vậy file .env là gì và làm sao...

Bài viết mới nhất


Cách làm bảng chấm công trong Excel tự động...

Hướng dẫn cách làm bảng chấm công tự động trên Excel, Google Sheets tự động nhảy ngày tháng chi tiết trong bài viết này.

Các ứng dụng chấm công (có tính lương) tự động,...

App chấm công thông minh giúp doanh nghiệp quản lý giờ làm, ca kíp và chấm công bằng GPS, vân tay. Hệ thống báo cáo tự động tối ưu quy trình nhân sự.

Blueprint là gì? Trực quan quy trình làm việc...

Cùng LPTech tìm hiểu blueprint là gì và cách service blueprint giúp tối ưu quy trình, nâng cao hiệu suất và cải thiện trải nghiệm khách hàng cho...

Barber là gì? Barber shop có gì khác với hair...

Barber là những thợ cắt tóc chuyên nghiệp, chuyên về các dịch vụ cắt tóc và cạo râu cho nam giới. Barber shop là nơi có các barber với phong cách...

Tuyển dụng Thực tập sinh Chăm sóc khách hàng

LPTECH tuyển dụng vị trí Thực tập sinh Chăm sóc khách hàng, hỗ trợ giải đáp thắc mắc của khách hàng, tư vấn dịch vụ

zCloud là gì? Giải phóng bộ nhớ, tăng dung...

Zalo đã giới thiệu dịch vụ lưu trữ đám mây mang tên zCloud. Tìm hiểu ngay cách bảo vệ và quản lý dữ liệu trò chuyện một cách hiệu quả và an toàn!

Tiền hoa hồng là gì? Cách tính phần trăm tiền...

Tiền hoa hồng là gì là một câu hỏi thường được đặt ra trong lĩnh vực sale, bất động sản, kinh doanh,... Tìm hiểu cách tính tiền hoa hồng chi tiết.

COB là gì? 2 ý nghĩa quan trọng của COB để...

COB là gì? Từ viết tắt này mang nhiều ý nghĩa khác nhau, từ kinh doanh đến công nghệ. Tìm hiểu chi tiết về COB để hiểu rõ cách sử dụng trong từng...

File KML là gì? Cách tạo và mở file KML đầy đủ...

File KML là gì? File KML là định dạng được sử dụng để hiển thị dữ liệu địa lý trên các ứng dụng như Google Earth.

zBusiness là gì? Nâng cấp tài khoản Zalo kinh...

Đăng ký nâng cấp tài khoản zBusiness (Zalo Business Account) dành cho các cá nhân có nhu cầu sử dụng các tính năng nâng cao phục vụ kinh doanh trên...