【问题标题】:Need some tips on create table需要一些关于创建表的提示
【发布时间】:2011-02-12 18:25:18
【问题描述】:

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

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. 对于racenumber,在int(11)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;

【问题讨论】:

    标签: mysql sql database-design create-table


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • +1,但我可能会将RaceNumber 存储为CHAR(4) NOT NULL CHARSET latin1
    【解决方案2】:

    回答您的具体问题:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 2013-07-24
        • 1970-01-01
        • 2021-06-15
        • 1970-01-01
        • 1970-01-01
        • 2014-01-19
        相关资源
        最近更新 更多