Mối quan hệ một-nhiều trong cơ sở dữ liệu xảy ra khi mỗi bản ghi trong Bảng A có thể có nhiều bản ghi được liên kết trong Bảng B, nhưng mỗi bản ghi trong Bảng B chỉ có thể có một bản ghi tương ứng trong Bảng A.
Mối quan hệ một-nhiều trong cơ sở dữ liệu là thiết kế cơ sở dữ liệu quan hệ phổ biến nhất và là trọng tâm của thiết kế tốt.
Cơ sở dữ liệu cũng có thể triển khai mối quan hệ một-một và mối quan hệ nhiều-nhiều.
Ví dụ về Mối quan hệ Một-Nhiều
Xem xét mối quan hệ giữa một giáo viên và các khóa học họ dạy. Một giáo viên có thể dạy nhiều lớp, nhưng khóa học sẽ không có cùng mối quan hệ với giáo viên.
Do đó, đối với mỗi bản ghi trong bảng Giáo viên, có thể có nhiều bản ghi trong bảng Khóa học. Ví dụ này minh họa mối quan hệ một-nhiều: một giáo viên cho nhiều khóa học.
Tại sao thiết lập mối quan hệ một-nhiều lại quan trọng
Để biểu diễn mối quan hệ một-nhiều, bạn cần ít nhất hai bảng. Hãy xem tại sao.
Tuân thủ Thiết kế Mẫu Bình thường Đầu tiên
Có lẽ chúng tôi đã tạo một bảng trong đó chúng tôi muốn ghi lại tên và các khóa học đã dạy. Chúng tôi có thể thiết kế bảng Giáo viên và Khóa học như sau:
Thầy_ID | Thầy_Nhà | Khoá |
---|---|---|
Thầy_001 | Carmen | Sinh học |
Thầy_002 | Veronica | Toán |
Thầy_003 | Jorge | Anh |
Điều gì sẽ xảy ra nếu Carmen dạy hai khóa học trở lên? Chúng tôi có hai lựa chọn với thiết kế này. Chúng tôi có thể thêm nó vào hồ sơ hiện có của Carmen, như thế này:
Thầy_ID | Thầy_Tên | Khoá |
---|---|---|
Thầy_001 | Carmen | Sinh học, Toán |
Thầy_002 | Veronica | Toán |
Thầy_003 | Jorge | Anh |
Tuy nhiên, thiết kế trên không linh hoạt và có thể dẫn đến sự cố sau này khi bạn chèn, chỉnh sửa hoặc xóa dữ liệu. Nó gây khó khăn cho việc tìm kiếm dữ liệu.
Thiết kế này cũng vi phạm nguyên tắc đầu tiên của việc chuẩn hóa cơ sở dữ liệu, Dạng chuẩn đầu tiên (1NF), trong đó nói rằng mỗi ô trong bảng phải chứa một phần dữ liệu rời rạc.
Quy tắc Dạng chuẩn Thứ hai
Một sự thay thế thiết kế khác có thể là thêm một kỷ lục thứ hai cho Carmen:
Giáo viên_ID | Thầy_Tên | Khoá |
---|---|---|
Thầy_001 | Carmen | Sinh học |
Thầy_001 | Carmen | Toán |
Thầy_002 | Veronica | Toán |
Thầy_003 | Jorge | Anh |
Cách tiếp cận này tuân theo 1NF nhưng vẫn là thiết kế cơ sở dữ liệu kém vì nó tạo ra sự dư thừa và có thể làm cồng kềnh một cơ sở dữ liệu lớn một cách không cần thiết. Quan trọng hơn, dữ liệu có thể trở nên không nhất quán.
Ví dụ, nếu tên của Carmen thay đổi thì sao? Ai đó đang làm việc với dữ liệu có thể cập nhật tên của cô ấy trong một bản ghi và không cập nhật nó trong bản ghi thứ hai.
Thiết kế này vi phạm tiêu chuẩn Dạng chuẩn thứ hai (2NF), tuân theo 1NF và cũng phải tránh dư thừa của nhiều bản ghi. Quy tắc 2NF đạt được điều này bằng cách tách các tập dữ liệu con thành nhiều bảng và tạo mối quan hệ giữa chúng.
Cách Thiết kế Cơ sở dữ liệu Với Mối quan hệ Một-Nhiều
Để triển khai mối quan hệ một-nhiều trong bảng Giáo viên và Khóa học, hãy chia các bảng thành hai và liên kết chúng bằng khóa ngoại.
Ở đây, chúng tôi đã xóa cột Khóa học trong bảng Giáo viên:
Giáo viên_ID | Thầy_Tên |
---|---|
Thầy_001 | Carmen |
Thầy_002 | Veronica |
Thầy_003 | Jorge |
Và đây là bảng Khóa học. Lưu ý rằng khóa ngoại của nó, Teacher_ID, liên kết một khóa học với một giáo viên trong bảng Giáo viên:
Khóa_chỉ | Khóa_tên | Thầy_ID |
---|---|---|
Khóa_001 | Sinh học | Thầy_001 |
Khóa_002 | Toán | Thầy_001 |
Khoá_003 | Anh | Thầy_003 |
Chúng tôi đã phát triển mối quan hệ giữa Giáo viên và bảng Khóa học bằng cách sử dụng khóa ngoại. Sự sắp xếp này cho chúng ta biết Carmen dạy cả Sinh học và Toán học và Jorge dạy tiếng Anh.
Chúng ta có thể thấy cách thiết kế này tránh mọi sự dư thừa có thể xảy ra, cho phép từng giáo viên dạy nhiều khóa học và triển khai mối quan hệ một-nhiều.