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

Một phần của tài liệu BÀI GIẢNG HỆ THỐNG THÔNG TIN QUẢN LÝ (Trang 83 - 179)

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

Hãy thực hiện chuẩn hóa thực thể trên.

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

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

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

- 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

Mã NV Khóa học ng.hạn Họ tên NV Phòng CT Mức lương Ngày hoàn thành

Hình 4.25. Các phụ thuộc hàm trong bảng thực thể “Nhân viên – Khóa học”

đượ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.

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

… … … …

#Mã NV Họ tên NV Phòng CT Mức lương

Mã NV Khóa học ng.hạn Ngày hoàn thành

R1 R2

Hình 4.26. 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ì 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 4.27), 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.

#Mã

KH Họ tên KH Đại lý

231 Trần Đình Chiến Đống Đa 179 Nguyễn Mai Hoa Đống Đa 167 Lê Kim Nhung Cầu Giấy 106 Vũ Thúy Hòa Cầu Giấy 370 Phan Thu Thủy Hai Bà Trưng

… … …

# Đại lý Họ tên người bán hàng

Đống Đa Lê Ngọc Hà Đống Đa Lê Ngọc Hà Cầu Giấy Nguyễn Văn Nam Cầu Giấy Nguyễn Văn Nam Hai Bà Trưng Hoàng Văn Hải

… … Bảng 4.12.a. Thực thể “Khách hàng – Đại lý” Bảng 4.12.b. Thực thể “Đại lý - Người phụ trách” PTIT

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

Hình 4.27. 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

HÓA ĐƠN BÁN HÀNG Số: 123/HĐ Liên số: 2

Mã khách hàng: A045 Họ và tên khách hàng: Nguyễn Văn Anh Địa chỉ khách hàng: Học viện Công nghệ BCVT

Số tài khoản: 011001432 Mã số thuế: 0100684378082 Phương thức thanh toán: Tiền mặt

Stt Tên hàng hóa Đơn vị

tính Đơn giá

Số

lượng Thành tiền

1 Máy in Laser Chiếc 4500000 1 4500000

2 Máy in HP Chiếc 2350000 3 7050000

… … … … …

Tổng cộng: 11.550.000 đồng Thuế VAT: 1.155.000 đồng Tổng tiền thanh toán: 12.705.000 đồng

Viết bằng chữ: Mười hai triệu bảy trăm linh năm nghìn đồng./.

Ngày 18 tháng 5 năm 2009 Người mua Người bán V.Anh K.Liên

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 4.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 Ph.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ế 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á 4.4.4 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.

4.5 XÂY DỰNG PHẦN MỀM TRONG HTTT QUẢN LÝ

Công đoạn cuối cùng và không thể thiếu được trong phần thiết kế HTTT quản lý là phải thiết kế phần mềm (mới) hoặc trong một số trường hợp - mua các phần mềm có sẵn trên thị trường cho tổ chức.

4.5.1 Thiết kế phần mềm mới

Mỗi sản phẩm phần mềm là một công trình của sáng tạo và kỹ thuật. Nó là sản phẩm của các nhà phân tích viên hệ thống và các nhà lập trình. Đây là công đoạn không cần nhiều chi phí tài chính lớn và lao động nhưng lại cần một đội ngũ chuyên gia, kỹ thuật viên cấp cao, am hiểu lĩnh vực quản lý và thông thạo các kỹ thuật sáng chế phần mềm.

4.5.1.1 Các bước thiết kế phần mềm

Quy trình thiết kế phần mềm gồm 6 bước sau đây: - Xác định mục đích, yêu cầu của phần mềm - Thiết kế giải thuật

- Chọn ngôn ngữ lập trình - Viết chương trình

- Thử nghiệm chương trình - Biên soạn tài liệu hướng dẫn

Xây dựng phần mềm là một quá trình phức tạp. Nó được coi là một nghệ thuật vì đòi hỏi trí tưởng tượng tốt, óc sáng tạo và sự khéo léo, đồng thời cũng là một khoa học vì cần áp dụng các kỹ thuật và phương pháp tiêu chuẩn liên quan đến công nghệ phần mềm (Software Engineering). Trước mỗi bài toán đặt ra, người lập trình phải biết lựa chọn cấu trúc dữ liệu phù hợp, trên cơ sở đó tiến hành một giải thuật hiệu quả nhất. Với một cấu hình máy tính đã được chọn, phải xác định được cách tổ chức lưu trữ dữ liệu và truy nhập tương ứng.

Một phần của tài liệu BÀI GIẢNG HỆ THỐNG THÔNG TIN QUẢN LÝ (Trang 83 - 179)