0

こんにちは、複数のカテゴリの記事、画像、コメントに使用される評価テーブルを備えた php 投票スクリプトがあります。

ログインしたユーザーのみが、それを好きまたは嫌いとして評価できます

と評価したユーザーを保存するには、このように長いテキストで保存するのが最善の方法です

54654,5145463,19993,3215,69445 

または、rate_id と user_id をリンクする新しいテーブルを作成する

スクリプトとmysqlのパフォーマンスへの影響は何ですか

rate_id     int(11) unsigned    NO  PRI     NULL    auto_increment
rate_for_id     int(11) unsigned    NO NULL      
rate_for    enum('article','image','comment')   NO NULL      
liked_it    int(5) unsigned     NO NULL      
disliked_it     int(5) unsigned     NO NULL      
users_rated     longtext    NO      NULL    
4

2 に答える 2

2

必ず別のテーブルにします。複数の値を 1 つのフィールドに格納することは、ほとんどの場合、設計として不適切であり、後で処理するのが難しくなります。たとえば、誰かがすでに投票したかどうかを確認するには、「オールインワン」フィールドで部分文字列検索を行う必要があります。別の user_votes テーブルを使用する場合は、レコードが存在するかどうかを確認するだけです。

パフォーマンス ヒットは量的に難しいです。これは非常に状況に依存し、ハードウェア/ソフトウェアに依存します。両方の方法を試して、どちらがあなたの場合に適しているかを確認してください。ただし、別のテーブル オプションが勝つと思います。

于 2011-05-30T15:35:39.263 に答える
2

同じフィールドに複数の値を格納する際の問題は、データベースが非正規化され、データの抽出が難しくなることです。たとえば、特定の like_it の ID を持つレコードを選択する必要がある場合 (たとえば、この ID が気に入ったすべてのトピックを取得する場合)、他の多くの値が混在しているため、実際には取得できません。

したがって、データベースを正規化するために、データベースを別のテーブルに分割することを強くお勧めします。そうすれば、後で必要になったときにデータをより簡単に抽出できます。それがリレーショナルデータベースのポイントです。

于 2011-05-30T15:37:56.820 に答える