当前位置: 首页 > 面试题库 >

使用1个具有3个外键的联结表还是2个具有共享排序的联结表?

姜天宇
2023-03-14
问题内容

我有3个表,我试图在这些表之间 正确 创建关系:

  • 游戏阶段
  • 游戏事件(“游戏阶段”的一个步骤)
  • 动作窗口(“游戏阶段”中一种截然不同的步骤)

“游戏阶段”可以具有一个或多个“游戏事件”,而“游戏事件”可以在一个或多个“游戏阶段”中发生。(多对多)

一个“游戏阶段”可以具有一个或多个“动作窗口”,而一个“动作窗口”可以在一个或多个“游戏阶段”中发生。(多对多)

“游戏事件”与“动作窗口”无关。

但是 ,我犹豫是否要创建2个单独的联结表,因为“游戏事件”和“动作窗口”在每个“游戏阶段”共享相同 的出现
(即序列)编号系统。我不确定该如何维持。

在仍然可以轻松跟踪发生顺序的同时,对这些表进行布局的最合适方法是什么?


问题答案:

我建议一种表示 “游戏事件”“动作窗口” 序列 的设计,它们通过属于同一序列步骤中的同一序列而相互关联。

也就是说,引入“ 游戏序列 ”和“ 游戏序列细节 ”的实体,联接表,避免“设计”,代表“的共享测序事实 游戏事件(一个或多个) ”和“
操作窗口(一个或多个) 由”意思是在“ 游戏序列 ”中具有相同的 序列步骤 (避免 使用“游戏事件”与“动作窗口”无关 )。

施玛

+--------------+ 1      1,n +-------------------+ 1,n
|  game_phase  +------------+  game_phase_play  +----+
|              |            |                   |    |
+--------------+            +-------------------+    |
                                                     |
                                                     | 1
+--------------------------+ 1,n         1 +---------+---------+
|  gaming_sequence_detail  +---------------+  gaming_sequence  |
|                          |               |                   |
++--------+----------------+               +-----+-------------+
 | 1,n    |                                      |
 |        +---+  seq_step                        +---+ seq_steps_number
 |
 |
 |                                      +--------------+
 |                                +-----+  game_event  |
 | 1,n +----------------+         |     |              |
 +-----+  gaming_value  | <-------+     +--------------+
       |                |         |     +-----------------+
       +----------------+         +-----+  action_window  |
                                        |                 |
                                        +-----------------+

前缀

gph_                    === game_phase_
gseq_                   === gaming_sequence_
gv_                     === gaming_value_

game_phase              ( id , description, ... )
game_phase_play         ( id , gph_id, gseq_id, date, description, ... )
gaming_sequence         ( id, seq_steps_number, ... )
gaming_value            ( id , type, ... )
gaming_sequence_detail  ( gseq_id, gv_id, seq_step, ... )

我还为名为“ 游戏值 ”的“ 游戏事件 ”和“ 动作窗口 ”引入了一个通用实体,可用于包含在“ 游戏序列
”中。这种概括可以表示一种游戏不变性的值(在我们的示例中为2种不同类型,但可扩展),因此选择了命名(已从“ 游戏化的对象 ”和“ 游戏可观察的”转换)。

游戏值(S) 这两种类型的”是“ 一起台阶 中的” 游戏序列 由平等的装置(gseq_id,seq_step)在一对gaming_sequence_detail(人们可以说,这种“的 配对
”是一个关系;这种溶液的作用更像在一个顺序步骤中代表 同胞 ,也允许扩展到两种以上的“ 游戏价值 ”)。

游戏序列细节中的游戏事件 ”和“ 动作窗口 ”可以独立修改,也可以显示为“ 未配对 ”。

其中的一个约束gaming_sequence_detail是,每个seq_step值都可以存在一个game_event和一个action_window,因此seq_step单个gseq_id值的最大基数为2。

如果是这样,相同的内容gaming_value也可能会以相同的顺序出现多次。此外,该设计还可以表示不同的 “游戏阶段玩法” 之间的共享序列。



 类似资料:
  • 问题内容: 我正在尝试创建一个标准来从3个表(关联,更新和详细信息)中检索一些对象。详细信息引用了关联和更新,而更新引用了详细信息列表。我的目标是在给定关联ID的情况下,在指定字段中检索至少包含明细且值为空的更新列表。在JPQL中很容易做到,但是客户说必须用标准编码。 我的JPQL是: 我尝试了以下操作,但是它只是返回了数据库中的所有更新: 谁能帮我?我搜索了但找不到3个实体的任何示例。 问题答案

  • 问题内容: 所以我有四个桌子。每个表都有一个与前一个表ID相同的ID。因此,我的点击表中有一个ID和一个广告来源的ID。在广告表中,它有一个广告ID和一个来自其广告系列的ID。所以这是一个例子。 因此,要找出表4中的值从何而来,我需要遍历每个表并检查它们具有哪个ID。基本上,我想知道表1中的哪些值与表4中的值相关联。 表4中的内容是网站的访问者,表1中的内容是互联网广告。我想知道哪些访客来自哪些广

  • 问题内容: 我正在尝试使用JPA / Hibernate设置以下表: 可能有很多用户,每个用户最多只能有一个验证码,也可能没有。 这是我的课程: 我创建一个用户,然后尝试使用以下代码添加验证代码: 当我尝试运行它时,我收到org.hibernate.PersistentObjectException:分离的实体传递给持久化:用户 我还尝试在Validation类中使用以下代码: 当我创建验证码时,

  • 问题内容: 我有一个table(),其中2个column(和)是id。这些对应名称的名称在带有列的另一个表()中。 假设我只是在使用,那么简单的内部联接就可以解决我在获取名称时遇到的问题。 如 但是,如果我希望该名称也要解析为什么?“内部连接”会将其解析为? 我知道以上查询是错误的。我可以得到那些对应于两个第和用? -初学者 问题答案: 我建议始终为表和列添加别名。因此,您将确定选择了哪些数据。

  • 问题内容: 根据我的研究,这是一个非常普遍的问题,通常有一个相当简单的解决方案。我的任务是更改几个查询,以 使所有结果都 进入 每组前3名 。最初,一切进展顺利,我使用了该站点的一些建议和答案来实现这一目标(最受欢迎的产品)。但是,由于多次加入,我在最后一个“最畅销产品”方面遇到了困难。 基本上,我需要 按#个产品的最高销售顺序来排序所有产品,其中每个供应商的最大产品数量为3。 我要联接多个表来创

  • 问题内容: 我有两个共享大量代码的JSF项目-Java类,xhtml文件,标记库,css和javascript文件等。我的开发环境/平台主要包括Eclipse,Ant,Perforce和Tomcat。 有没有人找到一种创建和组织共享代码的方法,以便公用代码可以保留在一组文件夹中? Eclipse使添加Java源的外部文件夹变得容易,但是在其他文件类型上却不足。我将不胜感激。 问题答案: 在Ecli