主キーの設定についてさらに学習したい方に

主キーは必ず正しく設定することが重要で、その理由はいくつかあります。

第 1 に、主キーとしてマークされるプロパティーが増えるにつれて、オブジェクトのキー・シグニチャーの計算にかかる費用は増えていきます。 User のすべてのフィールドが主キーとしてマークされた場合、システムはそれぞれの User について、それらのプロパティーの 1 つ 1 つにアクセスし、それらの各プロパティーの値を含んだシグニチャーを計算しなければなりません。 フィールドが別のオブジェクトの参照であれば、問題はより複雑になります。 そこで一般的な規則として、クライアント・データの主キーはデータベースの主キーの場合と同じ規則に従う必要があります。単一のフィールド、できれば整数フィールドが、最も効率的なキーです。 これより複雑なキーは、すべての単一有効フィールドが主キーにマークされているデフォルトで生成されたものも含み、最低限のキーと同様に動作しますが、速度は遅くなります。

第 2 に、主属性での参照の循環は避けなければなりません。 たとえば、User オブジェクトが Address を所有し、その Address に User オブジェクトを指すポインターがあり、user.address が主フィールドで、address.user も主フィールドの場合には、これら 2 つのオブジェクトの識別を判別しようとすると無限ループになります。 これは直観的なものですが、コードでコントロールするのは難しいことがあります。 この場合、Java オブジェクトに一貫性がある限り、システムは動作します。つまり、Address が指す User オブジェクトが、Address オブジェクトを指す Java User オブジェクトとまったく同じで、theUser = theUser.getAddress().getUser() のような単純なオブジェクト参照等価テストが真を戻す場合です。

最後に、そしてこれは他の問題よりずっと難しい問題ですが、すべてのフィールドが主キーとみなされている場合 (デフォルト)、ある 1 つのオブジェクトに変更を加えると、そのオブジェクトの前の識別が失われたことになります。 すべてのフィールドが識別の一部であるため、どのような変更があっても識別が一定ではなくなります。 たとえば、ユーザーによってすでに変更された可能性のあるブラウザー上のオブジェクトについて、サーバーから更新情報を得られる WebServices などのように、フレームワークのより高度な機能を使用する場合には、実際的な問題となります。

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved. (C) Copyright IBM Japan 2005