1

顧客テーブルのユーザー定義フィールドをサポートするアプリケーションがあり、すでに次のようなものがあります。

CustomFields table

    Id            Name                  DataType
    --------------------------------------------
    1             Hobbies               1
    2             Number of Siblings    3

上の表は、アプリケーション全体で使用される UDF を含む表を示しています。DataType 列の値は、次のように変換されます。

1: string
2: DateTime
3: Integer

次の表は、UDF の値で構成されています。

CustomFieldsValues table

CustomerId      FieldId     StringValue       NumericValue      DateValue
1234            1           Fishing           NULL              NULL           
1234            2           NULL              6                 NULL
8834            1           Golfing           NULL              NULL           
8834            2           NULL              2                 NULL 

ここで、新しい「DataType」を紹介したいと思います。

4: DropDownList

これは基本的にstringデータ型に似ていますが、テキスト ボックスをレンダリングする代わりに、管理者が値を追加するドロップダウン リストを使用する点が異なります。

現時点で考えられるのは、別のテーブルを用意することです

FieldDropDownList table

FieldId         DropDownItem
1               Fishing
1               Golf
1               Swimming  
2               Random value #1
2               Random value #2
3               Random value #3

また、データ タイプ 4 のすべてのカスタム フィールドの値は、テーブルのStringValue列に保存されます。CustomFieldsValues

私がすべき提案や考慮事項はありますか?

ドロップダウンリスト UDF を実装する最も効率的な方法は何ですか?

4

1 に答える 1

0

何か提案や考慮すべき点はありますか?

はい。最初からやり直して、DBMSに作業を任せましょう!そのDataType列は、何かがおかしいという警告ベルです。DBMSは、型、型の安全性、および型変換を提供します。

CustomIntFieldsUDFを、、、CustomStrFieldsおよびに分割しますCustomDateFieldsUNION必要に応じて、 :を使用して、それらを単一のビューとして表すことができます。

create view CustomFields as 
select 's' as type, FieldID, Name from CustomStrFields UNION
select 'i' as type, FieldID, Name from CustomIntFields UNION
select 'd' as type, FieldID, Name from CustomDateFields;

手始めに、DBMSがあなたに代わって日付に日付があり、整数に数字があることを確認できるようにします。

DropDownsテーブルは

create table DropDowns
  ( DropDownID int  -- indicating the widget
  , type char(1) 
  , FieldID int
  );

3つのUDFテーブルの和集合を参照します。

この設計では、ドロップダウンに自動的に表示されることなくフィールドを追加できますが、これは希望どおりでない場合があります。すべてのフィールドが1つの特定のドロップダウンにのみ表示されることになっている場合、ドロップダウンIDを3つのフィールドテーブルに追加し、すべてをビューから駆動することができます。

最も効率的な方法は何でしょうか

このようなものはすべて非常に静的で小さいです。効率が問題になるとは思えません。しかし、DBMSを意図したとおりに使用することで、プログラマーと顧客満足度が向上すると思います。:-)

于 2013-03-14T05:15:04.787 に答える