1

Web サイトの多数のユーザー設定を保存するための最善の戦術は何かと考えています。デフォルトのタイムゾーン、デフォルトのテキストサイズなどのデフォルト値がほとんどです。設定ごとに個別の列を作成するのは実用的ではないようです。現在考えられる唯一の方法は、テーブルに設定用の単一の列を追加しusers、そこにすべての設定を入れることです。

たとえば、次のような書式設定を 1 つの列でのみ使用できますtimezone:GMT;text_size:12;default_value1:something;default_value2:FALSE。次に、PHP でそれを取得するときに、ログインしているユーザーに対してこの列を選択し、結果に対してエクスプロージョンを実行して、$_SESSION['settings']['setting_key'] = "setting_value" を設定します。

これを行うためのよりスマートな方法はありますか、それとも私はすでに正しい方向に進んでいますか? これの唯一の欠点は、もちろん、すべてがまとめられているため、特定の設定ごとに検索できないことです。

4

2 に答える 2

4

私見は、シリアライズが完全に意図されているものです。

検索可能にしたい場合は、最終的にそれらを分割することをお勧めします。一方、まったく異なるアプローチを取りたい場合は、列ごとに設定して大きなテーブルに格納する代わりに、次のようなテーブルを作成できます。

CREATE TABLE settings (user_id INT, setting VARCHAR, value VARCHAR)

そのような設定を保存します。その後、列の追加/削除による制限はありません。

別のアプローチ (可能な設定ルックアップをさらに高速化するため) は、複数のテーブルを作成することです。

CREATE TABLE settings (id INT, setting VARCHAR)
CREATE TABLE settings_values (user_id INT, setting_id INT, value VARCHAR)

それsetting_idが外部キーであると見なし、両方の例で が外部キーであるユーザー ID を持つテーブルsettings.idがあると仮定します。usersuser_id

于 2012-10-25T01:15:12.747 に答える
2

私は「好みごとの列」オプションを選びます。結局のところ、プログラムは設定を保存してから取得する必要があるため、プログラムが処理方法を知らない設定が浮かんでいるわけではありません。

私が書いて維持しているデータベースプログラムに同様のシステムがあり、画面ごとにユーザーごとにおそらく10の設定が保存されています。これに基づいて保管すると、複雑さが軽減されます。

いくつのプリファレンスを保存しようと考えていましたか? それが10以上になるとは思えません。

すべての設定を一度に取得し一度に保存する場合は、連結された文字列のアプローチを使用できますが、通常はこれをお勧めしません。個人ベース。

于 2012-10-25T06:33:11.023 に答える