Cách tốt nhất để lưu trữ "danh sách có thứ tự" trong cơ sở dữ liệu là gì, để cập nhật chúng (thêm, xóa và thay đổi thứ tự các mục nhập) có thể dễ dàng thực hiện?Cách tốt nhất để lưu trữ danh sách được sắp xếp trong cơ sở dữ liệu là gì?
Xem xét cơ sở dữ liệu nơi bạn có bảng cho người dùng và phim. Mỗi người dùng có một danh sách các bộ phim yêu thích.
Vì nhiều người dùng có thể thích cùng một bộ phim, tôi đã làm cho người dùng và phim phân tách các bảng và sử dụng bảng thứ ba để kết nối chúng, các tiện ích.
usermovies chứa id của người dùng và phim và "số đơn đặt hàng". Số thứ tự được sử dụng để đặt hàng danh sách phim cho người dùng.
Ví dụ, người dùng Josh có thể có danh sách sau đây:
- Prometheus
- Men in Black 3
- nhà độc tài
và sử dụng Jack có thể có một danh sách như:
- Độc tài
- Prometheus
- Battleship
- Snow White and the Huntsman
Vì vậy, họ chia sẻ một số yêu thích, nhưng không nhất thiết phải theo thứ tự.
Tôi có thể lấy danh sách các ID phim cho mỗi người dùng sử dụng một truy vấn:
SELECT movie_id FROM usermovies WHERE user_id =? ORDER BY order_number
Sau đó, với sự movie_ids ra lệnh, tôi có thể nhận được danh sách các phim sử dụng một truy vấn
SELECT name FROM movies WHERE id in (?,?,?) ORDER BY FIELD (id, ?,?,?)
Vì vậy, truy vấn hoạt động, nhưng việc cập nhật danh sách có vẻ thực sự phức tạp - có cách nào tốt hơn để lưu trữ thông tin này để dễ dàng lấy danh sách phim cho người dùng x, thêm phim, xóa chúng và thay đổi thứ tự của danh sách không?
để có được tất cả các phim cho một người dùng mà bạn có thể sử dụng một truy vấn đơn như thế này: 'SELECT tên FROM phim INNER JOIN usermovie ON usermovie.movie_id = movies.id AND usermovie.user_id =? ORDER BY usermovie.order_number'. Và tôi không thấy những gì khó khăn với cách tiếp cận hiện tại? Để thêm phim vào một người dùng, bạn chỉ cần chèn một mục mới trong liên kết của bạn và để xóa nó, bạn xóa mục nhập đó. – Cyclonecode
cảm ơn! Điều đó sẽ có ích, mặc dù vấn đề thực sự của tôi ở đây là việc cập nhật. – wannabeartist