Mối quan hệ một-nhiều trong cơ sở dữ liệu

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 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 cơ sở dữ liệu là thiết kế cơ sở dữ liệu quan hệ phổ biến nhất và là trung tâm của thiết kế tốt.

Hãy xem xét mối quan hệ giữa một giáo viên và các khóa học mà họ dạy. Một giáo viên có thể dạy nhiều khóa học, 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. Đây là 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à quan trọng

Để đại diện cho mối quan hệ một-nhiều, bạn cần ít nhất hai bảng. Hãy xem tại sao.

Có lẽ chúng tôi đã tạo ra một bảng Giáo viên mà chúng tôi muốn ghi lại tên và các khóa học được giảng dạy. Chúng tôi có thể thiết kế nó như thế này:

Giáo viên và khóa học
Teacher_ID Tên giáo viên Khóa học
Teacher_001 Carmen Sinh học
Teacher_002 Veronica môn Toán
Teacher_003 Jorge Anh

Nếu Carmen dạy hai hay nhiều khóa học thì sao? Chúng tôi có hai lựa chọn với thiết kế này. Chúng tôi chỉ có thể thêm nó vào hồ sơ hiện tại của Carmen, như thế này:

Giáo viên và khóa học
Teacher_ID Giáo viên _Name Khóa học
Teacher_001 Carmen Sinh học, Toán
Teacher_002 Veronica môn Toán
Teacher_003 Jorge Anh

Tuy nhiên, thiết kế ở trên không linh hoạt và có thể gây ra sự cố sau này khi cố chèn, chỉnh sửa hoặc xóa dữ liệu.

Nó làm cho việc tìm kiếm dữ liệu trở nên khó khăn. Thiết kế này vi phạm nguyên tắc chuẩn hóa cơ sở dữ liệu đầu tiên , Biểu mẫu thông thường đầu tiên (1NF) , trong đó nêu rõ rằng mỗi ô bảng phải chứa một phần dữ liệu rời rạc.

Một lựa chọn thiết kế khác có thể là chỉ cần thêm một bản ghi thứ hai cho Carmen:

Giáo viên và khóa học
Giáo viên _ID Giáo viên _Name Khóa học
Teacher_001 Carmen Sinh học
Teacher_001 Carmen môn Toán
Teacher_002 Veronica môn Toán
Teacher_003 Jorge Anh

Điều này tuân thủ 1NF nhưng vẫn là thiết kế cơ sở dữ liệu nghèo vì nó giới thiệu dự phòng và có thể tạo ra một cơ sở dữ liệu rất 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 Carmen thay đổi thì sao? Người nào đó 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 được trong bản ghi thứ hai. Thiết kế này vi phạm Biểu mẫu thông thường thứ hai (2NF), tuân thủ 1NF và cũng phải tránh sự dư thừa của nhiều bản ghi bằng cách tách các tập con dữ liệu thành nhiều bảng và tạo mối quan hệ giữa chúng.

Làm thế nào để thiết kế một cơ sở dữ liệu với mối quan hệ một-nhiều

Để thực hiện mối quan hệ một-nhiều trong bảng Giáo viên và Khóa học, chúng tôi chia 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
Giáo viên _ID Giáo viên _Name
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

Và đây là bảng Khóa học. Lưu ý rằng khóa ngoại, Teacher_ID, liên kết khóa học với giáo viên trong bảng Giáo viên:

Các khóa học
Mã khóa học Tên khóa học Teacher_ID
Course_001 Sinh học Teacher_001
Khóa học_002 môn Toán Teacher_001
Course_003 Anh Teacher_003

Chúng tôi đã phát triển mối quan hệ giữa các giáo viên và bảng khóa học sử dụng khóa ngoại.

Điều này cho chúng ta biết rằng cả Sinh học và Toán đều được dạy bởi Carmen và Jorge dạy tiếng Anh.

Chúng ta có thể thấy cách thiết kế này tránh được bất kỳ sự dư thừa nào có thể, cho phép các giáo viên riêng lẻ dạy nhiều khóa học và thực hiện mối quan hệ một-nhiều.

Cơ sở dữ liệu cũng có thể thực hiện mối quan hệ một-một và mối quan hệ nhiều-nhiều.