Sơ đồ E-R và chuẩn hóa
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| entity-relationship diagram/ˈentɪti rɪˈleɪʃənʃɪp ˈdaɪəɡræm/ | sơ đồ thực thể-quan hệ |
| normalisation/ˌnɔːməlaɪˈzeɪʃn/ | chuẩn hóa |
| entity/ˈentɪti/ | thực thể |
| cardinality/ˌkɑːdɪˈnælɪti/ | hệ số |
| one-to-many/wʌn tə ˈmeni/ | một-đến-nhiều |
| many-to-many/ˈmeni tə ˈmeni/ | nhiều-đến-nhiều |
| link table/lɪŋk ˈteɪbl/ | bảng liên kết |
| normal forms/ˈnɔːml fɔːmz/ | dạng chuẩn |
| atomic/əˈtɒmɪk/ | nguyên tử |
| transitive dependency/ˈtrænsɪtɪv dɪˈpendənsi/ | phụ thuộc truyền |
Bốn mươi dòng để thay đổi một số điện thoại
- Một trường học lưu hồ sơ đăng ký trong một bảng tính. Mỗi dòng là một học sinh trong một khóa học, và mỗi dòng cũng chứa giáo viên chủ nhiệm của học sinh đó và số điện thoại của giáo viên.
- Giáo viên thay đổi số của mình. Bốn mươi dòng cần chỉnh sửa. Ba mươi chín dòng đã được chỉnh. Trong suốt phần còn lại của năm học, danh sách khóa học sẽ gọi đến một người lạ.
- Không có lỗi đánh máy nào. Lỗi nằm ở thiết kế: một sự thật thuộc về giáo viên được lưu trữ một lần cho mỗi lần đăng ký, nên nó có thể đúng ở nơi này nhưng sai ở nơi khác.
- Bài học này giới thiệu hai công cụ thiết kế giúp ngăn chặn vấn đề đó: biểu đồ thực thể-liên kết (ER diagram), vẽ cấu trúc, và chuẩn hóa, loại bỏ sự trùng lặp.
Biểu đồ thực thể-liên kết
- Một biểu đồ thực thể-liên kết (E-R diagram) tài liệu hóa thiết kế cơ sở dữ liệu: mỗi thực thể là một hình chữ nhật, mỗi liên kết là đường nối giữa hai hình chữ nhật, và độ đa dạng (cardinality) được đánh dấu ở mỗi đầu.
- Trong ký hiệu chân chim, một thanh đơn giản có nghĩa là "một" và chân ba ngà có nghĩa là "nhiều". Đọc mỗi đường theo cả hai hướng: mỗi khách hàng đặt nhiều đơn hàng; mỗi đơn hàng do một khách hàng đặt.
- Sơ đồ được vẽ trước khi bất kỳ bảng nào được tạo ra, và các liên kết trên đó sẽ trở thành khóa ngoại.

Một hình chữ nhật cho mỗi thực thể, một đường cho mỗi liên kết

Một thanh cho một, một chân cho nhiều
Trong sơ đồ E-R, số lượng của một thực thể có thể liên quan đến một thực thể kia, được đánh dấu ở mỗi đầu của đường thẳng, là ____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Cardinality là một hoặc nhiều ở mỗi đầu; ký hiệu chân chim vẽ một thanh cho một và một chân cho nhiều.
Ba loại liên kết
- Một-đến-một (1:1): mỗi thành viên có một thẻ thư viện và mỗi thẻ thuộc về một thành viên. Hiếm gặp; hai thực thể thường được gộp vào cùng một bảng.
- Một-đến-nhiều (1:M): một khách hàng đặt nhiều đơn hàng; mỗi đơn hàng thuộc về một khách hàng. Được triển khai bằng cách đưa khóa chính của bên "một" vào bảng bên "nhiều" như một khóa ngoại.
- Nhiều-đến-nhiều (M:N): một học sinh tham gia nhiều môn học và một môn học có nhiều học sinh. Không thể triển khai trực tiếp; cần một bảng liên kết.
Mỗi khách hàng có thể đặt nhiều đơn hàng, nhưng mỗi đơn hàng thuộc về một khách hàng. Mối quan hệ này là:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Một khách hàng → nhiều đơn hàng, mỗi đơn hàng → một khách hàng: một mối quan hệ một-nhiều.
Gắn mỗi mối quan hệ với cardinality của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
1:1 mỗi bên có một; 1:M một bên có nhiều; M:N cả hai bên đều có nhiều (cần bảng liên kết).
Ví dụ minh họa: vẽ biểu đồ E-R
- Một trường học có giáo viên, lớp học và học sinh. Mỗi giáo viên dạy nhiều lớp; mỗi lớp do một giáo viên giảng dạy. Mỗi lớp có nhiều học sinh; mỗi học sinh thuộc một lớp. Học sinh có thể tham gia nhiều câu lạc bộ và mỗi câu lạc bộ có nhiều học sinh.
- Bốn hình chữ nhật:
TEACHER,CLASS,STUDENT,CLUB.TEACHER—CLASSlà một-đến-nhiều, chân nằm ởCLASS.CLASS—STUDENTlà một-đến-nhiều, chân nằm ởSTUDENT.STUDENT—CLUBlà nhiều-đến-nhiều, chân nằm ở cả hai đầu. - Các điểm chấm: có mặt mọi thực thể, mọi liên kết được vẽ, và ký hiệu độ đa dạng đúng ở mỗi đầu. Một đường không có ký hiệu chỉ tính là một nửa điểm.
Bảng liên kết
- Một liên kết nhiều-đến-nhiều được chia thành hai liên kết một-đến-nhiều thông qua một bảng liên kết chứa hai khóa ngoại.
ENROLMENT(StudentID, CourseID, EnrolmentDate): một học sinh có nhiều đăng ký, một môn học có nhiều đăng ký, và mỗi hàng đại diện cho một học sinh trong một môn học. Khóa chính của nó là khóa tổng hợp từ hai khóa ngoại.- Dữ liệu về mối ghép nối, ngày tháng, điểm số được đặt trong bảng liên kết; dữ liệu về học sinh hoặc môn học vẫn giữ nguyên trong bảng riêng của chúng.

