Question

Je prévois de créer une table pour stocker le résultat de la course comme ceci:

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

Je suis confus aux définitions de types d'éléments.

  1. Je ne sais pas le result peut être réglé sur varchar(32) ou un autre type?

  2. et racenumber, entre int(11) et varchar(11), ce qui est le meilleur?

  3. Puis-je utiliser UNIQUE KEY comme mon chemin?

  4. Dois-je besoin de scission name à firstname et lastName dans ma table DB?

    
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;
Était-ce utile?

La solution

Quelques conseils / avis concernant les types de données.

Résultat -. C'est un temps, vous pouvez faire des calculs sur cette fois-ci, vous devez donc enregistrer comme un type de temps

RaceNumber - Ceci est une référence, alors qu'il est un numéro, vous effectuerez pas de calculs sur ce nombre. Par conséquent, vous devez l'enregistrer comme varchar plutôt que d'un int. Cela évitera la confusion quant à son utilisation et éviter la manipulation accidentelle de celui-ci comme un nombre.

Nom - Regardez la longueur de la chaîne vous permet pour le nom. Soyez prudent de limiter cette valeur par tant. 16 caractères peuvent être trop petits pour certains noms à l'avenir.

Lieu - Est-ce stockage nécessaire? Pouvez-vous calculer le lieu d'un coureur en fonction de leur seul résultat? Cependant, vous devez garder une bonne clé primaire pour votre table.

Autres conseils

En réponse à vos questions spécifiques:

Résultat: Je voudrais simplement mettre le résultat à un nombre entier de secondes. Mon opinion est que les données doivent être stockées dans des bases de données, et non le formatage. Puisque les choses probables que vous allez vouloir faire avec ce genre est par elle et les lignes retour inférieur ou supérieur à des valeurs spécifiques de celui-ci, un entier me semble mieux.

Numéro de course: Idem pour le numéro de course. Si ça va toujours être numérique, utilisez un entier et l'inquiétude sur la mise en forme dans l'application. Si elle peut être alors non numérique par tous les moyens font VARCHAR mais, pour une valeur numérique, je ne vois pas assez de gain pour faire ainsi.

Clé unique: Je ne vois pas vraiment le point d'avoir un index unique sur le numéro de course et ID. ID est, par définition, déjà unique comme une clé primaire. Peut-être que vous vouliez dire le numéro de course et lieu bien même cela est risqué dans le cas de deux personnes de dessin pour une place.

Les noms de Split: Si vous allez jamais à les traiter comme des valeurs individuelles, alors oui. Sinon, non. En d'autres termes, éviter des choses comme where fullname like 'Mike %'.

Pour le nom, si jamais vous voulez trier lastname, alors que vous affichez comme « prenom nom », alors vous aurez besoin d'utiliser des colonnes séparées.

En général: pensez à ce que vous voulez faire avec les données. Laisser le formatage à l'application qui affiche les données. Évitez les situations où vous avez besoin de manipulation de chaîne ou de mathématiques compliquées pour obtenir les valeurs dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top