3

重複の可能性:
データベースの列にカンマ区切りのリストを保存するのは本当に悪いことですか?

これは、データベースを拡張しようとするときによく遭遇する問題です。

例えば:

Web サイトで特定の記事を見たユーザーの数を追跡したいので、データベースのテーブルにviewsフィールドを追加しました。さて、これらが独自のarticleビューであることを確認したい場合、これでは明らかに十分ではありません.

したがって、私の設計では、IP などと一緒に保存されている単一の番号でユーザー (または少なくともコンピューター) を識別できるとしましょう。

次に、特定の記事を何人のユニークユーザーが閲覧したかを追跡したい場合、どの方法が最適でしょうか?

  • article_viewsフィールドarticle_idと を含む別のテーブルを作成するにはuser_id
  • テーブルのフィールドuser_id内にコンマで区切られた s を保存します。viewsarticle
4

3 に答える 3

7

カンマ区切りのソリューションを決して選択しないでください。これは、データベース設計のすべての原則に違反しています。代わりに別のテーブルを作成してください。

特定のケースでは、PRIMARY KEY を (article_id, user_id) に設定してテーブルを作成します。データベースは重複レコードの入力を禁止します。SQL エンジンによっては、INSERT OR IGNORE (または同等のもの) を追加で使用して、例外のスローを回避できます。

もう 1 つのソリューションでは、データに触れるすべてのアプリケーションで一意性を強制する必要があります。

于 2012-11-06T22:15:52.153 に答える
2

コンマ区切りの値は使用しないでください。これまで。これらすべての Id を閲覧した記事にリンクする別のテーブルを作成します。

かなりシンプルなデザイン。これは、両方とも外部キーである 2 つの列を持つテーブルになります。1 つは article テーブルに、もう 1 つは user テーブルに。

于 2012-11-06T22:16:31.013 に答える
0

使用を検討しましたか

SELECT COUNT(DISTINCT User + IP) As UniqueViews FROM Views GROUP BY ArticleID

ビュー テーブルに、ユーザーと IP に対するこのレコードのような重複が含まれている場合 (つまり、1 日あたり 10 か何か)、COUTN(DISTINCT) は、レコードの数ではなく、それらの個別の発生をカウントします。

于 2012-11-07T03:40:21.063 に答える