0

我计划创建一个表来存储比赛结果,如下所示:

Place    RaceNumber       Gender      Name              Result    
12       0112              Male     Mike Lee            1:32:40 
16       0117              Female   Rose Mary           2:20:40 

我对项目类型定义感到困惑。

  1. 我不确定result可以设置为varchar(32)还是其他类型?

  2. and for racenumber, between int(11)and varchar(11),哪个更好?

  3. 我可以 UNIQUE KEY像我一样使用吗?

  4. 我需要拆分name到我firstnamelastName数据库表中吗?

DROP TABLE IF EXISTS `race_result`;
CREATE TABLE IF NOT EXISTS `race_result` (
  `id` int(11) NOT NULL auto_increment,
  `place` int(11) NOT NULL,
  `racenumber` int(11) NOT NULL,
  `gender` enum('male','female') NOT NULL,
  `name` varchar(16) NOT NULL,
  `result` varchar(32) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `racenumber` (`racenumber`,`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
4

3 回答 3

2

关于数据类型的一些建议/意见。

结果- 这是一个时间,您可能想对这个时间进行一些计算,因此您应该将其存储为时间类型。

RaceNumber - 这是一个参考,虽然它是一个数字,但您不会对该数字执行任何计算。因此,您应该将其存储为 varchar 而不是 int。这将避免对其用法的混淆,并避免将其作为数字意外操作。

名称- 查看名称允许的字符串长度。小心限制这个值。16 个字符对于将来的某些名称来说可能太小了。

地点- 这是必需的存储空间吗?你能仅根据他们的成绩来计算跑步者的位置吗?但是,您应该为您的表保留一个好的主键。

于 2010-04-27T08:36:23.763 回答
1

对于名称,如果您想对姓氏进行排序,而您将其显示为“名字姓氏”,那么您将需要使用单独的列。

一般来说:想想你想对数据做什么。将格式留给显示数据的应用程序。避免需要字符串操作或复杂数学才能获得所需值的情况。

于 2010-04-27T08:53:01.367 回答
1

在回答您的具体问题时:

结果:我只是将结果设置为整数秒。我的观点是数据应该存储在数据库中,而不是格式化。由于您可能想要做的事情是按它排序并返回小于或大于它的特定值的行,所以整数对我来说似乎更好。

比赛号码:比赛号码相同。如果它总是数字,请使用整数并担心应用程序中的格式。如果它可以是非数字的,那么一定要把它变成 varchar 但是,对于一个数值,我看不到足够的收益。

唯一键:我真的不明白在比赛编号和 ID 上设置唯一索引有什么意义。根据定义,ID 作为主键已经是唯一的。也许您的意思是比赛编号和位置,尽管如果两个人为一个位置抽签,即使这样也是有风险的。

拆分名称:如果您要将它们视为单独的值,那么可以。否则没有。换句话说,避免像where fullname like 'Mike %'.

于 2010-04-27T08:38:28.153 回答