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

Điện thoại: 0963 400 885

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

5.0/5 (2 Reviews)
CreatedBy LPTech Content Div
Posted by LPTech

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 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ý.

Chuẩn 1Normal Form - 1NF

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)

Chuẩn 2Normal Form - 2NF

Để 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

Chuẩn 3Normal Form - 3NF

Để 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 4 Normal Form - 4NF

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

Chuẩn Boyce-Codd

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.

96/76 Đường Trục, Phường 13, Quận Bình Thạnh, HCMC

Hotline: 0963400885

Mail: ceo@levanphu.info

Liên hệ qua Zalo: 038586864 ( 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é.


Liên hệ với LPTech ngay!



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

Vue.js là gì? Tìm hiểu về Vuejs
2019-12-01 10:04:45

Vue.js là gì? Tìm hiểu về Vuejs

VueJS là một JS Framework dùng để xây dựng giao diện người dùng. Vue được thiết kế từ đầu theo...

Những lỗi thiết kế cơ sở dữ liệu thường gặp
2019-12-01 08:41:23

Những lỗi thiết kế cơ sở dữ liệu thường gặp

Những lỗi thiết kế cơ sở dữ liệu thường gặp phải của các lập trình viên, Lỗi thiết kế Database...

Mẹo tìm kiếm Google theo đối tượng cụ thể
2019-11-26 09:26:20

Mẹo tìm kiếm Google theo đối tượng cụ thể

Tìm Google không phải là chuyện "Ai cũng biết" như ta thường nghỉ. Google có nhiều hơn những kĩ...

Git là gì? Sử dụng Git nâng cao chuẩn Git-flow
2019-11-15 15:09:04

Git là gì? Sử dụng Git nâng cao chuẩn Git-flow

Git-Flow gồm có 2 nhánh chính là Master và Develop, 3 nhánh Phụ gồm: Feature, Release, HotFix....

Sứ mệnh của LPTech ?

LPTech luôn đặt mình vào khách hàng để hiểu được bạn đang gặp khó khăn gì? Các doanh nghiệp hiện nay đang gặp khó khăn về việc quản lý vận hành website của mình. Chưa tìm được đối tác ưng ý và toàn để giao trọn trọng trách quản lý website cho họ.

Thiết kế website nhưng lại không thể tăng thu nhập cũng như Dịch vụ SEO uy tín tin cậy. Chúng tôi hiểu được điều đó, dành cả tâm huyết của mình để có thể hỗ trợ các Khách hàng một cách tốt nhất.