2012-03-13 8 views

答えて

3

を格納するファイルの種類何 場合を「シリアライズ」として、すべての投票パーツを抽出するのに必要な文字列操作に続いて列インデックスを使用できなくすることができます。

回答ごとに1人のユーザーあたり1つの行を格納する正規化された表を作成します。個々の回答そのものが単一のデータポイントである場合、それはそれ自身の行として属します。

あなたがIPでユーザーを追跡している場合は、次のと同じことを達成するために

/* 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; 

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

プラス、これはあなたのような方法でデータを照会することができるという利点を提供しますシリアライズされた列の場合は、アプリケーションコードにクエリを実行し、区切り文字を解析して分析を実行する必要があります。アプリケーションコードで2番目の(count> = 3)を実装するには、ソート、グループ化、カウントなど、データベースが既に非常に優れていることを再実装する必要があります。

0

それぞれの個別の項目を独自の列として作成する必要があります。

これにより、個々の列にアクセスするのがずっと複雑になりません。クエリは複雑ではなく、一般的にMySQLの方が効率的です。

また、各列に異なるタイプと長さの要件を指定することもできます。たとえば、1つのInteger列と1つのCharacter列があり、それぞれに異なる記憶域要件とそのタイプへの影響があります。

整数列のようにIPアドレスを保存することをお勧めします。using the INET_ATON() and INET_NTOA() functions