Dạng bình thường thứ ba

Dang Binh Thuong Thu Ba



Đây là phần ba của loạt bài, Năm hình thức bình thường. Tiêu đề của hai phần đầu tiên (hướng dẫn) là Dạng bình thường thứ nhất, tiếp theo là Dạng bình thường thứ hai. Trong phần này của loạt bài, Dạng bình thường thứ ba được giải thích.

Lời giải thích theo mạch truyện: Một người cha qua đời và để lại một số tiền cho con trai mình. Người con trai quyết định đầu tư tiền vào một cửa hàng tiện lợi. Cửa hàng tiện ích hay còn gọi là cửa hàng tiện lợi là một cơ sở kinh doanh nhỏ lẻ nhận các vật dụng hàng ngày từ các nhà cung cấp và bán cho các khách hàng cá nhân trong khu vực lân cận.







Tại thời điểm này, cửa hàng đã có hàng và một số doanh số đã được thực hiện. Người con trai, chủ sở hữu của doanh nghiệp, có một số nhân viên, những người được gọi là thư ký trong hướng dẫn này. Chủ sở hữu và bất kỳ nhân viên nào cũng có thể nhận hàng và bán hàng sau khi ghi sản phẩm.



Tuy nhiên, trước khi cửa hàng bắt đầu hoạt động, cả chủ và nhân viên đều không biết gì về các hình thức thông thường. Vì vậy, họ đã ghi lại mọi thứ dưới dạng giao dịch trong một bảng và một cuốn sách bài tập. Họ không có máy tính.



Bạn, người đọc, đã hoàn thành năm phần của loạt bài hướng dẫn này; bây giờ bạn là một nhà phát triển cơ sở dữ liệu. Chủ sở hữu của cửa hàng tiện lợi là bạn của bạn. Bạn đã đến thăm cửa hàng hai ngày trước và huấn luyện chủ sở hữu và nhân viên cách sản xuất một chiếc bàn ở dạng bình thường đầu tiên. Bạn cũng đã ghé thăm cửa hàng ngày hôm qua và hướng dẫn họ cách tạo một bảng ở dạng bình thường thứ hai từ dạng bình thường thứ nhất.





Hôm nay, bạn vừa đến thăm cửa hàng để huấn luyện họ cách sản xuất một chiếc bàn ở dạng chuẩn thứ ba từ dạng chuẩn thứ hai. Tất cả các bảng họ có hiện tại đều ở dạng bình thường thứ hai. Các bảng (theo tên và tiêu đề cột) là:

Sản phẩm(productID, categoryID, sản phẩm)
Danh mục (ID danh mục, danh mục)



Bán hàng(saleID, khách hàng, nhân viên, ngày tháng)
SaleDetails(saleID, productID, numberSold, sellPrice)

Đơn đặt hàng (ID đơn hàng, nhà cung cấp, nhân viên, ngày tháng)
Chi tiết đơn hàng(ID đơn hàng, ID sản phẩm, Số lượng hàng đã mua, Giá vốn)

Các phím đơn hoặc phím tổng hợp được gạch dưới.

Sau khi tóm tắt những gì đã được dạy trong hai ngày trước và trước khi bạn có thể làm bất cứ điều gì, chủ sở hữu hỏi:

“Còn số điện thoại, địa chỉ… của khách hàng và nhân viên thì sao?

Còn về số lượng trong kho, mức độ đặt hàng lại, v.v., đối với sản phẩm thì sao?
Họ có cần những chiếc bàn riêng hay nên ghép chúng vào những chiếc bàn hiện tại?”

Bạn, nhà phát triển cơ sở dữ liệu, hãy trả lời:

“Chúc mừng chủ nhân! Bạn đã gián tiếp đưa ra vấn đề về Dạng chuẩn thứ ba.”

Bạn tiếp tục.

Các cột cần thiết khác

Các cột cần thiết khác trước tiên được thêm vào các bảng trước đó, nằm trong 1NF và 2NF. Một số tên cột trước đây được sửa đổi.

Ở mức tối thiểu, bảng Danh mục phải có các cột sau:

Danh mục (ID danh mục, Tên danh mục, mô tả)

Mô tả là một đoạn văn ngắn mô tả thể loại. Bảng danh mục này đã có trong 1NF, 2NF và 3NF. 3NF được giải thích dưới đây:

Ở mức tối thiểu, bảng Sản phẩm phải có các cột sau:

Sản phẩm (ID sản phẩm, ID danh mục, ID nhà cung cấp, Tên sản phẩm, Đơn giá, Số lượng trong kho, Cấp độ sắp xếp lại)

