私は投票する機能 (+1/-1) を備えたアプリを開発しており、このためのシンプルで高速な mysql テーブル構造を持たせようとしています。これまでのところ、私の考えは簡単で、次のようなものにすることでした:
tbl_votes特定のオブジェクトの投票値を格納します。
CREATE TABLE IF NOT EXISTS `tbl_votes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`vote` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
tbl_votes_ips IP<=>投票履歴を保存して、特定の IP が 1 回だけ投票できるようにします。
CREATE TABLE IF NOT EXISTS `tbl_votes_ips` (
`vote` int(11) NOT NULL,
`ip` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
目的は、新しい値を挿入するときの SQL 呼び出しを減らすことです。目的は、負荷の高い Web サイトで使用することです。そのような機能のベストプラクティスは何ですか?
あなたの経験を共有してください。
PS私はvote-ipペアの一意のキーを作成するという考えを持っているので、選択せずにmysqlの「一意の値ではない」エラーを処理するだけです:
ALTER TABLE `tbl_votes_ips` ADD UNIQUE (
`vote` ,
`ip`
);
ただし、ユーザーが選択を変更している場合は機能しません。とにかく、IP を検索して投票するために追加の呼び出しを行う必要があります。