【问题标题】:should the following sql query data normalization work?下面的 sql 查询数据规范化应该工作吗?
【发布时间】:2011-04-17 11:05:59
【问题描述】:
CREATE  TABLE IF NOT EXISTS `mydb`.`MATCHES` ( 
  `idMatch` INT NOT NULL , 
  `idChampionship` INT NOT NULL , 
  `idWinningTeam` INT NOT NULL ,
  `idWLoosingTeam` INT NOT NULL , 
  `date` TIMESTAMP NULL DEFAULT NULL , 
  `goalsWinningTeam` INT NULL DEFAULT -1 ,
  `goalsLoosingTeam` INT NULL DEFAULT -1 , 
  `played` CHAR NULL DEFAULT 'Y' , 
  PRIMARY KEY (`idMatch`) , 
  INDEX `ID_TEAM_X_CHAMP` (`idMatch` ASC) , 
  CONSTRAINT `ID_TEAM_X_CHAMP` 
  FOREIGN KEY (`idChampionship` , `idMatch` ) 
  REFERENCES `mydb`.`TEAMS_PER_CHAMPIONSHIP` (`idChampionship` , `idTeam` ) 
  ON DELETE NO ACTION 
  ON UPDATE NO ACTION) 
  ENGINE = InnoDB;

我正在尝试制作比赛表,但我不确定如何设置获胜和失败的球队,
两者都由 idTeam 提供(我可以为两者使用相同的外键吗?)我有一个 Team table a Championship
表和team_per_champsionship 表(用于索引)。

可用架构


非常感谢

【问题讨论】:

  • 您的表将遭受许多异常,例如当失败的球队打进一个或多个进球而获胜的球队得分 -1、零或NULL 进球时。还可以考虑将赛程(可以在赛前确定)和结果(只能在赛后确定)放在不同的表中,以删除可为空的列。
  • 你能帮忙吗?

标签: sql mysql normalization


【解决方案1】:

示例架构:

Team Table
----------
TeamID pk
rest of the team information

Championship Table
------------------
ChampID  pk
rest of the championship info

Match Table
-----------
MatchID pk
winningTeamID fk
losingTeamID fk
rest of the match info

ChampMatchTable
---------------
ChampId fk (dups)
MachID fk

您可以将 ChampID 放在匹配表中而没有 ChampMatchTable。

下面的原始答案

是的,您不能对两者使用相同的密钥。它们都是同一张桌子的钥匙,但它们是不同的(因为每个团队都不同。)

不清楚 idChamionship 键指向什么。这是一个描述匹配事件的表吗?

【讨论】:

  • 我应该 romve idChampionship 和 idmatch 应该是 primarykey 和 index,每个团队有 2 个外键,看起来怎么样?
  • 我认为(不确定)你只需要你所拥有的。 idwinningteam 指向获胜的团队,idloosingteam 指向失败的团队。 idmatch 应该保留...这是此表的关键。
  • 我认为问题在于数据设计而不是 sql 部分。让我写下我认为你在做什么......
  • Hogan 我知道你要去哪里,但我无法到达那里,你想看看整个模式 sript,我知道只是这张表有问题 大局将是一个数据库管理足球或足球或任何业余联赛
  • Ignacio -- 是的,如果您有更多信息可以让您的问题更加清晰,请务必将其发布到问题中
猜你喜欢
  • 2014-10-21
  • 2017-05-09
  • 2011-03-22
  • 2020-05-08
  • 2011-02-06
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
相关资源
最近更新 更多