5

各モジュールが他のモジュールから分離されたモジュラー システムを作成しています。モジュール構成データをデータベースに保存したいのですが、これに最適な構造がわかりません。

私はいくつかの変種を持っています:

1位:

key_____|______value (primary key is `key`)
option1 | 1
option2 | abcd
option3 | bla-bla-bla

設定は簡単に取得できますが、一部の設定を更新したい場合は、CASE を使用して難しい (?) SQL クエリを作成する必要があります。

UPDATE settings SET value = CASE
WHEN key = option1 THEN 1;
WHEN key = option2 THEN abcd;
…
END
WHERE key IN (option1, option2, …)

1 つのクエリで多くの行を更新するためのより良いバリアントがある場合 (MySQLi と InnoDB のみを使用します)、これは素晴らしいことです。

2番目:

module_____|_____settings
news       | a:3:{s:7:"option1";i:1;s:7:"option2";s:4:"abcd";s:7:"option3";s:11:"bla-bla-bla";}

このようにして、配列を設定でシリアル化し、データベースに配置します。シリアル化されていないデータを .php ファイルにキャッシュしたい。しかし、設定配列が大きい場合、シリアル化された文字列は非常に大きくなります。

3番目:

option1 | option2 | option3
   1    |   abcd  |bla-bla-bla

1 つのオプション キーに対して 1 つの列を作成しますが、1 つの行を格納するために 1 つのテーブルを作成するのは不必要だと思います。


どのバリアントが最適ですか? 構成を保存する独自の方法を提案できますか? ありがとうございました!

4

1 に答える 1

2

構成データをデータベースに保存することに設定されている場合は、常にオプション 1 を使用します。

システムの他の多くの部分に影響を与えることなく、構成値を簡単に追加および更新できます。値の更新の複雑さを少し考えすぎています。単一の更新ですべてをラップしようとするのではなく、キーごとに個別の更新を記述します。

update settings set value = 1 where key = option1;
update settings set value = 'abcd' where key = option2;

オプション 2 は 2 番目に近いかもしれませんが、シリアル化されたデータの 1 つの大きな文字列をデータベースに保存するのは本当に嫌いです。そのようにする場合は、代わりに構成ファイルに保存することを検討してください。

私は 3 番目のオプションを使用したプロジェクトにも取り組んできましたが、これは私の一番のお気に入りです。構成値を追加/削除するたびに列を追加/削除する必要があるのは、王様の苦痛です。

于 2012-12-19T16:27:24.480 に答える