Article
2026-06-28-襷の系譜-v0.2-PRD
襷の系譜 V0.2 PRD
日期:2026-06-28
关联文档:
1. 版本定位
V0.1 已经验证了“以选手档案为核心”的资料站方向。V0.2 的目标不是立刻做完整成绩库,而是让站点开始具备三条稳定浏览路径:
- 选手:从个人档案理解一个选手。
- 赛事:从一场比赛理解出场选手和结果。
- 关系:从一个选手跳到与他有关的人、组织和比赛。
V0.2 仍然是粉丝向资料站,不是新闻站,不是实时比分站,也不是完整统计平台。
核心判断:
关系图组件不是当前重点。当前重点是定义“什么关系值得展示、如何计算、如何解释可信度”。
2. V0.2 目标
V0.2 要解决三个问题:
- 用户不只能从选手进入数据,也能从赛事进入数据。
- 用户能理解两个选手为什么有关联。
- 用户能区分“同属但不同时期”和“实际有时间重合/同场竞技”的关系强弱。
成功后的体验应是:
- 打开黑田朝日,可以看到同大学、同高中、同实业团、同台竞技相关选手。
- 打开第102回箱根駅伝,可以看到该届赛事、比赛单元、出场选手、成绩和来源。
- 打开青山学院大学,可以看到已收录选手和所属履历入口。
3. 页面范围
3.1 选手页增强
选手页继续作为核心页面。
V0.2 增强内容:
- 关系模块
- 关系按类型分组
- 关系强度说明
- 从关系跳转到相关选手、组织、赛事
关系模块初期不做复杂图谱,可用列表、分组、徽标、计数呈现。
建议分组:
- 同大学
- 同高中
- 同实业团
- 同台竞技
- 同赛事/同区间
每个关系项至少展示:
- 相关选手姓名
- 关系类型
- 关系说明
- 是否时间重合
- 同台竞技次数,若有
3.2 赛事页
V0.2 需要开始建设赛事页。
赛事页分两层:
-
赛事届次页
例如:第102回箱根駅伝、大阪マラソン2025、MARCH対抗戦2025。 -
比赛单元页
例如:第102回箱根駅伝 5区、男子10000m 最終4組。
V0.2 可先合并展示,不强制拆成两个独立页面。如果数据量较少,届次页内直接展示比赛单元和结果即可。
赛事页至少展示:
- 赛事名称
- 届次/年份
- 日期
- 比赛单元列表
- 成绩表
- 选手链接
- 所属组织
- 成绩、排名、备注
- 数据来源
- 数据状态
优先建设对象:
- 第102回箱根駅伝
- 第102回箱根駅伝 5区作为该届赛事内的优先比赛单元
- 第100回、第101回、第102回箱根駅伝中黑田朝日出场区间
- 已入库的 MARCH対抗戦2025、大阪マラソン2025、兵庫リレーカーニバル、出雲駅伝第35回 2区
3.3 组织页
组织页不是 V0.2 的主战场,但建议开始做基础版本。
组织包括:
- 高中
- 大学
- 实业团
组织页至少展示:
- 组织名称
- 组织类型
- 所在地,若有
- 已收录相关选手
- 当前所属选手
- 曾经所属选手
- 从该组织关联出去的赛事结果
组织页的价值是支撑关系浏览,例如:
- 青山学院大学有哪些已收录选手
- 玉野光南高校关联了哪些选手
- GMO 目前有哪些选手
3.4 关系入口/关系模块
关系未来可以成为独立入口,而不是永远附属于选手页。V0.2 的实现可以先放在选手页里,但产品定位上应视为“关系入口的初版验证”。
初版可以先做在选手页内:
/{locale}/players/[slug]中加入关系区块
后续再扩展为:
/{locale}/players/[slug]/relations/{locale}/relations
V0.2 关系先在查询时计算,并在相关选手后展示关系标签。后续是否需要预计算、缓存、独立关系入口或其他形态,等数据量和使用场景明确后再决定。
4. 关系定义
4.1 同属关系
同属关系来源于 Membership。
同属类型:
- 同高中
- 同大学
- 同实业团
同属关系必须区分两种情况:
-
时间重合
两人在同一组织的所属时间有交集。 -
仅同源
两人都属于过同一组织,但所属时间没有交集或时间未知。
展示建议:
- 时间重合:关系强度更高,显示为“同時期”
- 不重合:显示为“同組織”
- 时间未知:显示为“時期未確認”
判断逻辑:
- 两段 Membership 都有 startDate/endDate 时,判断区间是否重叠。
- 当前所属 endDate 为空时,视为持续到现在。
- 只有年份时,可用年份判断弱重叠。
- 缺少时间时,不判定为重合,只标记为时间未确认。
4.2 同台竞技关系
同台竞技来源于 RaceResult。
定义:
两名选手在同一个 Race 中都有 RaceResult,视为同台竞技一次。
同台竞技可以分层:
- 同一 Race:最强,例如同一组 10000m、同一区间结果表。
- 同一 CompetitionEdition:中等,例如同一届箱根,但不同区间。
- 同一 Competition:较弱,例如都参加过箱根,但年份不同。
V0.2 优先展示同一 Race。
展示字段:
- 同台竞技次数
- 最近一次共同赛事
- 最相关赛事名称
- 是否同一区间/同一组
4.3 关系强度
关系强度不需要复杂算法,先用规则分级:
强关系:
- 同一组织且时间重合
- 同一 Race 同场竞技
- 同一队伍出战同一赛事届次
中关系:
- 同一组织但时间不重合
- 同一 CompetitionEdition 但不同 Race
弱关系:
- 同一 Competition 但不同年份
- 同一高中/大学但时间未知
V0.2 页面只需要把这个解释清楚,不需要给出分数。
5. 数据范围
V0.2 的数据目标应保持克制。
优先级:
- 已入库选手相关赛事记录补成页面可用。
- 第102回箱根駅伝作为赛事页样本。
- 黑田朝日相关赛事作为第二批赛事样本。
- 资料状态达标选手的组织关系补齐。
V0.2 不追求:
- 全箱根所有区间
- 全三大駅伝历史
- 全大学选手
- 全赛事自动导入
数据策略:
- 能明确来源的结果进入正式展示。
- 只有媒体摘要但没有成绩细节的数据,可以进入待确认状态。
- 壳子选手可以存在,但不应混入核心展示模块。
6. 导航结构
V0.2 建议形成以下公开页面:
/[locale]/[locale]/players/[locale]/players/[slug]/[locale]/competitions/[locale]/competitions/[slug]/[locale]/competitions/[slug]/[editionSlug],若需要/[locale]/organizations/[locale]/organizations/[slug]
如果开发节奏要更碎,优先顺序是:
- 赛事详情页
- 选手页关系模块
- 组织详情页
- 赛事列表页
- 组织列表页
- 独立关系页
7. 非目标
V0.2 不做:
- 图数据库
- 复杂关系预计算
- 复杂关系图可视化
- 自动采集
- 社区投稿
- 用户账号
- 管理后台完整工作流
- 数据仓库
- 全量赛事库
这些仍然可以进入 V0.3 之后。
8. 开发拆分建议
V0.2.1 赛事详情样本
- 新增赛事届次详情页
- 展示第102回箱根駅伝
- 在届次页内展示比赛单元列表
- 优先展示 5区结果
- 可从结果跳转选手页
V0.2.2 选手关系模块
- 在选手页加入关系区块,作为未来关系入口的初版验证
- 支持同大学、同高中、同实业团
- 标记时间重合/不重合/未知
- 每个相关选手后展示关系标签
V0.2.3 同台竞技关系
- 基于 RaceResult 在线计算
- 展示同一 Race 的共同出场选手
- 展示同台竞技次数
V0.2.4 组织详情页
- 新增组织页
- 展示当前/历史所属选手
- 支持跳转选手
V0.2.5 导航收口
- 导航增加赛事/组织入口
- 关系入口策略稳定化
9. 待讨论问题
- 赛事页优先只做第102回箱根駅伝,还是同时兼容所有已入库比赛的通用详情?
- 组织页是否需要显示未确认壳子选手?
- 同台竞技是否只算同一 Race,还是也展示同一届赛事不同区间?
- 关系模块是否要显示“关系解释”,例如为什么判定为同時期?
- 关系数据未来是否需要预计算、缓存或其他存储形态,何时再决策?
10. 当前建议
当前最合理的下一步是:
先做第102回箱根駅伝赛事届次页,再把选手页关系模块接上。
原因:
- 第102回箱根駅伝可以作为赛事届次页样本,5区是其中优先展示的比赛单元。
- 它能自然验证 Race / RaceResult 页面结构。
- 它能反向支撑“同台竞技”关系。
- 它也是从黑田朝日向外 BFS 的合理起点。