Mối quan hệ nhiều nhiều giữa 2 thực thể tạo ra một thực thể mới nhưng thay vì 1 thực thể thì có thể dùng 2 được không?

Em đang làm đồ án cơ sở dữ liệu thì có một thắc mắc như thể này đó là :
Thay vì 2 bảng Chuyenbay và hoadon có mối quan hệ nhiều nhiều tạo ra 1 bảng mới thì em dùng 2 bảng được ko?
Thay vì chỉ có 1 bảng thì 1 bảng đó mình chia ra thành 2 bảng nhỏ hơn có được ko


Cảm ơn mọi người đã xem ạ

Sorry Nhân, tớ không hiểu lắm câu hỏi của cậu. Cậu có thể hỏi rõ hơn được không? Sao chuyến bay và hóa đơn lại có mối quan hệ n - n, nhưng ở ERD cậu vẽ 2 thực thể đó không có gì liên quan tới nhau? Và tạo ra 1 bảng mới gì? Dùng 2 bảng nào?
“1 bảng đó” là 1 bảng nào? Chia ra 2 bảng nhỏ như thế nào?


Nếu tớ không nhầm, cậu có 3 thực thể Hóa đơn - Vé - Chuyến bay.

  • Nếu Hóa đơn và Vé là quan hệ 1 - 1, thì cậu không cần bảng trung gian.
  • Nếu Vé và chuyến bay là quan hệ n - 1 thì cậu cũng không cần bảng trung gian luôn.
  • Hóa đơn sẽ không có bất cứ quan hệ gì với chuyến bay (hóa đơn sẽ theo vé, và thông tin chuyến bay được lần ở vé rồi).

Vậy nên, cậu chỉ cần 3 bảng tương ứng với 3 thực thể trên thôi.

3 Likes

Cái mình vẽ ý là mình đã chia thực thể ra thành 2 lẽ ra như bạn nói thì chỉ có vé thôi ko có chi tiết hóa đơn vì mình muốn hóa đơn biết được mua vé nào
Vì hóa hơn có thể có nhiều người mua chuyến bay khác nhau và chuyến bay có nhiều hóa đơn khác nhau nên nó nhiều nhiều nên chỉ tạo 1 bảng vé
Nhưng 1 bảng vé đó mình muốn chia thành 2 bảng nhỏ là vé và cthd thì có được k
Mình thấy nó k bị sai gì nhưng mà lí thuyết thì ko có

Tớ assume cthd là Cần Thơ Hải Dương :sweat_smile:

Well, thực ra cậu nói hơi lủng củng.
Vấn đề là thế này:

  • Hóa đơn với vé không phải quan hệ 1 - 1 (tớ thử xem cậu có hiểu vấn đề của cậu không. Kết quả là không, vì cậu không sửa gì cho tớ :sweat_smile:).
    Một hóa đơn có thể có nhiều vé (cậu hoàn toàn có thể mua nhiều vé một lần), vì thế nó là quan hệ 1 - n.
    Ở TH này, cậu cần bảng trung gian chi tiết hóa đơn (ahhh, “cthd” là “chi tiết hóa đơn” :sweat_smile: ). Bảng trung gian này không phải được tách ra từ bảng vé (thực thể vé không quan tâm gì tới hóa đơn), nên đừng hiểu việc cậu tách bảng vé thành vé + chi tiế hóa đơn nhé!
  • Chuyến bay không có quan hệ gì với Hóa đơn đâu :sweat_smile:
    Chuyến bay chỉ có quan hệ bắc cầu với Hóa đơn qua thực thể vé thôi.

Có lẽ cậu nên học kỹ lại môn mô hình hóa dữ liệu và thiết kế cơ sở dữ liệu quan hệ. Trong lý thuyết, từ ER chuyển sang thiết kế bảng, việc sử dụng một bảng trung gian để mô tả quan hệ giữa 2 entities thường xuyên xảy ra :smile:

Hope it helps!

2 Likes

Vậy theo bác là cái sơ đồ trên khả thi hay không .
Cái hóa đơn với vé là do mình không đọc kỹ vì cứ tưởng bác đang nói là vé với hóa đơn :))
Vé thì thuộc 1 hóa đơn thôi mà hóa đơn thì có nhiều vé
Mình muốn làm vậy vậy là vì không muốn có khóa ngoại hóa đơn vào trong vé nên muốn chia nhỏ vậy thôi mà mình không biết như vậy có được không tại mình thấy làm vậy không ảnh hưởng gì khi ghi ra bảng siêu khóa
Hy vọng bác xem lại phát cuối ạ :))

Mình nghĩ là được nha.
Ý tưởng của bạn thì ổn, nhưng cái sơ đồ thì không ổn, chỗ CTHD (chi tiết hóa đơn) lúc đó sẽ là hình chữ nhật chứ không phải hình thoi.
※ Sorry mình quên hết các khái niệm rồi =)))

Và do chỗ CTHD trở thành hình chữ nhật, lúc đó quan hệ (n,n) sẽ biến mất.
【Hoadon】(1,n)-----(1,1)【CTHD】(1,1)-----(0,1)【Ve】

Việc này giống như thay vì đi trực tiếp từ A đến B (quãng đường có độ khó cao), thì bạn lựa chọn đi từ A đến C đến B (quãng đường ít khó hơn), nó đơn giản là một sự lựa chọn.
Làm theo cách này, mình chưa nhận thấy sẽ có vấn đề gì xảy ra, nên +1 ok nha.
Nếu có vấn đề gì xảy ra sau đó thì bạn tự fix.

Bổ sung thêm, vấn đề của bạn là đưa thông tin không đầy đủ.
Giả sử như, yêu cầu đề bài không nhắc đến CTHD, mà chỉ có Hoadon và Ve, thì việc tạo bảng quan hệ nhiều nhiều là cần thiết.
Ngược lại, đề bài có nhắc đến CTHD, và có nói rõ mỗi chi tiết đó là một vé, thì sẽ có thể làm theo cách của bạn.
Bạn đưa thông tin không rõ, khiến người khác không biết CTHD là do bạn tự nghĩ ra? Hay đó vốn là logic của hệ thống? Nếu là do bạn tự nghĩ ra thì nó có xung đột gì với logic của hệ thống hay không - không biết?

Những người thường hỗ trợ trong đây, đặc biệt là những người giải thích chi tiết, thường sẽ có khả năng phân tích yêu cầu, lựa chọn ra được giải pháp tốt nhất.
Cho nên, bạn đưa tình huống nửa vời như vậy (yêu cầu ban đầu không có, làm cũng chưa xong, tự tạo ra tình huống lạ rồi nhờ người khác xem), thực sự là không tốt.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?