4 つの列に複合主キーがあり、そのうちの 3 つは浮動小数点データ型であるテーブルがあれば、ベンダーのデータベース スキーマを確認しています。理由はわかりませんが、これには本当にショックを受けました。
この種の複合主キーを持つことの意味/利点は何ですか? おすすめですか?float は主キー フィールドとして危険だと思いました。
4 つの列に複合主キーがあり、そのうちの 3 つは浮動小数点データ型であるテーブルがあれば、ベンダーのデータベース スキーマを確認しています。理由はわかりませんが、これには本当にショックを受けました。
この種の複合主キーを持つことの意味/利点は何ですか? おすすめですか?float は主キー フィールドとして危険だと思いました。
これは、CADで「ファミリーテーブル」 1として知られているモデルだと思います。本質的に、1つの「論理幾何学」は、幾何学的特徴を追加または削除する代わりに、次元2を変更するだけで、多くの「物理幾何学」を生成できます。
その名前が示すように、それはテーブルです-列はディメンションであり、各行はこれらのディメンションの値の特定の組み合わせを表し、物理的なジオメトリを生成するために特定の「インスタンス」に適用する必要があります。これは、ここで示しているものと非常によく似ています。 。
2つの幾何学的に同一のインスタンスを生成する目的はないため、これらの次元はキー3を形成します。これは、システムのすべてのコンポーネントが、一部の数値(10進数の0.1など)を2進浮動小数点で正確に表すことができないことを「理解」している限り問題ありません。どんな精度でも。
データの出所(およびデータの行き先)に応じて、現在の設計を維持するか、代わりに10進数を使用することを検討してください。
double
すでにそこにあると表現されているためfloat
、データベースに保存するだけで摩擦が少なくなります。decimal
、より適切な選択である可能性があります。1「ファミリテーブル」は、PTC Pro / ENGINEER(別名Creo)の用語です。本質的に同じものは、AutodeskInventorでは「iParts/ iAssemblies」、SolidWorksでは「構成」として知られています。
2機能抑制などのパラメトリック設計の他の側面ですが、今はあまり詳細にとらわれないようにしましょう...
3そして、追加の「代理」キーを導入してプライマリにするかどうかに関係なく、それが必要です。
このキーを削除して、テーブルのidキーの自動インクリメントに置き換えることをお勧めします。キーには整数型を使用することをお勧めします、頑張ってください
FLOAT キーに特に「問題」があるとは思いません。適切なタイプは、列の値を反映する必要があります。 ここに関連するSOの質問があります。