Helpex - Trao đổi & giúp đỡ Đăng nhập

Cách xử lý mối quan hệ nhiều-nhiều trong thiết kế cơ sở dữ liệu

Khi chuẩn hóa cơ sở dữ liệu hoặc thêm bảng vào cơ sở dữ liệu hiện có, chúng ta cần có khả năng liên kết các bảng với nhau.

Có ba cách để một bảng có thể được liên kết với một bảng khác:

  1. Một-một : Một bản ghi trong một bảng có liên quan đến một bản ghi trong một bảng khác.
  2. Một-nhiều : Một bản ghi trong một bảng có liên quan đến nhiều bản ghi trong một bảng khác.
  3. Nhiều-nhiều : Nhiều bản ghi trong một bảng có liên quan đến nhiều bản ghi trong bảng khác.

Việc xử lý mối quan hệ một-một hoặc một hoặc nhiều có thể được thực hiện bằng cách thêm khóa chính của một bảng vào bảng kia dưới dạng khóa ngoại .

Tuy nhiên, đối với các mối quan hệ nhiều-nhiều, nó có một chút khác biệt. Hãy xem một ví dụ.

Mối quan hệ nhiều-nhiều: Một ví dụ

Giả sử chúng ta đang tạo một cơ sở dữ liệu cho một trường đại học (đó là một ví dụ mà tôi thường sử dụng). Chúng tôi nắm bắt thông tin chi tiết về sinh viên tham gia các lớp học, trong số những thứ khác. Các quy tắc là:

  • Một sinh viên có thể được ghi danh vào nhiều lớp cùng một lúc (ví dụ, họ có thể có ba hoặc bốn lớp mỗi học kỳ).
  • Một lớp học có thể có nhiều sinh viên (ví dụ, có thể có 20 sinh viên trong một lớp).

Điều này có nghĩa là một học sinh có nhiều lớp, và một lớp có nhiều học sinh.

Chúng tôi không thể thêm khóa chính của một bảng vào bảng kia hoặc cả hai, bởi vì điều này chỉ lưu trữ một mối quan hệ duy nhất và chúng tôi cần nhiều .

Chúng tôi không thể làm điều này:

thẻ học sinh ID lớp Tên học sinh
13, 5, 9John
21, 4, 5, 9Debbie

Điều này có nghĩa là chúng tôi có một cột để lưu trữ nhiều giá trị, điều này rất khó để bảo trì và truy vấn.

Chúng tôi cũng không thể có nhiều cột cho các giá trị ID lớp, vì điều này sẽ trở nên lộn xộn và tạo ra giới hạn về số lượng mối quan hệ.

thẻ học sinh ID lớp 1 ID lớp 2 ID lớp 3 Tên học sinh
1359John
2145Debbie

Mối quan hệ nhiều-nhiều

Vậy làm thế nào để chúng ta nắm bắt được điều này?

Chúng tôi sử dụng một khái niệm được gọi là bảng nối hoặc bảng bắc cầu .

Một bảng tham gia là một bảng nằm giữa hai bảng khác của một mối quan hệ nhiều-nhiều. Mục đích của nó là lưu trữ một bản ghi cho mỗi sự kết hợp của hai bảng khác này. Nó có vẻ như là một chút công việc để tạo, nhưng nó đơn giản để thực hiện và cung cấp một cấu trúc dữ liệu tốt hơn nhiều.

Để tạo một bảng cho ví dụ này, chúng ta có thể tạo một bảng mới có tên class_enrolment.

Bây giờ, tên của bảng là quan trọng. Thật tốt khi được mô tả bằng bảng. Tôi đã thấy việc nối các bảng được đặt tên bằng hai tên của hai bảng khác với nhau (chẳng hạn như  student_class). Tôi nghĩ điều này là hợp lệ và sẽ hoàn thành công việc, nhưng có một cái tên mô tả hơn sẽ hữu ích vì nó cho bạn biết nhiều hơn về bảng là gì.

Vì vậy, chúng ta có một bảng mới được gọi là  class_enrollment. Nó lưu trữ hai cột: một cho mỗi khóa chính từ bảng kia.

Bảng của chúng ta sẽ như thế này:

thẻ học sinh ID lớp
13
15
19
21
24
25
29

Điều này lưu trữ các bản ghi riêng biệt cho từng kết hợp của học sinh và lớp học. Bảng học sinh và lớp học của chúng tôi vẫn như cũ:

Sinh viên :

thẻ học sinh Tên học sinh
1John
2Debbie

Lớp học :

ID lớp Tên lớp
1Tiếng Anh
2Toán học
3người Tây Ban Nha
4Sinh học
5Khoa học
6Lập trình
7Pháp luật
số 8thương mại
9Giáo dục thể chất

Có cấu trúc dữ liệu của chúng tôi theo cách này giúp dễ dàng thêm nhiều mối quan hệ giữa các bảng và cập nhật học sinh và lớp học của chúng tôi mà không ảnh hưởng đến mối quan hệ giữa chúng.

20 hữu ích 0 bình luận 405k xem chia sẻ

Có thể bạn quan tâm

loading