Соотношение «многие ко многим» - отображение строк в нескольких таблицах - PullRequest
0 голосов
/ 15 октября 2018

Первый вопрос здесь.

Итак, немного предыстории, я довольно новичок в области разработки и создаю приложение MVC, основанное на базе данных, которое в основном функционирует как журнал видеоигр и их жанров длягеймеры открывают для себя новые и старые игры, основанные на жанрах, которые вызывают их интерес.Это требует отношения «многие ко многим», поскольку одна игра может быть классифицирована по нескольким жанрам, а один жанр может иметь несколько игр, классифицированных в соответствии с ней.В настоящее время он находится в моей базе данных SQL, у меня есть три таблицы - Game, Genre и таблица ссылок.Таблица ссылок имеет FK как для GameID, так и для GenreID.Насколько я понимаю (или его отсутствие), поскольку в самой таблице игр есть таблица ссылок, а фактический FK для жанра отсутствует, как я смогу отобразить несколько жанров, примененных к каждой игре, на информационной странице каждой отдельной игры?Есть ли что-то, чего мне не хватает, что я мог бы включить в одну из таблиц, возможный SQL-запрос, который мог бы помочь, или есть какое-то жесткое кодирование, которое я могу сделать в Visual Studio после импорта своей БД для программирования остальныхприложение?

Моя база данных выглядит так:

CREATE TABLE Game 
(   
    GameID INT IDENTITY(1, 1) NOT NULL,   
    Name NVARCHAR(50) NOT NULL,   
    GameDescription NVARCHAR(200) NULL   
)

CREATE TABLE Genre 
(
    GenreID INT IDENTITY(1, 1) NOT NULL,   
    Genre NVARCHAR(20) NOT NULL   
)

CREATE TABLE GameGenre 
(
     GameGenreID INT IDENTITY(1, 1) NOT NULL,  
     FOREIGN KEY ('GameID') REFERENCES Cities('GameID'),   
     FOREIGN KEY ('GenreID') REFERENCES Cities('GenreID')   
)

Заранее спасибо.Любой совет с благодарностью!

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Хороший вопрос.Несмотря на упрощение, я думаю, что ваш подход оправдан, и очевидно, что вы выполнили домашнюю работу.

После того, как ваши таблицы построены и заполнены соответствующим образом, вам нужно будет выполнить операторы SQL, чтобы правильно получить то, что вы ищете.

Предположим, у вас есть три таблицы, перечисленные выше, например:

| Game        | Genre   | GameGenre   |
|-------------|---------|-------------|
| GameID      | GenreID | GameGenreID |
| Name        | Genre   | GameID      |
| Description |         | GenreID     |

Вы бы "связали" их, пройдя через таблицу GameGenre, которая называется таблицей бриджа.

Так что, если вы хотите увидеть ВСЕ жанры, с которыми связана конкретная играПример кода может быть таким:

SELECT
    Game.GameID,
    Game.Name
    GameGenre.GenreID,
    Genre.Genre

FROM
    Game
        INNER JOIN GameGenre ON Game.GameID = GameGenre.GameID
        INNER JOIN Genre ON GameGenre.GenreID = Genre.GenreID

WHERE
    Game.Name = 'Metal Gear Solid'

То, что вы делаете, - это начинаете с определенной игры, а затем используете идентификатор этой игры, чтобы перейти к таблице бриджа.После того, как вы правильно присоединились к таблице бриджа, вы можете присоединиться к таблице жанра, чтобы получить там информацию.

Если вы хотите начать с жанра и просмотреть все связанные игры, вы можете просто повернуть вспятьпроцесс.Вы начинаете в жанрах и присоединяетесь к таблице бриджа, а затем из таблицы бриджа присоединяетесь к игре.Ниже приведен пример псевдокода:

SELECT
    Genre.GenreID,
    Genre.Genre,
    Game.Name

FROM
    Genre
        INNER JOIN GameGenre ON Genre.GenreID = GameGenre.GenreID
        INNER JOIN Game ON GameGenre.GameID = Game.GameID

WHERE
    Genre.Genre = 'Espionage'

Надеюсь, это поможет!Вы определенно на правильном пути, и я думаю, что вы задаете правильные вопросы.Если вам нужно лучше понять объединения, предложите начать здесь:

0 голосов
/ 15 октября 2018

Можете ли вы попробовать ниже, и дайте мне знать, если у вас есть какие-либо вопросы

SELECT G.GameID, G.Name, G.GameDescription, Genre.Genre
FROM Game G
LEFT JOIN GameGenre GG ON G.GameID = GG.GameID
LEFT JOIN Genre Genre ON GG.GenreID = Genre.GenreID 
-- WHERE if you have any where statement
0 голосов
/ 15 октября 2018

Просто «объедините» все свои 3 таблицы.Ссылка может быть найдена здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...