1

私は現在、PHP と MySQL を使用して Web サイトを設計しています。サイトが進むにつれて、さまざまな変数を格納するために users テーブルに列をどんどん追加していることに気付きます。

この情報を保存するためのより良い方法はありますか? 明確にするために、情報はグローバルであり、他のユーザーの影響を受ける可能性があるため、Cookie は機能しません。また、Cookie をクリアすると情報が失われます。

私の質問の2番目の部分は、データベースに保存することが最善の方法であることが判明した場合、多数の列を持つか、関連する列を区切られた varchar 列に結合してからそれらを分解する方が安価でしょうか? PHPで?

ありがとう!

4

10 に答える 10

3

私の経験では、複数のアイテムを保持するカンマ区切りのフィールドを追加するよりも、データベースを正しく取得したいと考えています。コンマで区切られた複数のフィールドをふるいにかけなければならないことは、プログラムの効率とコードの読みやすさを損なうだけです。

また、テーブルが大きくなりすぎている場合は、外部依存関係によって結合された複数のテーブルに分割することを検討する必要がありますか?

于 2010-02-15T22:18:41.050 に答える
3

、、user_metaの 3 つの列を持つテーブルを作成します。user_idkeyvalue

于 2010-02-15T22:25:41.233 に答える
0

MySQL の代わりに、triplestore、またはキーと値のストア を使用することを検討してください。これにより、すべてのマルチスレッド マルチユーザー、パフォーマンス、およびキャッシング ブードゥーを把握するという利点が得られます。本当に保存したい値の種類。

欠点: アイダホ州で帽子を所有しているすべての人の平均給与を計算するには、もう少し費用がかかります。

于 2010-02-15T22:53:27.060 に答える
0

保存しているユーザー情報の種類によって異なります。そのセッション関連データの場合、セッション イベント ハンドラーと連携して php セッションを使用し、セッション データを db の単一のデータ フィールドに格納します。

于 2010-02-16T02:12:39.557 に答える
0

データベースは、たとえば巨大な画像ファイルではなく、変数である限り、そのようなデータを保存するのに最適な場所です。データベースには、大量のデータを格納および取得するための最適化と仕様がすべて備わっています。ファイル システム レベルで設定したものは、速度と機能の点で、データベースが既に持っているものよりも常に優れています。

多数の列を持つか、関連する列を区切られた varchar 列に結合してから PHP で展開する方が安価でしょうか?

メンテナンスの問題 IMOほどのパフォーマンスではありません。何百もの列を管理するのは楽しくありません。そのようなデータを、おそらくシリアライズされた d オブジェクトとしてフィールドに格納することは、実行可能なオプションです。ただし、そのデータに対してクエリを実行する必要がまったくないことが 100% 確実である場合に限ります。TEXT

user_variablesしかし、次のように正規化されたテーブルを使用しないのはなぜですか。

id  | user_id | variable_name | variable_value

?

クエリはもう少し複雑ですが、全体的に非常にクリーンなテーブル構造を提供します。この方法で、任意のユーザー変数を簡単に追加できます。

多くのクエリを実行している場合SELECT FROM USERS WHERE variable257 = 'green'は、特定の列に固執する必要がある場合があります。

于 2010-02-15T22:17:32.527 に答える
0

列をグループ化して分解するというオプションには行きません。それはだらしのない仕事であり、非常に手に負えないものです。代わりに、それらの列をいくつかのテーブルに分散させ、InnoDb のトランザクション機能を使用してみてください。

データベースを頻繁に更新するという考えが依然として嫌いで、この方法が達成しようとしていることに準拠している場合は、APC のキャッシュ機能を使用して、サーバー上に情報を「グローバルに」保存 (キャッシュ) することができます。

于 2010-02-15T22:19:27.983 に答える
0

MongoDB (およびその NoSQL いとこ) は、このようなものに最適です。

于 2010-02-15T22:22:27.003 に答える
0

データベースは間違いなく、データを保存するのに最適な場所です。(それ以外の場合は、フラットファイルに保存することを考えていたと思います)ファイルに保存するよりもDBを使用することで、パフォーマンスとセキュリティが確実に向上します。

データを複数の列に保存するか、それらを区切ることに関して...それは個人的な選択ですが、いくつかのことを考慮する必要があります

  1. アイテムを区切る場合は、それらを区切るものを考える必要があります (区切るテキスト内で発生する可能性が低いもの)。
  2. 同じレベルの別のプログラマーが、ほとんど助けを借りずにあなたが行ったことを理解できるかどうかを視覚化することが役立つことがよくあります。
  3. はい、Pekkaが言ったように、保存されたデータに対してクエリを実行したい場合は、別々の列を使用する必要があります
  4. いくつかのフィールドの情報が必要な場合は、毎回すべてのデータを取得して解析しないことで、パフォーマンスがわずかに向上する可能性があります

個別の列を使用することをお勧めします。これにより、将来的にはるかに柔軟なオプションが提供されるからです。そして、データ構造を大幅に変更し、情報をトラックに移行しなければならないことほど悪いことはありません!

于 2010-02-15T22:28:10.863 に答える