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. とのracenumberint(11)varchar(11)、どちらが良いですか?

  3. 自分のやり方で使えます UNIQUE KEYか?

  4. DBテーブルに分割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;
4

3 に答える 3

2

データ型に関するいくつかのアドバイス/意見。

結果-これは時間です。この時間にいくつかの計算を実行する必要がある場合があるため、時間タイプとして保存する必要があります。

RaceNumber-これは参照です。これは数値ですが、この数値に対して計算を実行することはありません。したがって、intではなくvarcharとして格納する必要があります。これにより、その使用法に関する混乱を回避し、誤って数値として操作することを回避できます。

名前-名前に許可する文字列の長さを確認します。この値を大幅に制限することに注意してください。将来、16文字は一部の名前には小さすぎる可能性があります。

場所-これは必要なストレージですか?結果だけに基づいてランナーの場所を計算できますか?ただし、テーブルには適切な主キーを保持する必要があります。

于 2010-04-27T08:36:23.763 に答える
1

あなたの特定の質問に答えて:

結果:結果を整数の秒数に設定します。私の意見では、データはフォーマットではなくデータベースに保存する必要があります。これでやりたいと思う可能性のあることは、それによってソートされ、その特定の値よりも小さいまたは大きい行を返すことなので、整数の方が私には良いようです。

レース番号:レース番号も同じです。常に数値になる場合は、整数を使用し、アプリケーションのフォーマットについて心配してください。それが非数値である可能性がある場合は、必ずvarcharにしますが、数値の場合、そうすることで十分な利益を得ることができません。

一意のキー:レース番号とIDに一意のインデックスを付けることの意味はよくわかりません。IDは、定義上、主キーとしてすでに一意です。おそらくあなたはレース番号と場所を意味していましたが、それでも2人が場所を引き寄せる場合には危険です。

分割名:それらを個別の値として扱う場合は、そうです。それ以外の場合はありません。言い換えれば、のようなものは避けてくださいwhere fullname like 'Mike %'

于 2010-04-27T08:38:28.153 に答える
1

名前については、「firstname lastname」として表示しているときに姓で並べ替える場合は、別の列を使用する必要があります。

一般的には、データをどのように処理するかを考えてください。データを表示しているアプリケーションにフォーマットを任せます。必要な値を取得するために文字列操作や複雑な計算が必要な状況は避けてください。

于 2010-04-27T08:53:01.367 に答える