2010-04-27 51 views
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. 我需要在我的數據庫表中拆分namefirstnamelastName嗎?

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; 

回答

2

有關數據類型的幾點建議/意見。

結果 - 這是一個時間,你可能想在這段時間做一些計算,因此你應該把它作爲時間類型來存儲。

RaceNumber - 這是一個參考,雖然它是一個數字,但您將不對這個數字進行計算。所以你應該把它作爲一個varchar而不是一個int來存儲。這將避免混淆它的使用,並避免意外操縱它作爲一個數字。

名稱 - 查看允許名稱的字符串長度。小心限制這個值。未來某些名稱可能會有16個字符太小。

地方 - 這是需要存儲?你能根據他們的成績單獨計算一個跑步者的位置嗎?但是,你應該爲你的桌子保留一個好的主鍵。

+0

+1,但我可能會將'RaceNumber'存儲爲'CHAR(4)NOT NULL CHARSET latin1'。 – newtover 2010-04-27 08:58:22

1

在回答您的具體問題:

結果:我會的結果正好被設置爲秒的整數倍。我的意見是數據應該存儲在數據庫中,而不是格式化。由於你想要做的事情可能會按照它排序並返回小於或大於特定值的行,所以對我來說整數看起來更好。

比賽編號:相同的比賽編號。如果它始終是數字,則使用整數並擔心應用程序中的格式。如果它可以是非數字的,那麼通過所有的手段使它變成varchar,但是對於一個數值,我看不到足夠的收益。

獨特的關鍵:我並沒有真正看到在比賽號和ID上擁有唯一索引的觀點。根據定義,ID作爲主鍵已經是唯一的。也許你的意思是比賽號碼和地點,儘管如果兩個人爲一個地方進行抽籤,那麼這樣做也是有風險的。

拆分名稱:如果您打算將它們視爲單個值,那麼是的。否則不。換句話說,避免像where fullname like 'Mike %'這樣的事情。

1

對於名稱,如果您想要在lastname上進行排序,而將其顯示爲「firstname lastname」,則需要使用單獨的列。

一般來說:想想你想要做什麼與數據。將格式留給顯示數據的應用程序。避免出現需要字符串操作或複雜數學來獲取所需值的情況。