0

特定のシナリオでは、MachineNumber (Varchar) とその MachineID (Int) を持つルックアップ テーブルがあります。私のトランザクション テーブルでは、ルックアップ テーブルの MachineID を使用してマシン番号を参照しています。

要件: トランザクション テーブルで MachineID フィールド タイプを Varchar に設定し、ルックアップ テーブルでそのタイプを Int として保持することはできますか? 理由は、MachinNumber がルックアップ テーブルに格納されていない一部のマシンでは、ユーザーから提供された実際の MachineNumber を Transaction テーブル自体に格納する必要があり、マシン番号が英数字であるため、この参照フィールドのタイプを Int から変更したいからです。ヴァルチャーへ。

簡単に言うと、トランザクション テーブルの MachineID フィールドには、MachineID (ルックアップ テーブルから参照される) と実際のマシン番号 (ユーザーによって提供され、ここに直接格納される) の両方が含まれている必要があります。

質問: これらの参照フィールドに異なるタイプを使用することは良い方法ですか? それとも一般的な方法ですか? これら 2 つのテーブル間の Join を使用したクエリにどのような影響がありますか?

ありがとう、アリンド

4

1 に答える 1

0

原則として、すべてのケースで存在し、一意であることが保証されている場合は、自然データをキーとして使用することをお勧めします。

あなたの場合、実際のマシンID(varchar)を使用できる場合は、そうして、それをルックアップなどのキーにします.

私はかつて、私たちのサーバーと取引する EFTPOS 端末を持つ会社で働いていたことを付け加えておきます。便利な固有の EFTPOS 端末 ID を使用することにしましたが、故障して銀行の修理担当者に交換されたときに問題が発生しました。新しい端末はIDが違いますが、使うのは「同じ」端末でした。端末が修理され、元の端末 ID が同じである別のクライアントの場所に戻されたとき、私たちの問題はさらに複雑になりました。これにより、最初は面倒なことは終わりませんでした。人為的な ID を使用することになり、現在の物理端末 ID を属性として格納しました。

于 2011-09-22T11:28:16.943 に答える