2012-03-13 53 views

回答

3

將多個值存儲在一列中幾乎總是一個壞主意,因爲難以解析出值您需要並可以在提取零件所需的字符串操作後使列索引不可用。

製作一個標準化的表格,每個用戶每個答案存儲一行。如果個人答案本身就是一個單一的數據點,它就屬於自己的行。

如果你正在跟蹤用戶通過IP:

CREATE TABLE votes (
    voteid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    userip VARCHAR(15) NOT NULL, 
    answerid INT NOT NULL 
); 

此外,這給你的是能夠查詢在這樣的方式您的數據的好處:

/* Get vote count per user */ 
SELECT userip, COUNT(*) FROM votes GROUP BY userip; 

/* Get users who have voted 3 or more times */ 
SELECT userip FROM votes GROUP BY userip HAVING COUNT(*) >= 3; 

要完成同樣的事情一個序列化的列,您需要將其查詢到應用程序代碼中,解析出分隔符,然後執行分析。要在應用程序代碼中實現第二個(count> = 3),需要重新實現數據庫已經非常擅長的許多事情,例如排序,分組和計數。

0

您應該創建每個不同的項目作爲自己的列。

這使訪問各個列的複雜程度降低。除了通常對MySQL更高效之外,您的編寫查詢將不那麼複雜。

它還允許您爲每列指定不同的類型和長度要求。例如,您可能有一個Integer列和一個Character列,每個列都有不同的存儲需求和類型含義。

我建議存儲整數列中的IP地址,using the INET_ATON() and INET_NTOA() functions