2012-05-01 10 views
0

私は、CustomerType1、CustomerType2、およびCustomerType3のようなエンティティを持つアプリケーションを実行しています。複数のエンティティ間でのIDの同期

すべてのCustomerTypeエンティティは完全に異なる情報を持つことができますが、すべてが整数のCustomerIDフィールドを持っています。

どのようにタイプを作成しても、CustomerIDは常に3つのタイプすべてで一意で、整数のままであるように設定する方法を理解しようとしています。例えば

、以下を作成すると、次の得意

CustomerType1につながる - 1

CustomerType1 - 2

CustomerType1 - 3

CustomerType2 - 4

CustomerType1 - 5

CustomerType3 - 6

CustomerType1 - 7

これにアプローチする最良の方法は何ですか?

答えて

0

2の可能なアプローチ:

  1. 各顧客の種類を追跡するために、「弁別」フィールドを使用して、顧客のタイプのすべてのための単一のテーブルを使用し、そのIDとして得意先コードが含まれます。
  2. 外部テーブルを使用して、IDをIDフィールドとして管理します。

最初のアプローチは、次のチュートリアルで説明したようのためのEntity Frameworkの中に直接支援という利点を有する:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

その顧客タイプが異なるデータが含まれているかもしれないが、このアプローチ無駄なデータベーススペースにもかかわらず、長期的にはスケーラビリティの点で安価になる可能性があります。ビジネス層では、顧客タイプは単純にそれらに関係しないフィールドを無視できます。

2番目のアプローチは、おそらく変更が困難な既存のアプリケーションに追加するのに最も適しています。長期的には、このようにIDを追跡する作業が増えています。 1つのビジネス層では、別のテーブルに挿入するために1つのテーブルからIDを取得する必要があります。これは、大きなデータセットでは高価になる可能性があります。ビジネスレイヤーの要件に応じて、未使用のCustomerIDを破棄しなければならないシナリオもあります(システムではCustomerID 58からCustomerID 60にスキップするなど)。

0

あなたのアプローチは、固有のIDを持つネットワークデータベース内で同じエンティティタイプを持つことと似ています。

多くの開発者は、通常、UIDまたは関連タイプを使用します。その型は、64桁、128桁またはそれ以上の桁数を持ち、ランダムかつ自動的に生成されます。別のマシンで同じデータベースを使用している場合、同じ値を得ることはほとんど不可能です。

一部のデータベースは、その値を整数ではなく文字列として格納します。

整数キー付きのテーブルが1つしかない場合、主キーの値はどのように生成されますか?自動?コードで値を生成し、後で主キーフィールドに割り当てますか?

ソリューション1

データベースがU.I.D.をサポートしている場合またはO.I.D.自動的に生成された一意の識別子を整数として使用します。

ソリューション2

データベースがU.I.D.をサポートしている場合またはO.I.D. varchar/string、または使用しているデータベースエンジンやプログラムにUIDを生成する関数があり、その関数を使用して、文字列の結果値を整数にキャストしたり(「 - 」などの区切り文字を取り除く)、整数の主キーフィールド。

概要

多くの開発者は、新しいレコードを挿入するときに、データベースエンジンは、自動的に主キーを生成させることを好みます。場合によっては、コード内で主キーを生成し、それを直接割り当てることをお勧めします。 「Entity Framework」を使用しているので、そのライブラリが主キーをどのように処理するかは無視します。

乾杯。

+0

残念ながら、IDは増分整数である必要があります。アプリケーションにすでにCustomerType1設定がありますが、2番目の設定を追加しています。 –

関連する問題