Một nhiều-đến-nhiều trở thành hai một-đến-nhiều
Mối quan hệ nhiều-nhiều được triển khai trong cơ sở dữ liệu quan hệ như thế nào?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Bảng liên kết (junction) chứa khóa ngoại trỏ vào mỗi phía, biến M:N thành hai mối quan hệ 1:M.
ENROLMENT(StudentID, CourseID, EnrolmentDate) là một bảng liên kết. Những phát biểu nào đúng? Chọn tất cả những gì áp dụng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Bảng liên kết chứa cặp ghép và thông tin về cặp ghép. Dữ liệu riêng của học sinh vẫn nằm trong STUDENT, nếu không nó sẽ bị lặp lại trong mỗi lần đăng ký.
Chuẩn hóa
- Chuẩn hóa tổ chức các bảng sao cho mỗi sự thật được lưu trữ đúng một lần, giảm thiểu sự trùng lặp và mâu thuẫn. Nó đi qua các dạng chuẩn theo thứ tự: đầu tiên, thứ hai, thứ ba.
- Quy trình: xác định các thực thể và thuộc tính của chúng; chọn khóa chính cho mỗi thực thể; loại bỏ nhóm lặp lại và giá trị không nguyên tử (1NF); loại bỏ các thuộc tính phụ thuộc chỉ vào một phần của khóa tổng hợp (2NF); loại bỏ các thuộc tính phụ thuộc vào một thuộc tính không phải khóa khác (3NF); thêm khóa ngoại cho các liên kết.
- Chi phí là nhiều bảng hơn và nhiều phép nối hơn. Đề thi yêu cầu đạt đến 3NF.
Phòng thí nghiệm dịch vụ cơ sở dữ liệu
Xem cách DBMS chuyển đổi câu truy vấn thành quyền truy cập dữ liệu chia sẻ an toàn.
Đặt các dạng chuẩn theo thứ tự bạn áp dụng chúng.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Bạn đạt đến 3NF bằng cách đi qua 1NF sau đó 2NF — mỗi bước xây dựng trên bước trước.
Mục đích chính của chuẩn hóa là:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Chuẩn hóa lên 3NF lưu trữ mỗi thực tế một lần, loại bỏ các bất thường cập nhật/chèn/xóa (với chi phí là nhiều phép nối hơn).
Dạng chuẩn thứ nhất
- Một bảng nằm ở 1NF khi mỗi trường chứa một giá trị nguyên tử duy nhất, không có nhóm lặp lại, và có khóa chính.
STUDENT(StudentID, Name, Phone)vớiPhonechứa0123, 0456thì không nguyên tử.STUDENT(StudentID, Name, Course1, Course2, Course3)có một nhóm lặp lại.- Sửa chữa cả hai bằng cách di chuyển dữ liệu lặp lại sang bảng riêng với một hàng cho mỗi giá trị:
STUDENT_PHONE(StudentID, Phone),ENROLMENT(StudentID, CourseID).
Trường Phone chứa "0123, 0456" cho một học sinh. Bảng vi phạm dạng chuẩn nào?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Hai giá trị trong một ô là vi phạm 1NF. Di chuyển các số đến STUDENT_PHONE(StudentID, Phone), một số mỗi hàng.
Ví dụ minh họa: dạng chuẩn thứ hai
ORDER(OrderID, CustomerID, CustomerName, ProductID, Quantity)có khóa chính tổng hợp là(OrderID, ProductID). Bảng có đang ở 2NF?- Kiểm tra từng trường không phải khóa với toàn bộ khóa.
Quantityphụ thuộc vào cảOrderIDvàProductID: tức là mã đơn hàng và mã sản phẩm. OK. CustomerIDvàCustomerNamechỉ phụ thuộc vàoOrderID, tức là chỉ một phần của khóa: đây là phụ thuộc một phần, nên bảng không ở 2NF. Chia nhỏ:ORDER(OrderID, CustomerID, CustomerName)vàORDER_LINE(OrderID, ProductID, Quantity).
Ví dụ minh họa: dạng chuẩn thứ ba
ORDER(OrderID, CustomerID, CustomerName)có đang ở 3NF?- Một bảng nằm ở 3NF khi nó đã ở 2NF và mọi trường không phải khóa chỉ phụ thuộc vào khóa chính, không phụ thuộc vào một trường không phải khóa khác.
CustomerNamephụ thuộc vàoCustomerID, mà không phải là khóa: đây là phụ thuộc truyền dẫn, nên bảng không ở 3NF. - Chia nhỏ thêm:
ORDER(OrderID, CustomerID)vàCUSTOMER(CustomerID, CustomerName), vớiCustomerIDlà khóa ngoại. Tên hiện được lưu trữ chỉ một lần, bất kể khách hàng đặt bao nhiêu đơn hàng.

