我有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(人们可以说,这种“的 配对 ”是一个关系;这种溶液的作用更像在一个顺序步骤中代表 同胞 ,也允许扩展到两种以上的“ 游戏价值 ”)。
(gseq_id,seq_step)
gaming_sequence_detail
游戏序列细节中的 “ 游戏事件 ”和“ 动作窗口 ”可以独立修改,也可以显示为“ 未配对 ”。
其中的一个约束gaming_sequence_detail是,每个seq_step值都可以存在一个game_event和一个action_window,因此seq_step单个gseq_id值的最大基数为2。
seq_step
game_event
action_window
gseq_id
如果是这样,相同的内容gaming_value也可能会以相同的顺序出现多次。此外,该设计还可以表示不同的 “游戏阶段玩法” 之间的共享序列。
gaming_value