Chuẩn dữ liệu là gì

(Last Updated On: 18/08/2021)

Chuẩn hóa dữ liệu là quá trình rà soát tất cả các danh sách thuộc tính của các thực thể, áp dụng một tập các quy tắc phân tích để chuyển chúng thành dạng sao cho:

  • Tối thiểu việc lặp lại, tránh dư thừa thông tin. Tình trạng một thuộc tính có mặt ở nhiều bảng thực thể chỉ xuất hiện đối với các thuộc tính định danh kết nối và là cần thiết để thể hiện các mối quan hệ.
  • Loại bỏ các trường hợp cùng một thuộc tính lại có tên khác nhau ở các bảng thực thể khác Ví dụ như thuộc tính “Mã sinh viên” và “Số hiệu sinh viên”.
  • Không để xảy ra tình trạng một thuộc tính chưa được hiểu rõ hoặc hiểu theo nhiều nghĩa khác nhau trong tình huống có nhiều người sử dụng thông tin. Ví dụ như thuộc tính “Địa chỉ” ở thực thể “Sinh viên” có thể hiểu là địa chỉ tạm trú hiện tại của sinh viên hay địa chỉ của gia đình (ở quê).

Quá trình chuẩn hóa buộc người ta phải xem xét rất cẩn thận về ý nghĩa của từng thuộc tính, từ đó sẽ xây dựng mô hình quan hệ khi đã hiểu rõ tất cả các thuộc tính liên quan.

Quá trình chuẩn hóa được thực hiện dựa trên khái niệm “phụ thuộc hàm” và mô hình được chuẩn hóa đầy đủ, lý tưởng là mô hình mà ở đấy, mỗi thuộc tính trong mỗi bảng thực thể đều có một phụ thuộc hàm trực tiếp vào toàn bộ các thuộc tính khóa của bảng.

Khái niệm phụ thuộc hàm

Khái niệm phụ thuộc hàm giữa hai thuộc tính A và B được phát biểu như sau: “Thuộc tính B phụ thuộc hàm vào thuộc tính A, viết là A → B nếu với mỗi giá trị của A tương ứng với một giá trị duy nhất của B”. Nói cách khác là tồn tại một ánh xạ từ tập hợp các giá trị của A đến tập hợp các giá trị của B.

Trong một thực thể, mỗi thuộc tính đều phụ thuộc hàm vào khóa – một thuộc tính duy nhất hoặc hai hay nhiều hơn nữa các thuộc tính khác (tạo thành bộ khóa).

Ví dụ: Xét thực thể “Hóa đơn” với các thuộc tính Số hóa đơn, Tên khách hàng, Tên hàng hóa, Tiền mua hàng.

Ta thấy có các sự phụ thuộc hàm sau đây: <Số hóa đơn> → <Tên khách hàng>

<Số hóa đơn> và <Tên hàng hóa> → <Tiền mua hàng>

Đối với các thực thể, bao giờ cũng phải xác định được ít nhất một thuộc tính là thuộc tính khóa. Ứng với mỗi giá trị của khóa, chúng ta xác định được một bộ giá trị duy nhất của các thuộc tính còn lại.

