候选人数量可变的骑行的数据库设计

时间:2018-11-27 16:52:08

标签: sql database database-design

所以,我有一个骑马桌和一个候选桌。每次骑行最多可以有12名候选人参加,每个候选人都有自己的个人成绩。此外,我还有一个投票分区表,该表与骑行表类似,不同之处在于通常有数百个分区共享同一组候选人。

我无法以此来进行数据库设计。目前,每个候选人我有2列,其中一列将ID存储到候选人表中,另一列存储结果。骑马人数表如下所示:

(riding_id INTEGER, name TEXT, cand0_id INTEGER, cand0_result INTEGER ... cand11_id INTEGER, cand11_result INTEGER)

轮询分区表类似。

候选人表如下:

(cand_id INTEGER, riding_id INTEGER, name TEXT)

如果一次骑马或投票的候选人少于12个,则该列为空。但是,这很麻烦,因为它需要大量查询才能获取我需要的每一列,并在候选人表上有一个巨大的联接。

如果我只是骑马,我可以使用候选表中的骑马ID进行关联,但是候选也与数百个轮询分区相关联,这意味着我遇到了“大量列” “如果我想对轮询部门执行相同的操作,则会再次出现问题。

是否有理智的方式布置我的数据?

1 个答案:

答案 0 :(得分:1)

您绝对想保持分类设计,而避免拥有“跨”列的设计的愿望。您的设计应包含视图,这些视图可将数据转换为报表所需的其他布局形式。

根据您的问题和对投票管理的推测

candidates
----------
candidate_id
name
affiliation_id
etc...

ridings
-------
riding_id
name
etc...

riding_candidates
-----------------
riding_candidate_id
riding_id
candidiate_id
result

polling_divisions
-----------------
polling_division_id
name
etc...

polling_division_candidates
---------------------------
polling_division_candidate_id
polling_division_id
candidate_id
detail... (specific to division+candidate combination)
etc...
相关问题