Нужны советы по созданию таблицы - PullRequest
0 голосов
/ 27 апреля 2010

Я планирую создать таблицу для хранения результатов гонки следующим образом:

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 на firstname и lastName в моей таблице БД?

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;

Ответы [ 3 ]

2 голосов
/ 27 апреля 2010

Некоторые советы / мнения относительно типов данных.

Результат - это время, вы можете захотеть сделать некоторые расчеты для этого времени, поэтому вы должны сохранить его как тип времени.

RaceNumber - это ссылка, хотя это число, вы не будете выполнять никаких расчетов для этого числа.Поэтому вы должны хранить его как varchar, а не как int.Это позволит избежать путаницы в отношении его использования и избежать случайного манипулирования им как числом.

Имя - Посмотрите на длину строки, которую вы допускаете для Имени.Будьте осторожны с ограничением этого значения.16 символов могут быть слишком малы для некоторых имен в будущем.

Место - Требуется ли это хранилище?Можете ли вы рассчитать место бегуна, основываясь только на их результатах?Однако вы должны сохранить хороший первичный ключ для своей таблицы.

1 голос
/ 27 апреля 2010

Для имени, если вы когда-нибудь захотите отсортировать по фамилии, пока вы отображаете его как «имя, фамилия», вам нужно будет использовать отдельные столбцы.

В общем: подумайте, что вы хотите сделать с данными. Оставьте форматирование приложению, которое отображает данные. Избегайте ситуаций, когда вам нужны манипуляции со строками или сложная математика, чтобы получить нужные вам значения.

1 голос
/ 27 апреля 2010

В ответ на ваши конкретные вопросы:

Результат: я бы просто присвоил результат целому числу секунд. Мое мнение таково, что данные должны храниться в базах данных, а не форматироваться. Поскольку вероятные вещи, которые вы захотите сделать с этим, сортируются по ним и возвращают строки, которые меньше или превышают конкретные значения, мне кажется, что целое число лучше.

Номер гонки: То же самое для номера гонки. Если оно всегда будет числовым, используйте целое число и заботьтесь о форматировании в приложении. Если он может быть не числовым, то непременно сделайте его varchar, но для числового значения я не вижу достаточного выигрыша в его создании.

Уникальный ключ: я не вижу смысла в том, чтобы иметь уникальный индекс по номеру гонки и идентификатору. Идентификатор по определению уже уникален в качестве первичного ключа. Возможно, вы имели в виду номер гонки и место, хотя даже это рискованно в случае, если два человека выбирают место.

Разделение имен: если вы когда-нибудь будете рассматривать их как отдельные значения, тогда да. В противном случае нет. Другими словами, избегайте таких вещей, как where fullname like 'Mike %'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...