Mục lục:
- Để có dạng bình thường đầu tiên (1NF), bảng phải có các đặc điểm sau:
- Để đánh giá hình thức bình thường thứ hai, bạn phải hiểu ý tưởng về sự phụ thuộc chức năng. Một
- Các bảng trong hình thức bình thường thứ hai đặc biệt dễ bị tổn thương đối với một số loại dị thường sửa đổi - đặc biệt là các loại phụ thuộc.
Video: 10 Tư Thế Quan Hệ Khiến Đàn Ông Phát Điên Rồ Dại | Giang Venux 2025
Có ba nguồn dị thường sửa đổi trong SQL được định nghĩa là các dạng bình thường đầu tiên, thứ hai và thứ ba (1NF, 2NF, 3NF). Những hình thức bình thường này đóng vai trò như các biện pháp khắc phục sự dị thường của việc sửa đổi. Hình thức bình thường thứ nhất
Để có dạng bình thường đầu tiên (1NF), bảng phải có các đặc điểm sau:
Bảng là hai chiều với các hàng và cột.
-
Mỗi hàng chứa dữ liệu liên quan đến một số thứ hoặc một phần của một vật.
-
-
Mỗi ô (giao điểm của một hàng và một cột) của bảng phải có chỉ một giá trị duy nhất.
-
Các mục trong bất kỳ cột nào đều phải cùng loại. Ví dụ: nếu mục nhập trong một hàng của một cột chứa một tên nhân viên, tất cả các hàng khác cũng phải chứa tên nhân viên trong cột đó.
-
-
Không có hai hàng có thể giống hệt nhau (nghĩa là mỗi hàng phải là duy nhất).
-
Thứ tự các cột và thứ tự các hàng không đáng kể.
-
Một bảng (quan hệ) ở dạng bình thường đầu tiên có thể miễn dịch với một số loại dị thường sửa đổi nhưng vẫn phụ thuộc vào một số khác. Bảng SALES ở dạng bình thường đầu tiên, và bảng có thể bị xóa và chèn bất thường. Hình thức bình thường đầu tiên có thể hữu ích trong một số ứng dụng nhưng không đáng tin cậy ở những người khác.
Để đánh giá hình thức bình thường thứ hai, bạn phải hiểu ý tưởng về sự phụ thuộc chức năng. Một
chức năng phụ thuộc là một mối quan hệ giữa hoặc giữa các thuộc tính. Một thuộc tính phụ thuộc chức năng vào một giá trị khác nếu giá trị của thuộc tính thứ hai xác định giá trị của thuộc tính đầu tiên. Nếu bạn biết giá trị của thuộc tính thứ hai, bạn có thể xác định giá trị của thuộc tính đầu tiên. Giả sử, ví dụ, bảng có các thuộc tính (cột) StandardCharge, NumberOfTest và TotalCharge liên quan đến phương trình sau:
TotalCharge = StandardCharge * NumberOfTests
TotalCharge phụ thuộc chức năng của StandardCharge và NumberOfTest. Nếu bạn biết các giá trị của StandardCharge và NumberOfTest, bạn có thể xác định giá trị của TotalCharge.
Mỗi bảng ở dạng bình thường đầu tiên phải có một khoá chính duy nhất. Khóa đó có thể bao gồm một hoặc nhiều cột. Một khóa bao gồm nhiều hơn một cột được gọi là chìa khóa tổng hợp
. Để được ở dạng bình thường thứ hai (2NF), tất cả các thuộc tính không phải khóa phải phụ thuộc vào toàn bộ khóa. Do đó, mọi mối quan hệ trong 1NF với một thuộc tính duy nhất được tự động ở dạng bình thường thứ hai. Nếu một quan hệ có một phím tổng hợp, tất cả các thuộc tính không phải là chìa khóa phải phụ thuộc vào tất cả các thành phần của khoá. Nếu bạn có một bảng trong đó một số thuộc tính không phải là chìa khóa không phụ thuộc vào tất cả các thành phần của khoá, hãy chia bảng thành hai hay nhiều bảng sao cho trong mỗi bảng mới - tất cả các thuộc tính không quan trọng phụ thuộc vào tất cả các thành phần của khóa chính.
Âm thanh khó hiểu? Xem ví dụ để làm rõ vấn đề. Xem xét bảng SALES. Thay vì chỉ ghi một lần mua cho mỗi khách hàng, bạn thêm một hàng mỗi khi khách hàng mua một mặt hàng lần đầu tiên. Sự khác biệt nữa là khách hàng điều lệ (những người có giá trị Customer_ID từ 1001 đến 1007) được giảm giá so với giá thông thường.
Customer_ID không xác định duy nhất một hàng. Trong hai hàng, Customer_ID là 1001. Trong hai hàng khác, Customer_ID là 1010. Sự kết hợp của cột Customer_ID và cột Product xác định duy nhất một hàng. Hai cột này lại với nhau là một khóa tổng hợp.
Nếu không phải vì thực tế là một số khách hàng đủ điều kiện để giảm giá và những người khác thì không, bảng sẽ không ở dạng bình thường thứ hai, bởi vì Price (một thuộc tính không thuộc khóa) sẽ chỉ phụ thuộc vào một phần của khóa (Sản phẩm). Bởi vì một số khách hàng đủ điều kiện được giảm giá, Giá phụ thuộc vào cả CustomerID và Product, và bảng ở dạng bình thường thứ hai.
Hình thức bình thường thứ ba
Các bảng trong hình thức bình thường thứ hai đặc biệt dễ bị tổn thương đối với một số loại dị thường sửa đổi - đặc biệt là các loại phụ thuộc.
Sự phụ thuộc quá cảnh xảy ra khi một thuộc tính phụ thuộc vào thuộc tính thứ hai, phụ thuộc vào thuộc tính thứ ba. Xoá trong một bảng với sự phụ thuộc như vậy có thể gây ra mất mát thông tin không mong muốn. Một mối quan hệ trong hình thức bình thường thứ ba là một mối quan hệ ở dạng bình thường thứ hai không có phụ thuộc chuyển tiếp. Hãy nhìn lại bảng SALES, mà bạn biết là ở dạng bình thường đầu tiên. Miễn là bạn hạn chế các mục để chỉ cho phép một hàng cho mỗi Customer_ID, bạn có một khóa chính một thuộc tính duy nhất, và bảng đó ở dạng bình thường thứ hai. Tuy nhiên, bảng vẫn còn phải đối mặt với sự bất thường. Điều gì sẽ xảy ra nếu khách hàng 1010 không hài lòng với chất tẩy clo, và trả lại hàng hoá để hoàn lại tiền?
Bạn muốn loại bỏ hàng thứ ba khỏi bảng, ghi lại thực tế là khách hàng mua 1010 chất tẩy chlorine. Bạn có vấn đề: Nếu bạn loại bỏ hàng đó, bạn cũng mất thực tế là thuốc tẩy chlorine có giá $ 4. Tình huống này là một ví dụ về sự phụ thuộc xuyên suốt. Giá phụ thuộc vào Sản phẩm, mà đến lượt nó phụ thuộc vào khóa chính Customer_ID.
Việc chia bảng SALES thành hai bảng giải quyết vấn đề phụ thuộc chuyển tiếp. Hai bảng tạo nên một cơ sở dữ liệu ở dạng bình thường thứ ba.