sql >> データベース >  >> RDS >> Oracle

テーブルのカスタムフィールドを格納するDBデザイン

    これは一般的な問題であり、完全な解決策はありません。いくつかの解決策:

    1。 タイプvarchar2のXフィールド、タイプ番号のYフィールド、およびタイプ日付のZフィールドを定義します。これは、カスタムフィールドの数の3倍になる可能性がありますが、変換の問題が発生することはもうありません。

    あなたの例は次のようになります:

    Id Name field_char1  field2_char2 field_char3 ... field_num1 field_num2 ...
    1  lap1 lappy        lappy        lappy       ... 12         13     
    2  lap2 lappy2       lappy2       lapp2       ... 13         12
    

    あなたの例では、両方の行に同じ数の数値と文字値がありますが、このようにする必要はありません。たとえば、3番目の行に数値フィールドを含めることはできません。

    2。 タイプvarchar2のXフィールドを定義し、全単射関数を適用して数値または日付フィールドを格納します(たとえば、日付はYYYYMMDDHH24missとして格納できます。 )。行のコンテキストを定義する追加のフィールドも必要になります。 to_numberを適用します またはto_char 行が適切なタイプの場合にのみ機能します。

    あなたの例:

    Id Name context field1  field2 field3  field4 field5
    1  lap1 type A  lappy   lappy  12      13     lappy
    2  lap2 type B  lappy2  13     lappy2  lapp2  12
    

    DECODEまたはCASEを使用してテーブルをクエリできます:

    SELECT * 
      FROM laptop
     WHERE CASE WHEN context = 'TYPE A' THEN to_number(field3) END = 12
    

    2番目の設計は、(とりわけ)OracleFinancialsERPで使用されている設計です。コンテキストを使用すると、この設計でCHECK制約を定義できます(たとえば、CHECK (CASE WHEN context = 'TYPE A' THEN to_number(field3) > 0 )整合性を確保するため。



    1. 戻り値を使用したスト​​アドプロシージャの呼び出し

    2. WHERE句でmysqlconcat()を使用していますか?

    3. Tap and Park:駐車場アプリのデータモデル

    4. 2つのテーブルから3番目のテーブルを作成します