Vì mỗi sản phẩm đang được bán nên số lượng sản phẩm sẽ đạt đến mức thấp khi sản phẩm phải được sắp xếp lại, vì vậy khách hàng không nên đến cửa hàng mà không có sản phẩm. Sự vắng mặt như vậy là không tốt cho kinh doanh. số lượng trong kho là số lượng của một sản phẩm cụ thể trong kho. Điều này bao gồm những gì có trong cửa hàng và những gì có trên kệ.

danh mụcID và nhà cung cấpID là khóa ngoại. Đó là lý do tại sao họ có gạch dưới gạch ngang thay vì gạch dưới đơn. Khóa ngoại được giải thích bên dưới. Trong phần trước của loạt bài này (Dạng thông thường thứ hai), ID danh mục là một phần của khóa chính với một gạch chân duy nhất do cách nó được tạo ra. Tuy nhiên, từ phần giải thích bên dưới, rõ ràng rằng ID danh mục phải là khóa ngoại (có gạch dưới gạch ngang).

Bảng sản phẩm này đã có 1NF, 2NF và 3NF. Xem lý do tại sao nó ở trong 3NF bên dưới:

Ở mức tối thiểu, bảng SaleDetails phải có các cột sau:

SaleDetails(saleID, productID, unitSellingPrice, số lượng, giảm giá)

Giá trị chiết khấu dự kiến ​​sẽ bằng 0 trong hầu hết thời gian. Giảm giá là khoản giảm giá mà cửa hàng dành cho khách hàng.

Ở mức tối thiểu, bảng OrderDetails phải có các cột sau:

OrderDetails(orderID, productID, unitCostPrice, số lượng, giảm giá)

Giá trị chiết khấu dự kiến ​​sẽ bằng 0 trong hầu hết thời gian. Chiết khấu ở đây là chiết khấu mà nhà cung cấp dành cho shop.

Như được thấy bên dưới, bảng Sản phẩm có thể được xem xét trong 2NF hoặc 3NF. Bảng Bán hàng và Đặt hàng có vấn đề về 3NF. Chỉ Bảng bán hàng sẽ được sử dụng để giải thích vấn đề và giải pháp. Bảng 3NF cho Đơn hàng và Bảng Sản phẩm tuân theo lý do tương tự và sẽ chỉ được trích dẫn.

Trong khi thêm các cột, bảng Doanh số sẽ là:

Doanh số(saleID, ngàyĐã bánTên khách hàng, điện thoại, địa chỉ, thành phố, khu vực, Mã bưu chính, Quốc gia, nhân viên)

Bảy cột đã thay thế cột khách hàng trong bảng gốc. Vì khách hàng là những người trong vùng lân cận, các ô cho các cột thành phố, vùng (tiểu bang), Mã bưu chính và quốc gia có thể để trống, mặc dù chúng không được để trống trong bài viết này.

Bảng Doanh số này vẫn ở dạng 2NF vì cả quy tắc 1NF và 2NF đều không bị vi phạm. Tuy nhiên, cần nhận ra rằng trong một hàng của bảng Doanh số, khách hàng (tên) đã được thay thế bằng bảy ô hàng của khách hàng.

Lưu ý: một ô địa chỉ có số nhà, tên đường hoặc tên đường và tên thị trấn, tất cả được phân tách bằng dấu phẩy. Một thành phố có thể được coi là bao gồm một số thị trấn. Mặc dù dấu phẩy phân tách các thành phần chuỗi cụ thể này, nhưng chúng tạo thành một giá trị ô chứ không phải ba giá trị ô.

Cột nhân viên cũng phải được thay thế bằng bảy cột như vậy. Tuy nhiên, điều đó không được thực hiện trong hướng dẫn này để tiết kiệm thời gian và không gian giảng dạy. Vì vậy, bảng Doanh số có dữ liệu có thể là:

Bảng bán hàng – 2NF – Không có ID khách hàng

Cột SaleID kiểu dữ liệu là một số nguyên hoặc tốt hơn là tự động tăng. Kiểu dữ liệu của cột dateSold là ngày tháng chứ không phải số vì nó có ký tự “/”, ký tự này không phải là chữ số. Kiểu dữ liệu cho các cột còn lại, kể cả cột điện thoại, là chuỗi (hoặc văn bản). Giá trị điện thoại có ký tự “-”, không phải là một chữ số.