Mỗi dạng chuẩn loại bỏ một loại phụ thuộc
Chuẩn hóa lên 3NF lưu trữ mỗi thực tế một lần và loại bỏ bất thường cập nhật, với chi phí là nhiều bảng và phép nối hơn.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Sự đánh đổi này — dữ liệu sạch hơn so với nhiều phép nối — là lý do 3NF thường là mục tiêu tiêu chuẩn.
Giải thích lý do tại sao một bảng có hay không có ở 3NF
- Không nằm trong 3NF: đặt tên phụ thuộc. "
TEACHERkhông nằm trong 3NF vì thuộc tính không khóaDepartmentNamephụ thuộc vào thuộc tính không khóaDepartmentID, chứ không phải khóa chính.". - Ở 3NF: bao quát đầy đủ ba điều kiện. "Mọi thuộc tính đều nguyên tử và không có nhóm lặp lại; không có phụ thuộc một phần vào một phần của khóa; mọi thuộc tính không phải khóa chỉ phụ thuộc vào khóa chính, không có phụ thuộc truyền dẫn."
- Sau đó, nếu được hỏi, hãy cung cấp các bảng đã chuẩn hóa theo ký hiệu tiêu chuẩn với các khóa ngoại được đánh dấu.
Trong TEACHER(TeacherID, Name, DepartmentID, DepartmentName), tại sao bảng này không đạt chuẩn 3NF?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Đó là sự phụ thuộc truyền dẫn. Tách riêng DEPARTMENT(DepartmentID, DepartmentName) và giữ DepartmentID trong TEACHER như một khóa ngoại.
Điểm số dễ mất
- 2NF chỉ là vấn đề khi khóa chính là composite. Khóa một trường không thể có phụ thuộc từng phần.
- 3NF yêu cầu 2NF. Hãy nêu cả hai khi biện minh.
- Nguyên tử nghĩa là mỗi ô chứa một giá trị. "Hai số điện thoại trong một trường" là vi phạm 1NF, không phải 3NF.
- Đặt tên chuẩn hóa không phải câu trả lời; đặt tên phụ thuộc mới là câu trả lời. Việc tạo thêm bảng sau khi chuẩn hóa là mục đích, không phải lỗi.
Bạn đã nắm vững
- Một sơ đồ E-R hiển thị các thực thể dưới dạng hình chữ nhật và mối quan hệ dưới dạng đường thẳng với độ đa ở mỗi đầu: 1:1, 1:N, N:M
- Mối quan hệ nhiều-đến-nhiều được lưu trữ thông qua một bảng liên kết của hai khóa ngoại, khóa chính của nó là sự kết hợp của chúng.
- 1NF: giá trị nguyên tử, không nhóm lặp lại, có khóa chính · 2NF: không có phụ thuộc từng phần vào một phần của khóa composite · 3NF: không có phụ thuộc truyền dẫn giữa các thuộc tính ngoài khóa
- Biện minh bằng cách nêu tên phụ thuộc, sau đó đưa ra các bảng đã tách và khóa ngoại của chúng.