データベースには約 50 の製品タイプがありPostgreSQL 9.2.3
ます。
割り切れるものもあれば、割り切れないものもあります。
物事をより複雑にしているのは"volume"
、製品ごとに異なる精度を持つ必要があることです。
Product type 1: allowed 8 decimal places.
Product type 2: only integer values.
Product type 3: 2 decimal places
Product type 4: 2 decimal places
Product type 5: 3 ---- || ------
Product type 6: 4 ---- || ------
Product type 7: 16 ---- || -----
Product type 8: integer values
Product type 9: 4 decimal places
Product type 10: 5 decimal places
Product type 11: 12 decimal places
また"orders"
、ほぼすべての列 (ユーザー、契約者、注文日、配送料など) が同じである、すべての製品用のテーブルもあります。唯一の例外は"volume"
列です。
どのデータ型を使用すればよいですか?
すべての製品タイプにフィールドを使用"numeric"
し、製品タイプごとに精度に関する情報を保存し、「注文記録」ビューの値を必要な精度に変換することを考えましたが、データの一貫性が失われることはありませんか?
このソリューションでは、たとえば「製品タイプ 8」の整数値が整数であるかどうかを確認する方法はありません。整数として表示するだけです。:(
もう 1 つの方法は、データ タイプごとに 1 つの列を作成することです。:(
...そして別の解決策は、次のようにテーブル継承を使用することです。
orders <- volume is integer
orders_product_1 (inherits orders) <- volume is numeric(24,8)
orders_product_2 (inherits orders) <- volume is integer
orders_product_3 (inherits orders) <- volume is numeric(20,2)
...しかし、約 20 の継承されたテーブルを作成することは、内容よりも形式の勝利のように思えます...
最善の解決策は何ですか?たぶん、問題を解決する別の方法がありますか?