Lưu ý rằng đối với mỗi hàng, khách hàng (tên), như trong phần trước của loạt bài, đã được thay thế bằng bảy ô, một trong số đó vẫn là tên khách hàng. Điều này có nghĩa là dữ liệu khách hàng là một thực thể. Hiện tại, tên khách hàng xác định sáu dữ liệu khác liên tiếp. Nếu bảng này được lập trình, sẽ thuận tiện để xác định thực thể khách hàng trong mỗi hàng bằng một số nguyên (không tự động tăng). Trong trường hợp đó, cột ID khách hàng phải đứng trước tên khách hàng. Bảng trước trở thành:

Bảng bán hàng – 2NF – Với ID khách hàng

Có ba ID khách hàng: 1, 2 và 3, với 1 xảy ra năm lần cho John Smith, 2 xảy ra hai lần cho James Taylor và 3 xảy ra một lần cho Susan Wright.

Lưu ý rằng một số ID khách hàng và người phụ thuộc của họ lặp lại.

Quy tắc cho hình thức bình thường thứ ba

Một bảng ở dạng chuẩn thứ ba nếu nó tuân theo các quy tắc sau:

  1. Nó phải ở dạng bình thường thứ hai.
  2. Và nó không nên có Phụ thuộc chuyển tiếp.

Sau đó, một trong những nhân viên (nhân viên) hỏi, 'Sự phụ thuộc bắc cầu là gì?'. Và bạn, nhà phát triển cơ sở dữ liệu, trả lời, 'Đó là một câu hỏi hay!'

phụ thuộc chuyển tiếp

Đúng là trong một hàng, SaleID xác định tất cả các giá trị trong hàng; tuy nhiên, ID khách hàng xác định bảy giá trị dữ liệu của nó nhưng không xác định phần còn lại của các giá trị được SaleID xác định trong hàng đó. Nói cách khác, SaleID phụ thuộc vào mười giá trị ô trong mỗi hàng. Tuy nhiên, ID khách hàng phụ thuộc vào bảy giá trị ô trong cùng một hàng nhưng ID khách hàng không phụ thuộc vào SaleID và các giá trị khác mà SaleID phụ thuộc vào.

Sự phụ thuộc như vậy đối với CutumerID là sự phụ thuộc bắc cầu. Và ID khách hàng được gọi là khóa ngoại và được gạch dưới trong loạt bài hướng dẫn này, Năm dạng thông thường.

Giả sử một thuộc tính không phải là số nguyên tố (giá trị ô không phải là số nguyên tố) phụ thuộc vào các thuộc tính không phải là số nguyên tố khác và thuộc tính không phải là số nguyên tố đang được đề cập (ví dụ: ID khách hàng và những người phụ thuộc của nó) không phụ thuộc vào khóa chính và phần còn lại của ô các giá trị trong hàng. Sau đó, đó là phụ thuộc bắc cầu.

Bảng Doanh số trước đó có khóa ngoại và các phần phụ thuộc của nó sẽ gây ra sự cố kế toán (dị thường).

Bảng doanh số từ 2NF đến 3NF

Để giải quyết vấn đề do khóa ngoại và các phần phụ thuộc của nó đặt ra, hãy xóa khóa ngoại và các phần phụ thuộc của nó để tạo thành một bảng mới mà không lặp lại. Tuy nhiên, ngay cả khi khóa ngoại không phụ thuộc vào khóa chính thì khóa chính phụ thuộc vào khóa ngoại. Vì vậy, một bản sao của khóa ngoại phải nằm trong bảng cha. Tại thời điểm này, bảng doanh số mới tuân thủ 1NF, 2NF và 3NF; nó là một bảng cha. Bảng con mới từ bảng Doanh số trước đó cũng tuân thủ 1NF, 2NF và 3NF. Tên của bảng con có khóa ngoại và các thành phần phụ thuộc của nó là Khách hàng. Nếu không thể tìm thấy một cái tên phù hợp, thì có gì đó không ổn trong quá trình phân tích. Bảng Doanh số mới trong 3NF là:

Bảng doanh thu cuối cùng trong 3NF

Bảng này trong 3NF có cùng số hàng như bảng trong 2NF nhưng có ít cột hơn.

Ký hiệu bảng cho bảng Doanh số cuối cùng này trong 3NF là:

Bán hàng(saleID, dateSold, customerID, employeeID)

saleID là khóa chính có một gạch dưới. ID khách hàng là khóa ngoại, có gạch dưới gạch ngang. employeeID cũng là một khóa ngoại có gạch dưới gạch ngang. Lưu ý rằng tình huống của nhân viên trong bảng Doanh số trong 2NF giống với tình huống của khách hàng. employeeID và những người phụ thuộc của chính nó phải được tách ra để tạo thành một bảng khác; một bản sao của employeeID vẫn còn.

