如何计算我的游戏收藏数据库中的实体关系?

Posted

技术标签:

【中文标题】如何计算我的游戏收藏数据库中的实体关系?【英文标题】:How do I work out the entity relationships in my game collection database? 【发布时间】:2021-08-13 16:45:47 【问题描述】:

我有一个游戏收藏应用程序,我想在其中创建单独的游戏列表。我在后端使用 Spring JPA 和 Hibernate,这就是 Entity 类现在的样子。

@Entity
public class Game 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "game_genre",
        joinColumns = @JoinColumn(name = "game_id"),
        inverseJoinColumns = @JoinColumn(name = "genre_id"))
    private Set<Genre> genres;
    
    private int rating;

    @ElementCollection
    private List<String> platforms;

    private String publisher;
    
    private LocalDate releaseDate;

    @ManyToOne
    private GameShelf gameShelf;

@Entity
public class GameShelf 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
    @OneToMany(mappedBy = "gameShelf")
    private Set<Game> games;

@Entity
public class Genre 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
    @ManyToMany(mappedBy = "genres")
    private List<Game> games;


我不确定这是否是正确的方法...最后,我想创建一个 Spring Boot 应用程序,用户可以在其中登录(尚未实现)并管理他们自己的列表(零个或多个列表每个用户)。

在我的情况下,我的游戏桌会不会有很多重复的游戏?假设我创建了多个列表并为每个列表添加了相同的游戏,在我的情况下,我最终将多行相同的游戏映射到不同的列表。

这里有更好的方法吗?是否有一种通用的方法可以解决这样的数据库关系问题,我可以将其应用于未来的问题?

【问题讨论】:

很难说没有看到用户的映射及其与游戏或架子的关系...“管理他们自己的列表(每个用户的零个或多个列表)” 什么列表?游戏?货架? @SteveEbersole 用户可以创建货架,然后他们可以通过网络服务端点手动添加游戏。它应该成为一个简单的媒体管理应用程序,您可以在其中创建列表(货架)并手动添加游戏。 那么,如果有多个用户将其添加到他们的书架上,您是否会问是否会重复 a 游戏(例如“The Last of Us”)?通常,您希望对此进行规范化 - 该游戏只有一行。这就是关系数据库工作得最好的方式——规范化 【参考方案1】:

您的游戏架和游戏之间的关系必须是多对多。您希望游戏在许多架子上,并且架子上有许多游戏。使用该关系会创建第三个表,该表将管理两者之间的连接,并且您不会在任何表中获得重复的游戏或书架。

【讨论】:

以上是关于如何计算我的游戏收藏数据库中的实体关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何将背景颜色添加到 PlantUML 中的实体关系图

我应该如何对我的核心数据实体中的 NSNumber 属性执行计算/更新?

实体属性表的计算机科学中的实体属性表

是否可以保存引用未保存代理的实体?

在 Swift Core Data 中保存没有关系的实体

插入数据时如何将项目连接到一对多关系中的类别