Ví dụ: Trong bảng thực thể “Khách hàng” (#Mã KH, Tên KH, Địa chỉ KH), khách hàng có thể thay đổi địa chỉ của mình, nhưng vào mọi lúc, với một giá trị của khóa đã cho là Mã KH, ta có thể nói rằng có một bộ giá trị “Tên KH” và “Địa chỉ KH” duy nhất và luôn luôn xác định được.

Nếu một thuộc tính không phụ thuộc hàm vào khóa thì nó phải thuộc một bảng thực thể khác. Ví dụ như thực thể “Sinh viên” không thể chứa thuộc tính “Điểm thi” vì thuộc tính này không phụ thuộc hàm vào khóa là “Mã SV” (một giá trị “Mã SV” ứng với nhiều điểm thi của các môn khác nhau, lần thi khác nhau).

Các dạng chuẩn và quá trình chuẩn hóa

Ta coi danh sách các thuộc tính của một bảng thực thể là “Chưa được chuẩn hóa” nếu nó chưa được xét trong quá trình chuẩn hóa. Quá trình “Chuẩn hóa” bao gồm việc áp dụng ba quy tắc kiểm tra liên tiếp nhau.

Nếu danh sách các thuộc tính của thực thể đã qua quy tắc kiểm tra thứ nhất thì nó được gọi là có “Dạng chuẩn 1” (1NF), nếu qua quy tắc kiểm tra thứ hai thì nó được gọi là có “Dạng chuẩn 2” (2NF), nếu qua quy tắc kiểm tra thứ ba thì nó được gọi là có “Dạng chuẩn 3” (3NF) và được xem như đã được chuẩn hóa đầy đủ.

Lưu ý là trước khi thực hiện việc chuẩn hóa, chúng ta cần rà soát và loại khỏi danh sách các thuộc tính thứ sinh (do giá trị của các thuộc tính này có thể tính toán hoặc suy luận từ giá trị của các thuộc tính khác) và các thuộc tính không quan trọng (không cần quản lý).

Dạng chuẩn 1 (1NF- The First Normal Form) – Quy tắc kiểm tra thứ nhất: Một thực thể hay một quan hệ được gọi là có dạng chuẩn 1 nếu nó không chứa các thuộc tính lặp. Hay nói cách khác là tất cả giá trị các thuộc tính của nó là sơ cấp.

Nếu trong danh sách thuộc tính của thực thể có chứa các thuộc tính lặp thì phải tách chúng ra thành danh sách con, gán cho nó một tên, tìm cho nó một thuộc tính định danh, kết hợp với thuộc tính định danh của danh sách gốc tạo thành một bộ khóa.

Dạng chuẩn 2 (2NF- The Second Normal Form) – Quy tắc kiểm tra thứ hai: Một thực thể hay một quan hệ 1NF được coi là dạng chuẩn 2NF nếu tất cả các thuộc tính không phải là khóa đều phụ thuộc hàm vào toàn bộ khóa chính (chứ không phải chỉ là một phần của khóa).

Nếu có một số thuộc tính chỉ phụ thuộc vào một phần của khóa, ta phải tách chúng thành danh sách mới, lấy bộ phận của khóa đó làm thuộc tính định danh cho danh sách mới, gán cho nó một cái tên phù hợp với nội dung mà nó phản ánh.

Dạng chuẩn 3 (3NF- The Thirst Normal Form) – Quy tắc kiểm tra thứ ba: Một thực thể đã là 2NF được xem là có dạng chuẩn 3NF nếu tất cả các phụ thuộc hàm giữa khóa chính và các thuộc tính khác của nó đều là trực tiếp (tức là không có sự phụ thuộc bắc cầu giữa các thuộc tính).

Trong một thực thể không cho phép có sự phụ thuộc bắc cầu giữa các thuộc tính. Giả sử có thuộc tính A phụ thuộc vào thuộc tính B, thuộc tính B phụ thuộc vào thuộc tính C thì chúng ta phải tách chúng ra làm 2 thực thể: thực thể thứ nhất chứa quan hệ A và B, thực thể thứ hai chứa quan hệ B và C.

Ví dụ 1. Sau đây là một thực thể chưa có dạng chuẩn:

Bảng. Thực thể “Nhân viên – Khóa học”

Mã NV Họ và tên NV Phòng CT Mức

lương

Khóa học ngắn hạn Ngày

hoàn thành

100 Nguyễn Văn An Marketing 42,000 Quan hệ công chúng 19/06/2009
100 Nguyễn Văn An Marketing 42,000 Thương hiệu 07/10/2008
150 Phạm Ngọc Hoa Marketing 38,500 Quan hệ công chúng 19/06/2009
150 Phạm Ngọc Hoa Marketing 38,500 Nghiên cứu thị trường 12/08/2007
190 Vũ Minh Hà Finance 38,000 Kế toán quản trị 07/05/1999

Thực thể không chứa các thuộc tính thứ sinh hay thuộc tính không quan trọng.Hãy thực hiện chuẩn hóa thực thể trên.

Hướng dẫn làm bài:

– Phân tích mối quan hệ phụ thuộc hàm giữa các thuộc tính:

Trong bảng trên, các thuộc tính không phải là khóa như “Họ và tên NV”, “Phòng CT” và “Mức lương” chỉ phụ thuộc hàm vào “Mã NV”, trong khi đó “Ngày hoàn thành” lại phụ thuộc hàm vào bộ thuộc tính “Mã NV” và “Khóa học ngắn hạn”.

Biểu diễn mối quan hệ phụ thuộc hàm như sau:

Chuẩn dữ liệu là gì
Các phụ thuộc hàm trong bảng thực thể “Nhân viên – Khóa học”

Từ đó ta xác định bộ khóa chính của thực thể gồm hai thuộc tính là “Mã NV” và “Khóa học ngắn hạn”.

– Thực hiện quá trình chuẩn hóa theo 3 bước:

Bước 1. Thực thể này không chức các thuộc tính lặp nên đã có dạng chuẩn 1.

Tuy nhiên, bảng thực thể có nhiều dữ liệu bị trùng lặp giữa các dòng. Trong ví dụ trên, dữ liệu trong các cột “Mã NV”, “Họ và tên NV”, “Phòng CT” và “Mức lương” bị lặp lại khi một nhân viên học nhiều hơn một khóa học (như Nguyễn Văn An, Phạm Ngọc Hoa).

Bước 2. Do các thuộc tính không phải là khóa như “Họ và tên NV”, “Phòng CT” và “Mức lương” chỉ phụ thuộc hàm vào một phần của bộ khóa chính là “Mã NV” nên thực thể chưa có dạng chuẩn 2.

Để chuẩn hóa thực thể “Nhân viên – Khóa học” dạng chuẩn 1 thành dạng chuẩn 2, chúng ta thực hiện 3 bước sau:

– Thiết lập thực thể chỉ chứa các thuộc tính không khóa phụ thuộc hàm đầy đủ vào bộ khóa (hay gọi là khóa chính). Trong bảng “Nhân viên – Khóa học” chỉ có thuộc tính “Ngày hoàn thành” phụ thuộc hàm đầy đủ vào khóa chính “Mã NV” và “Khóa học ngắn hạn”, như vậy ta có bảng quan hệ R1(Mã NV, Khóa học ngắn hạn, Ngày hoàn thành) là một bảng ở dạng chuẩn

– Thiết lập (các) thực thể chỉ chứa các thuộc tính không khóa phụ thuộc hàm vào từng phần của khóa. Trong bảng “Nhân viên – Khóa học” có các thuộc tính không khóa “Họ và tên NV”, “Phòng CT” và “Mức lương” chỉ phụ thuộc hàm vào “Mã NV”, như vậy ta thiết lập được bảng quan hệ R2(#Mã NV, Họ và tên NV, Phòng CT, Mức lương) là bảng thuộc dạng chuẩn 2.

– Mối quan hệ giữa bảng R1 và bảng R2 sẽ được thể hiện bằng “Mã NV”.

Sau 3 bước trên ta có thực thể như hình vẽ dưới đây. Các bảng R1 và R2 đều ở dạng chuẩn 2. Chúng cũng có dạng chuẩn 3NF do tất cả các phụ thuộc hàm giữa khóa chính và các thuộc tính khác của nó đều là trực tiếp.

Chuẩn dữ liệu là gì
Thực thể “Nhân viên” (R2) và thực thể “Nhân viên – Khóa học” (R1) ở dạng chuẩn 3

Ví dụ 2. Công ty Văn phòng phẩm Hồng Hà có hệ thống đại lý ở các quận trên địa bàn Thành phố Hà Nội. Mỗi quận có một đại lý, mỗi đại lý có duy nhất một người phụ trách bán hàng và ngược lại mỗi người bán hàng chỉ phụ trách duy nhất một đại lý. Mỗi khách hàng bán lẻ lấy hàng ở một đại lý.

Nếu chúng ta xây dựng thực thể “Khách hàng – Người phụ trách” như bảng dưới thì sẽ có sự phụ thuộc bắc cầu giữa các thuộc tính:

  1. Mã KH → Họ tên KH, Họ tên người bán hàng, Đại lý (phụ thuộc hàm vào khóa)
  2. Đại lý → Họ tên người bán hàng (phụ thuộc hàm từ quy tắc)

Như vậy thực thể có chứa phụ thuộc hàm bắc cầu: Mã KH → Đại lý → Họ tên người bán hàng.

Bảng: Thực thể “Khách hàng – Người phụ trách”

#Mã KH Họ tên KH Họ tên người bán hàng Đại lý
231 Trần Đình Chiến Lê Ngọc Hà Đống Đa
179 Nguyễn Mai Hoa Lê Ngọc Hà Đống Đa
167 Lê Kim Nhung Nguyễn Văn Nam Cầu Giấy
106 Vũ Thúy Hòa Nguyễn Văn Nam Cầu Giấy
370 Phan Thu Thủy Hoàng Văn Hải Hai Bà Trưng

Chuẩn dữ liệu là gì

Vì thực thể “Khách hàng – Người phụ trách” có chứa phụ thuộc hàm bắc cầu nên sẽ có một số khuyết điểm như sau:

  • Nếu một người bán hàng mới được giao nhiệm vụ phụ trách đại lý mới, hệ thống không thể nhập dữ liệu cho đến khi người đó tìm được một khách hàng nào đó (vì khóa “Mã KH” cần phải có giá trị không rỗng).
  • Giả sử đại lý “Hai Bà Trưng” chỉ có một khách hàng 370, nếu xóa khách hàng 370 ra khỏi bảng, chúng ta sẽ bị mất thông tin về người phụ trách bán hàng “Hoàng Văn Hải” đang phụ trách đại lý “Hai Bà Trưng”.
  • Nếu người phụ trách bán hàng “Lê Ngọc Hà” chuyển sang phụ trách khu vực khác, nhiều dòng sẽ phải cập nhật lại…

Để xóa bỏ phụ thuộc hàm bắc cầu, chúng ta chia bảng thành 2 bảng nhỏ tương ứng với hai thực thể “Khách hàng – Đại lý” và “Đại lý – Người phụ trách” (bảng 3.12.a, b). Hai thực thể mới không có các thuộc tính bắc cầu nên đều ở dạng chuẩn 3.

Ví dụ 3. Để thiết kế các tệp dữ liệu quản lý các hóa đơn bán hàng (hình dưới), chúng ta thực hiện các bước như sau:

Bước 1: Xác định các thông tin liên quan như danh sách khách hàng, danh mục hàng hóa, phiếu xuất kho…

Bước 2: Liệt kê tất cả các thuộc tính liên quan đến hóa đơn bán hàng, xác định các thuộc tính lặp (R) và thuộc tính thứ sinh (S). Đặt tên cho thực thể ban đầu là “Hóa đơn (1)” với các thuộc tính sau:

Số hóa đơn, Liên số, Mã KH, Họ và tên KH, Địa chỉ KH, Số tài khoản, Mã số thuế, Phương thức thanh toán, Stt (R), Tên hàng hóa (R), Đơn vị tính (R), Đơn giá (R), Số lượng (R), Thành tiền (R) & (S), Tổng cộng (S), Thuế VAT (S), Tổng tiền thanh toán (S), Viết bằng chữ (S), Ngày bán, Người bán, Người mua.

Vì “Số hóa đơn” đủ để phân biệt hóa đơn này với hóa đơn khác nên khóa chính của thực thể này là “Số hóa đơn”.

Chuẩn dữ liệu là gì
Ví dụ về hóa đơn bán hàng

Bước 3: Loại bỏ các thuộc tính thứ sinh và các thuộc tính ít có ý nghĩa trong quản lý (Liên số, Stt), thực thể “Hoá đơn (1)” còn lại các thuộc tính sau:

#Số hóa đơn, Mã KH, Họ và tên KH, Địa chỉ KH, Số tài khoản, Mã số thuế, Phương thức thanh toán, Tên hàng hóa (R), Đơn vị tính (R), Đơn giá (R), Số lượng (R), Ngày bán, Người bán, Người mua.

Bước 4:

a. Thực hiện chuẩn hóa mức 1 (1NF). Theo yêu cầu của chuẩn hóa mức 1, thực thể “Hoá đơn (1)” chứa các thuộc tính lặp là “Tên hàng hóa (R), Đơn vị tính (R), Đơn giá (R), Số lượng (R)” nên phải tách chúng ra thành danh sách con, gán cho nó một tên là “Hàng mua (1)” với thuộc tính định danh mới là “Mã hàng hoá”, kết hợp với thuộc tính định danh của danh sách gốc “Số hoá đơn” tạo thành một bộ khóa.

Sau khi chuẩn hóa mức 1, ta được 2 thực thể:

Hóa đơn (2) Hàng mua (1)
#Số hóa đơn, Mã KH, Họ và tên KH, Địa chỉ KH, Số tài khoản, Mã số thuế, Phương thức thanh toán, Ngày bán, Người bán, Người mua. Số hóa đơn, Mã hàng hóa, Tên hàng hóa, Đơn vị tính, Đơn giá, Số lượng

b. Thực hiện chuẩn hóa mức 2 (2NF). Theo yêu cầu của chuẩn hóa mức 2, trong mỗi thực thể, các thuộc tính không phải là khóa phải phụ thuộc toàn bộ vào khóa. Nếu có thuộc tính chỉ phụ thuộc vào một phần của khóa, ta phải tách chúng thành danh sách mới, lấy bộ phận của khóa đó làm thuộc tính định danh cho danh sách mới, gán cho nó một cái tên phù hợp với nội dung mà nó phản ánh.

Thực thể “Hoá đơn (2)” đã có dạng chuẩn 2 do mọi thuộc tính đều phụ thuộc vào “Số hoá đơn”.

Trong thực thể “Hàng mua (1)”, ta thấy thuộc tính “Số lượng” phụ thuộc toàn bộ vào khóa “Số hóa đơn” và “Mã hàng hóa”, còn các thuộc tính “Tên hàng hóa”, “Đơn vị tính”, “Đơn giá” chỉ phụ thuộc vào “Mã hàng hóa”. Chúng ta tách thực thể “Hàng mua (1)” thành hai thực thể “Hàng mua” và “Hàng hoá” có dạng chuẩn 2:

Hàng mua Hàng hoá
Số hóa đơn, Mã hàng hóa, Số lượng #Mã hàng hóa, Tên hàng hóa, Đơn vị tính, Đơn giá

c. Thực hiện chuẩn hóa mức 3 (3NF). Theo yêu cầu của chuẩn hóa mức 3, trong các danh sách không được tồn tại sự phụ thuộc bắc cầu giữa các thuộc tính.

Hai thực thể “Hàng mua” và “Hàng hoá” có dạng chuẩn 3.

Trong thực thể “Hóa đơn (2)” tồn tại sự phụ thuộc bắc cầu giữa các thuộc tính: từ “Mã KH” có thể suy ra “Họ và tên KH”, “Địa chỉ KH”, “Số tài khoản”, “Mã số thuế”. Do đó, ta phải tách từ thực thể “Hoá đơn (2)” một thực thể mới là “Khách hàng” và được 2 thực thể: “Hoá đơn” và “Khách hàng”. Trong thực thể “Hoá đơn”, thuộc tính “Mã KH” là thuộc tính quan hệ.

Hóa đơn Khách hàng
#Số hóa đơn, Mã KH, Phương thức thanh toán, Ngày bán, Người bán, Người mua. #Mã KH, Họ và tên KH, Địa chỉ KH, Số tài khoản, Mã số thuế.

Tóm lại, sau khi thực hiện chuẩn hoá mức 3, chúng ta thu được 4 thực thể có dạng chuẩn hoàn toàn sau đây:

Bảng 13. Các thực thể đã được chuẩn hóa

Hóa đơn Khách hàng Hàng mua Hàng hóa
Số hóa đơn #Mã KH Số hóa đơn #Mã hàng hóa
Mã KH Họ và tên KH Mã hàng hóa Tên hàng hóa
Ph.thức thanh toán Địa chỉ KH Số lượng Đơn vị tính
Ngày bán

Người bán

Số tài khoản

Mã số thuế

Đơn giá
Người mua

Trộn các bảng thực thể

Sau khi thực hiện chuẩn hóa, một số thực thể có thể bị thừa vì cùng mô tả cho một đối tượng giống nhau. Trộn các bảng thực thể (hay còn gọi là bảng quan hệ) là gộp các loại dữ liệu cùng chung chức năng mô tả cho một đối tượng nào đó vào trong một bảng, để truy cập dữ liệu mức vật lý được nhanh hơn vì hệ thống không cần phải ghép chúng lại với nhau.

Ví dụ ta có 2 bảng thực thể sau:

GIANGVIEN1(#MaGV, Hovaten, Namsinh, Quequan, Diachithuongtru)

GIANGVIEN2(#MaGV, TrinhdoCM, TrinhdoNN, Hocham, Hocvi)

“Hovaten, Namsinh, Quequan, Diachithuongtru” và “TrinhdoCM, TrinhdoNN, Hocham, Hocvi” đều là các thuộc tính mô tả cho thực thể “GIANGVIEN”, nhưng lại được lưu trữ ở 2 bảng khác nhau. Chúng ta có thể gộp 2 bảng này lại thành 1 bảng GIANGVIEN:

GIANGVIEN(#MaGV, Hovaten, Namsinh, Quequan, Diachithuongtru, TrinhdoCM, TrinhdoNN, Hocham, Hocvi)

Tuy nhiên, việc trộn các bảng thực thể cần phải bảo toàn ý nghĩa của dữ liệu, đó là tránh các trường hợp thiếu sót do đồng nghĩa, sai sót do đồng âm khác nghĩa và phải loại bỏ phụ thuộc bắc cầu nếu có xuất hiện.