有一个我希望解决的极端案例。

我们运行了一份运动报告,其中记录了其他一些统计数据(包括其他联盟/名册上的对手)的得分得分结果。我的意思是,在某些情况下,Foo对手在我们的系统中没有名册(他们永远也不会)。

所有者不是简单地忽略对手球队的任何统计数据,而是很久以前就要求我们内置一个选项,以允许输入球员名称(与从现有球员名单的球员名称下拉列表中选择[playerID]相对)。因此,我们的名册表具有一个int playerID PK列,但是我们的统计表(进攻与防守)具有varchar playerID列。

这使我们能够在名册表上进行外部联接,并获取匹配记录(无论是否存在队名册)(如果不存在,我们只需打印出varchar stat表的玩家ID作为玩家的名字)。当然可以砍死,但是能干。

现在,我在结果表上的状态表上有一个FK,因此,如果删除了游戏结果,则相关的统计信息也将消失。但是,我们缺少一个重要的约束条件:名册>>统计信息。由于玩家ID列类型不匹配,因此我无法添加需要填补限制空白的FK(即,从花名册中删除玩家,并且他/她的所有统计信息都将变为孤立状态,不好)。

有关如何解决此问题的任何想法?

最佳答案

我的经验是,这是开发人员遇到的一个问题,但是在实践中通常不会出现太多问题。

删除播放器是实际用例吗?用户是否要回头看游戏而不看到“历史”玩家名称?

我建议进行两项更改:


将播放器标记为非活动状态,然后可以通过某种方式显示它们
不活动标志的名称,而不是删除。
将StatsPlayerName列添加到stats表,然后将所有“文本”播放器名称从playerID列移入该表。然后,一个统计信息应具有玩家ID或StatPlayerName。现在,您可以进行联接,如果RosterPlayerName为null,则显示StatsPlayerName。这将使您在playerID上添加外键约束。

关于mysql - MySQL::边缘案例::混合类型外键::可能还是梦想?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6162906/

10-13 01:38