所以,我有一个骑马桌和一个候选桌。每次骑行最多可以有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进行关联,但是候选也与数百个轮询分区相关联,这意味着我遇到了“大量列” “如果我想对轮询部门执行相同的操作,则会再次出现问题。
是否有理智的方式布置我的数据?
答案 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...