Я создаю много-много отношений между контентом, но для его упрощения я сейчас использую более простые отношения. Примером может служить взаимосвязь между фильмами. Каким будет правильный способ хранения этих данных?Хранение отношений в базе данных mysql
Первоначально я делал это:
Movie | Related Movie | Relation (Relation of the related movie)
--------------------------------
Matrix | Matrix 2 | Sequel
Matrix 2 | Matrix | Prequel
Так Матрица 2 является продолжением матрицы, но потом я понял, что это, кажется, не имеет смысла хранить отношение соответствующего фильма вместо соотношения фактического фильма. Затем я попытался это вместо:
Movie | Relation | Related Movie
--------------------------------
Matrix | Prequel | Matrix 2
Matrix 2 | Sequel | Matrix
Теперь я храню фактическое отношение фильма вместо соответствующего фильма, так что строка имеет смысл. Кроме того, более буквальное, Матрица приквел Матрица 2.
Однако потом я понял, в передней части с помощью 2-го, как он будет выглядеть, как это на странице Матрица: приквел - Матрица 2
И для матрицы 2 страницы: Продолжение - Матрица
Итак, первый способ, по-видимому, правильное сохранение данных в бэкэнд, но не в интерфейсе. И второй способ кажется, что он не сохраняет данные правильно в бэкэнд, но в интерфейсе это имеет больше смысла.
Итак, в этом случае, должен ли я хранить данные по-другому (второй способ)? Должен ли я вообще беспокоиться об этом? Пока это имеет смысл в лицевой части?
Хм, но для этого так сложно получить название собственно связанного фильма, а не самого фильма. То есть если я хочу узнать названия связанных фильмов для Matrix, я бы использовал: SELECT title FROM movies m INNER JOIN movies_relations mr ON m.id = mr.movie_id WHERE m.id = 1' Но это даст мне название «Матрица», которая является собственно фильмом, а не названием связанного фильма. Возможно, у меня есть неправильный запрос? Выполняя это так, вам также нужно перевернуть выделение и поля туда и обратно. С оригинальными способами, которыми я пользовался, я могу придерживаться одного запроса для всего. – Joker
Запрос обратный: 'SELECT movies.title FROM movies LEFT JOIN movie_relations ON movie_relations.related_movie_id = movies.id WHERE movie_relations.movie_id = 1;' будет вытягивать правильные связанные фильмы. Я обновляю свой ответ, чтобы показать, как он работает с несколькими отношениями, и делать это в одном запросе. – ash
Обновлено, см. Ответ. – ash