-- 团体项目的「队伍」:同一个单位在同一组别可以派多个队参赛(例如羽毛球双打,一个单位两个队, -- 名次可能出现「一个单位两个队各占一个名次」)。队伍的成绩、名次、积分各自记,最后都算到同一个 -- 单位的总分上(两条报名各拿各的分,单位总分自然就是两队相加)。 -- -- 为什么加一列而不是新建「队伍单位」:那样榜单会多出单位、分数也归不到原单位头上。队伍只是 -- 「这个单位在这一组别里的第几支队」,本质仍是同一个单位的报名。 -- -- squad 是**自由文本**(一队 / 二队 / 青年队 都能写),空串 = 不区分队伍 —— 这是老数据与 -- 单队单位的默认值,行为与升级前完全一致。 -- -- 只对**纯团体报名**(athlete_id IS NULL)放开:带运动员的报名仍按 (组别, 单位, 运动员) 唯一, -- 同一个运动员不会因为这次改动而在同一组别报两次。 ALTER TABLE entries ADD COLUMN squad TEXT NOT NULL DEFAULT ''; -- 老的唯一索引只看 (组别, 单位),一个单位在一个组别只能有一条团体报名 —— 正是它拦住第二个队。 -- 换成带上 squad 的版本:squad 为空的老数据在新索引下仍然「一个单位一条」,等价。 DROP INDEX IF EXISTS idx_entries_team_unique; CREATE UNIQUE INDEX IF NOT EXISTS idx_entries_team_squad_unique ON entries(category_id, team_id, squad) WHERE athlete_id IS NULL;