0

CustomerType1、CustomerType2、CustomerType3などのエンティティを持つアプリケーションを実行しています。

3つのCustomerTypeエンティティはすべて完全に異なる情報を持っている可能性がありますが、それらはすべて整数であるCustomerIDフィールドを持っています。

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

たとえば、以下を作成すると、次のCustomerIDになります。

CustomerType1-1

CustomerType1-2

CustomerType1-3

CustomerType2-4

CustomerType1-5

CustomerType3-6

CustomerType1-7

これに取り組むための最良の方法は何ですか?

4

2 に答える 2

0

あなたのアプローチは、一意のIDを使用して、ネットワークデータベースに同じエンティティタイプを設定するのと似ています。

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

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

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

解決策1

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

解決策2

データベースがUIDまたはOIDをvarchar/stringとしてサポートしている場合、またはデータベースエンジン、または使用するプログラムにUIDを生成する関数がある場合は、その関数を使用して、結果値を文字列から整数にキャストできます(「 -")、および整数の主キーフィールドに格納されます。

概要

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

乾杯。

于 2012-05-01T15:25:22.260 に答える
0

2つの可能なアプローチ:

  1. 「discriminator」フィールドを持つすべての顧客タイプに対して単一のテーブルを使用して、各顧客タイプを追跡し、そのIDとしてCustomerIDを含めます。
  2. 外部テーブルを使用して、IDフィールドとしてのCustomerIDの作成を管理します。

最初のアプローチには、次のチュートリアルで概説されているように、EntityFrameworkを直接サポートするという利点があります。

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つは、ビジネスレイヤーが別のテーブルに挿入するために、あるテーブルからIDをフェッチする必要があることです。これは、大規模なデータセットではコストがかかる可能性があります。ビジネスレイヤーの要件によっては、未使用のCustomerIDを破棄する必要があり、それがシステムに存在しない場合もあります(たとえば、CustomerID58からCustomerID60にスキップします)。

于 2012-05-01T15:46:22.103 に答える