Lưu ý: saleID, customerID và employeeID không tạo thành khóa tổng hợp. saleID phụ thuộc vào ID khách hàng và ID nhân viên.

Mối quan hệ giữa saleID và customerID là mối quan hệ nhiều-một.

Bảng khách hàng trong 3NF

Bảng này có ba hàng thay vì 9 hàng trong bảng Doanh số 2NF. Trong bảng này, ID khách hàng là khóa chính. Nó giống như khóa ngoại trong bảng Doanh số, nhưng không lặp lại. Khóa ngoại trong bảng Doanh số và khóa chính trong bảng Khách hàng liên kết cả hai bảng.

Các hàng lặp lại trong bảng Khách hàng đã bị xóa để không vi phạm 1NF.

Như người đọc có thể thấy, việc đặt một bảng trong 3NF cũng sẽ giải quyết vấn đề về các hàng bị lặp lại (dư thừa).

Ký hiệu bảng cho Bảng khách hàng là:

Khách hàng (ID khách hàng, tên khách hàng, điện thoại, địa chỉ, thành phố, khu vực, Mã bưu điện, quốc gia)

Xem lại bảng sản phẩm

Bảng sản phẩm được đưa ra ở trên ở dạng ký hiệu là:

Sản phẩm (ID sản phẩm, ID danh mục, ID nhà cung cấp, Tên sản phẩm, Đơn giá, Số lượng trong kho, Cấp độ sắp xếp lại)

Khóa chính ở đây là productID. danh mụcID và nhà cung cấpID là khóa ngoại. Tương tự như bảng Khách hàng, có một bảng Danh mục, trong đó danh mụcID là khóa chính và có một bảng Nhà cung cấp, trong đó nhà cung cấpID là khóa chính.

Nếu các giá trị cho các ô cho đơn giá, số lượng trong kho và cấp độ sắp xếp lại sẽ vẫn cố định, thì bảng Sản phẩm thực sự ở dạng 3NF. Nếu các giá trị này sẽ thay đổi, thì bảng Sản phẩm sẽ ở dạng 2NF. Trong phần này của loạt bài hướng dẫn, giả định rằng các giá trị đó vẫn cố định theo thời gian.

Tất cả các bảng

Tất cả các bảng hiện ở dạng 3NF. Chúng được hiển thị dưới dạng:

Nhân viên (ID nhân viên, tên, điện thoại, địa chỉ, thành phố, khu vực, mã bưu chính, quốc gia, ngày sinh, ngày thuê, ngày phát hành)

Nhà cung cấp (ID nhà cung cấp, tên, điện thoại, địa chỉ, thành phố, vùng, mã bưu điện, quốc gia)

Sản phẩm (ID sản phẩm, ID danh mục, ID nhà cung cấp, Tên sản phẩm, Đơn giá, Số lượng trong kho, Cấp độ sắp xếp lại)
Danh mục (ID danh mục, Tên danh mục, mô tả)

Bán hàng(saleID, dateSold, customerID, employeeID)
SaleDetails(saleID, productID, numberSold, sellPrice)
Khách hàng (ID khách hàng, tên khách hàng, điện thoại, địa chỉ, thành phố, khu vực, Mã bưu điện, quốc gia)

Đơn đặt hàng (ID đơn hàng, ngày bán, ID nhà cung cấp, ID nhân viên)
Chi tiết đơn hàng(ID đơn hàng, ID sản phẩm, Số lượng hàng đã mua, Giá vốn)

Lên đến chín bảng chuyên nghiệp đã được tạo chỉ từ một bảng do người mới tạo để tránh dư thừa và các vấn đề về kế toán (bất thường từ thao tác chèn, xóa và cập nhật). Chỉ riêng bảng mới sẽ dẫn đến tổn thất tài chính.

Kiểm tra nhân viên

Tại thời điểm này, tất cả nhân viên, kể cả chủ sở hữu, lẽ ra phải hiểu 1NF, 2NF và 3NF. Tuy nhiên, chúng phải được thử nghiệm. Tất cả họ, bao gồm cả chủ sở hữu, sẽ ngồi ở những nơi khác nhau và hoàn thành bài kiểm tra. Bài kiểm tra bao gồm một câu hỏi, sẽ kéo dài một giờ và như sau:

Câu hỏi: Sử dụng các quy tắc cho 1NF, 2NF và 3NF, hãy chứng minh rằng tất cả chín bảng trên đã ở Dạng chuẩn thứ nhất, Dạng chuẩn thứ hai và Dạng chuẩn thứ ba. Khách hàng và nhà cung cấp không nhất thiết phải là những thực thể có thật. Dữ liệu cho các bảng nên sao lưu các ký hiệu bảng.

Trong khi họ đang hoàn thành bài kiểm tra, bạn, với tư cách là nhà phát triển cơ sở dữ liệu, ra ngoài ăn nhẹ và uống bia, sẽ quay lại sau một giờ.

Tương Lai Gần Và Xa

Trong khi bạn, nhà phát triển cơ sở dữ liệu, ra ngoài, bạn cũng cân nhắc xem nên đưa ra lời khuyên nào cho họ nếu tất cả họ đều vượt qua bài kiểm tra.

Ngoài ra, trong khi bạn đào tạo họ và bây giờ họ đang làm bài kiểm tra, khách hàng đã đến và rời đi mà không được phục vụ. Điều đó không tốt cho kinh doanh và bạn, nhà phát triển cơ sở dữ liệu, biết điều đó. Một số khách hàng có thể đến cửa hàng của đối thủ cạnh tranh và không bao giờ quay lại.

Bạn, nhà phát triển cơ sở dữ liệu, 30 tuổi. Chủ sở hữu, là bạn của bạn, cũng 30 tuổi. Các thư ký (nhân viên) ở độ tuổi từ 18 đến 24. Tất cả những phẩm chất họ cần để làm việc cho chủ sở hữu là: khỏe mạnh, có thể đọc và viết, có thể cộng, trừ, nhân và chia và để có thể sử dụng máy tính và Internet.

Khi một bảng ở dạng 3NF, hầu hết các lỗ hổng đã bị xóa khỏi cơ sở dữ liệu. Nhiều cơ sở dữ liệu thương mại không vượt quá 3NF và các công ty hoặc công ty cảm thấy thoải mái.

Vì vậy, nếu tất cả họ vượt qua bài kiểm tra, bạn sẽ yêu cầu nhân viên thư ký đi và tiếp tục làm việc. Bạn cũng sẽ khuyên họ tiết kiệm một phần tiền lương để họ có thể sở hữu cửa hàng tiện lợi của mình. Bạn sẽ tiếp tục vào ngày mai để chỉ đào tạo chủ sở hữu trong 4NF và 5NF. Với kiến ​​thức về 4NF và 5NF, tất cả các lỗ hổng đã biết đều bị loại bỏ.

Sự đánh giá

Sau một giờ, bạn, nhà phát triển cơ sở dữ liệu, quay lại. Bạn đánh dấu kịch bản của họ. Một mẩu tin tuyệt vời! Tất cả họ, kể cả chủ sở hữu, đều có 100%. Tiếng hoan hô! Điều đó thật xuất sắc!

Vì vậy, xin chúc mừng tất cả các bạn: giáo viên và học sinh.

Không còn gì để làm trong hướng dẫn này ngoài việc kết luận.

Sự kết luận

Một bảng ở dạng chuẩn đầu tiên, nếu nó không vi phạm bất kỳ quy tắc nào sau đây:

  1. Tất cả các cột trong bảng phải có tên tiêu đề duy nhất.
  2. Mỗi ô chỉ được có một giá trị duy nhất.
  3. Các giá trị được lưu trữ trong một cột phải cùng loại.
  4. Các hàng phải khác biệt.
  5. Thứ tự của các cột hoặc hàng không quan trọng.

Một bảng ở dạng chuẩn thứ hai, nếu nó không vi phạm bất kỳ quy tắc nào sau đây:

  1. Bảng phải ở dạng chuẩn đầu tiên.
  2. Không được có sự phụ thuộc một phần.

Một bảng ở dạng chuẩn thứ ba, nếu nó không vi phạm bất kỳ quy tắc nào sau đây:

  1. Nó phải ở dạng bình thường thứ hai.
  2. Và nó không được có Transitive Dependency.

Bạn, nhà phát triển cơ sở dữ liệu, nói với nhân viên rằng họ đã học đủ. Bạn đưa ra lời khuyên và yêu cầu họ quay trở lại làm việc và ở lại vị trí của họ theo mặc định.

Bạn chỉ đặt một cuộc hẹn với chủ sở hữu, để diễn ra tại văn phòng của anh ấy vào ngày mai để đào tạo về 4NF và 5NF.