0

私たちのアプリケーションには多くの構成ディレクティブがあります。「複数の言語が有効になっていますか?」など。または「どのCSSテンプレートを使用する必要がありますか?」または「1ページにいくつのアイテムを表示する必要がありますか?」

構成ディレクティブをDBに保存する必要があります。現在、構成の「領域」ごとにテーブルがあり、テーブルには列の値を含む行が1つだけあります。このアプローチにより、値に制約を課すことができます(ENUM、INT、VARCHARなど)。ただし、新しい構成ディレクティブを追加する必要がある場合は、巨大なPITAであり、DBスキーマを更新して再デプロイする必要があります。また、多くのsetup_something表で表スペースを汚染します。

私のアイデアは、テーブルをMySQLベースのKey-Valueストアに置き換えることでした(構成オプションがほとんどない共有ホスティングを使用しているため、NoSQLは使用できません)。一部の値はロケールまたは他の変数に依存する場合がありますが、フォールバックのようなもので解決できると思います(「lang:fr」で始まるキーを見つけ、見つからない場合は「lang:default」で始まるキーを試してください(常に準備してください)。

制約は、具体的なセットアップクラスを使用するPHPでのみチェックされますが、DBチェックはありません。

  1. これに対する既製のソリューションはありますか(Zend Frameworkでうまく機能することが望ましい)。
  2. このソリューションの落とし穴は何ですか(「行」全体を一度にフェッチできないこと、または一度に多数の行をフェッチできないことは明らかですが、これは問題ではありません)
  3. [使用したことがありますか|使用しますか]同様のソリューションまたはまったく異なるものですか?
4

3 に答える 3

2

すべての構成設定を含む1つのMySQLテーブルを作成するだけで済みます。おそらくこのようなもの:

config_id (INT autoincrement)
config_group (VARCHAR) this gives you something to group your configuration setting with
config_key (VARCHAR) this would be the key name by which you would reference the value
data_type (VARCHAR) you can use this to tell your application how you want to treat this data within the application (i.e. treat it as integer, float, string, etc.)
value (VARCHAR) the value

もちろん、文字列値を取得してコード内で操作し、整数、浮動小数点、文字列などのように扱う必要があります。

物事を行うための最もクリーンな方法に注意するかもしれませんが、このアプローチが何度も行われているのを見てきました。

于 2012-08-01T14:43:53.480 に答える
2

Wordpressシステム(もちろんMySQLを使用)にはwp_optionsテーブルがあります。次の列が含まれています。

 option_id    (autoincrement pk)
 blog_id      (parameter grouping number)
 option_name  (text of option name)
 option_value (text of option value)
 autoload     ('yes' or 'no')

option_valueは、必要に応じて単純な数値(0、1、42)またはテキスト文字列のいずれかになります。一部のoption_valueアイテムは、解析可能なJSONのようなシリアル化されたパラメーターセットです。

自動ロード列を使用すると、システムは必要に応じてほとんど使用されていない設定をスキップできます。

これは非常にうまく機能し、多くの柔軟性を提供します。

于 2012-08-01T14:49:33.987 に答える
0

キー/値をphp配列に格納し、シリアル化してから、結果の文字列をデータベーステーブルのテキスト列に格納します。柔軟性が高く、実装が簡単です。唯一の本当の欠点は、個々の属性を照会できないことです。

于 2012-08-01T14:57:17.200 に答える