第一个问题。
所以,有一点背景知识,我在开发领域还算是新手,并且正在创建一个数据库优先的MVC应用程序,该应用程序基本上可以充当视频游戏及其类型的日志,供游戏玩家基于该游戏发现新的和旧的游戏。引起人们兴趣的流派。鉴于一个游戏可以归类为几种类型,而一种游戏可以归类为多个游戏,这就需要多对多的关系。就目前在我的SQL数据库中而言,我有三个表-游戏,类型和链接表。链接表的GameID和GenreID都有FK。据我了解(或缺乏),因为游戏表本身有一个链接表,而游戏类型本身没有实际的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')
)
先谢谢您。任何建议都将不胜感激!
答案 0 :(得分:2)
好问题。尽管简化了,但我认为您的方法是合理的,很明显,您已经完成了功课。
一旦适当地构造和填充了表,您将需要执行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'
您正在做的事情是从特定游戏开始,然后使用该游戏的ID进入过渡牌桌。正确加入桥表后,就可以加入流派表以在其中获取信息。
如果您想从一个类型开始,并查看所有相关的游戏,则可以简单地逆转该过程。您将从流派开始,加入桥表,然后从桥表加入游戏。下面是一些伪代码示例:
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'
希望这会有所帮助!您肯定在正确的道路上,我认为您在问正确的问题。如果您需要更好地了解联接,建议您从这里开始:
答案 1 :(得分:0)
只需“联接”您所有3个表。可以找到参考here
答案 2 :(得分:0)
您可以尝试以下吗,如果您有任何疑问,请告诉我
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