2009-03-20 8 views
2

ページを閲覧したり、曲をストリーミングしたり、ダウンロードしたりしたユーザIDのリストを保存する必要があります。私がリストを使って行うことは、それを追加して表示することです。それより多くの情報を保存する必要はありません。私は2つの解決策を考え出しました。どちらが優れている、または私は逃したより良い解決策があります:ユーザIDのリストをmysqlテーブルに保存する

  1. KISSソリューション - (表示、ダウンロード、上記の3つの相互作用のそれぞれの主キー楽曲IDとテキストフィールドを持つ1台、ストリーム)には、ユーザーIDのカンマ区切りリストがあります。これに追加するのは単なる連結操作になります。

  2. "ベストプラクティス"の解決策 - ソングIDと、対話を行ったユーザーIDのフィールドのプライマリキーを持つ3つのテーブルがあります。各行には1つのユーザーIDがあり、日付などのものを追加できます。

私がオプション2に傾倒させる1つのことは、ユーザーがすでに曲に投票したかどうかを確認する方が簡単かもしれないということですか?


TL; DRバージョン - それは、カンマ区切り値として配列を保存、または別のテーブルの行のアレイ内の各項目を有するようにテキストフィールドを使用した方がよいです。

答えて

6

間違いなく第二:

  • あなたは、あなたがより速く、よりクリーンなクエリを作成することができるでしょう、それは
  • を大きくなるにつれてそれが
  • 依存以下のプログラミング言語になり、アプリケーションを拡張することができるでしょう
  • それは、他のプログラマのコーディング/デバッグアプリケーション後で
にはあまり痛みを伴うことになります

さらに、IDを持つ「操作」という新しいテーブルを追加して、後で必要に応じて異なる操作を追加して、各行に文字列の代わりに操作IDを格納することもできます(「表示」、 "ストリーム")。

+0

私はいつもどんなに速いのですか?私はいつも驚いています。私は良い答えを得ることができます...ありがとう、おそらくそれをします。ストアドプロシージャを使用して、操作テーブルのすべてのオーバーヘッドを処理するか、コード内で行うことをお勧めしますか? – Mikle

+0

これはもっと主観的な答えです。私は個人的にストアドプロシージャが好きですが、決してそれらを使用しません。どうして?私はSQLでのコーディングが気に入らないので、それだけです。しかし、私は、強力なDBは、外国キー、制約、CRUDロジックなど、可能な限り、その中にすべてのロジックを持たなければならないと信じています。 – Seb

+0

私はストアドプロシージャなしで行くだろう。アプリケーションが大きくなり、誰かがデータベースエンジンを変更することにしたらどうなるでしょうか?ストアドプロシージャは完全に移植可能ですか?また、クラスメソッド内で何が起きているのかを見ることがよりわかりやすいです。また、2:私はSQLでコーディングが好きな人には会っていませんでした。 –

2

各項目を別々の行に入れることは間違いありません。テキストフィールドを操作すること自体にパフォーマンス上の欠点があります。しかし、これまでの場合は、ユーザ1234への/ etc耳を傾け/閲覧た曲を知りたい。あなたはそれは、ただ恐ろしく恐ろしく痛いだろう

SELECT * FROM songactions WHERE userlist LIKE '%,1234,%' OR userlist LIKE '1234,%' OR userlist LIKE '%,1234' OR userlist='1234'; 

ような何かをしなければならないと思います。

+0

私は実際にコードでこれを操作しますが。しかし、選択は少し悪いように見えます:) – Mikle