Mysql

在這個數據庫設計中如何實現多對多關係?

  • October 30, 2014

我目前正在開發小型旅行應用程序,使用者可以在其中將其他使用者的旅行添加到他們的願望清單中。我在為願望清單設計數據庫時遇到困難。

到目前為止,我嘗試過的是:

user (user_id(pk), user_name)

trip(trip_id(pk), trip_name, user_id(fk))

wishlist(trip_id(fk), user_id(fk))

但是,由於多個使用者可以將多個旅行添加到他們的願望清單中,如何關聯這些關係?

如果使用者檢索他的個人願望清單,可以顯示“那個”特定使用者的願望清單中的相關旅行嗎?

你的設計對我來說看起來不錯。以下查詢將提供來自特定使用者願望清單的旅行:

SELECT user_name, trip_name

FROM user u
JOIN wishlist w ON u.user_id = w.user_id
JOIN trip t ON w.trip_id = t.trip_id

怎麼樣

dbo.User            (UserID(pk), UserName)

   1..1

dbo.WishList        (WishListID(pk), UserID(fk), WishListName)

   1..M

dbo.WishListTrip    (WishListTripID(pk), WishListID(fk), TripID(fk))

   M..1

dbo.Trip            (TripID(pk), TripName)

如果使用者想要將任意數量的其他使用者旅行添加到他們的願望清單,那麼他們可以簡單地將額外的 TripIds 插入 dbo.WishListTrip。根據使用者和願望清單之間的關係是 1..1 還是 1..M,那麼您可能希望將願望清單表全部刪除並通過將願望清單標題資訊(願望清單名稱、創建日期時間等…)添加到 dbo 來稍微重新設計。使用者。每次行程只儲存一次。

SELECT  u.UserName
       ,wl.WishListName
       ,t.TripName
FROM    dbo.User u
INNER JOIN
       dbo.WishList wl
       ON  u.userId = wl.userID
INNER JOIN
       dbo.WishListTrip wlt
       ON  wl.WishListTripID = wlt.WishListTripID
INNER JOIN
       dbo.Trip t
       ON  wlt.TripId = t.TripID
WHERE   u.UserName = 'Joe Blogs'

引用自:https://dba.stackexchange.com/questions/81457