3

私は、購入したエディション、購入した追加機能などに応じて、各顧客の構成が異なるSaaSアプリケーションに取り組んでいます。たとえば、顧客のカスタムレポートは3つに制限されている場合があります。

明らかに、この構成をデータベースに保存したいのですが、最善の方法がわかりません。将来的には、データベーススキーマを変更せずに機能を追加できるようにしたいので、構成オプションごとに列を持つ単一のテーブルは意味がありません。

可能なオプションは、顧客ごとに1つのエントリがあり、その顧客の構成全体を含むXMLフィールドを持つテーブルですが、XMLスキーマが変更されて機能が追加されると、複雑さが増します。

キーと値のペアを持つテーブルを使用し、すべての構成設定を文字列として保存してから正しいデータ型に解析することもできますが、文字列構成オプション、整数構成オプション、等

人々が使用しているこのタイプのシナリオに適したパターンはありますか?

4

5 に答える 5

3

実際、ここで異なる構成を行う必要はないと思います。必要なのは、承認レベルと、ユーザーが支払っていない機能を表示しない適切なユーザー インターフェイスです。

このようなアプリケーションに適した承認データ モデルは、Role Based Access Control (RBAC) です。グーグルはあなたの友達です。

于 2008-10-11T19:52:08.013 に答える
2

なぜスキーマ変更をそんなに恐れるのですか? アプリケーションを変更すると、追加の構成データが必要になることは間違いありません。これには他のスキーマの変更が伴います。

スキーマの変更は、許容できるものであり、開発、テスト、およびリリース プロセスに組み込み、将来の設計変更に利用できるものです。

スキーマの変更が発生します。それに慣れる :)

于 2008-11-02T13:31:55.140 に答える
2

これは、製品が顧客にどのように販売されたかに依存すると思います。

パッケージだけで売ったら…

PACKAGE 1 -> 3 reports, date entry, some other stuff.
PACKAGE 2 -> 6 reports, more stuff
PACKAGE 3 -> 12 reports, almost all the stuff
UBER PACKAGE -> everything

これらのパッケージのテーブルをセットアップしてそれにリンクする方が簡単だと思います。

各モジュールをバリエーションで単体で販売すると...

Customer wants 4 reports a week with an additional report every other tuesday if it's a full moon.

それから私は-

Create a table with all the product features.
Create a link table for customers and the features they want.
In that link table add an additional field for modification if needed.

顧客

customer_id (pk)

モジュール

module_id (pk)
module_name (reports!)

CUSTOMER_MODULES

module_id (pk) (fk -> modules)
customer_id (pk) (fk -> customers)
customization (configuration file or somesuch?)

これは私にとって最も理にかなっています。

于 2008-10-01T23:22:43.437 に答える
2

データベースが SQL Server 2005 以降の場合、キー/値テーブルは値フィールドに SQLVARIANT データ型を使用できます。3 番目の列には、使用するためにキャストする必要があるデータ型を格納します。

そうすれば、さまざまなサイズの数字とテキスト値を文字通り同じフィールドに挿入できます。

于 2008-09-29T20:58:37.340 に答える
1

キーと値のペアのテーブルですが、すべてが文字列として格納され、値をキャストするタイプを示す別の列(必要な場合)が含まれます。

CREATE TABLE configKVP(clientId int, key varchar, value varchar, type varchar)

値を型にキャストできない場合は、構成が正しくなく、あいまいさがないことがわかります。

于 2008-09-29T11:33:00.803 に答える