関係機胜

埓来のリレヌショナルデヌタベヌスでは、タプルのバむナリ接続はキヌの䜿甚に基づいおいたすプラむマリおよび倖郚。 さらに、この関係の解釈は、デヌタベヌスの論理構造の倖郚で実行されたす。デヌタベヌスの論理構造解釈は、本質的に非垞にarbitrary意的です。 圓然、リレヌショナルモデルで芏定された制限内です。



オブゞェクトのパラダむムでは、それらの識別子はオブゞェクトの接続を実珟するために䜿甚されたす。 さらに、オブゞェクトの接続に厳密な察称圢状が䞎えられおいる堎合ペアの圢で、盎線| 埌方リンクでは、これにより、Selectをリンク䞊の自然なナビゲヌションにほが完党に眮き換えるこずができたす。 しかし、それほど重芁ではないが、察称圢匏はオブゞェクトの接続をデヌタベヌスの論理構造の完党か぀独立した芁玠にし、独自の動䜜ず他の既存の接続ぞの機胜䟝存性を持ちたす。



この蚘事では、オブゞェクト間の通信のさたざたな動䜜の偎面を怜蚎したす。その実装により、アプリケヌションのビゞネスロゞックの倧郚分をデヌタベヌスの論理構造に盎接統合できるため、開発者はコヌディングルヌチンから解攟されたす。



著者は、プレれンテヌションにもう少しむメヌゞを䞎えたいず思っお、䞀般的に受け入れられおいる甚語の芏範から逞脱するこずを蚱可したした。



情報の芳点から、2぀のオブゞェクトの関係は、「私はあなたを芋たす」ずいう原則に埓っお、識別子の盞互亀換ずしおのみ理解されるべきです。 同時に、オブゞェクト自䜓はデヌタクラスのむンスタンスであり、クラスオブゞェクトの接続は、クラスの関係の宣蚀によっお確立されたルヌルの実甚的な実装です-サブゞェクト゚リアのモデル化に䜿甚される4぀の基本的な抜象゚ンティティの1぀のむンスタンス。



リレヌションによっお接続された各クラスは、リレヌションの反察のクラスによっお型指定された参照属性を所有したす。クラスオブゞェクトの倀は、反察のクラスのオブゞェクトの識別子になりたす。 クラスリレヌションは、オブゞェクトの接続のルヌルを確立するだけでなく、異なるクラスにロヌカラむズされた属性の盞互䜜甚を敎理するための自然なコンテキストトランスポヌトおよび条件ずしおも機胜したす。



関係タむプ



関係タむプは、関係によっお接続されたクラスから掟生したオブゞェクトの定量的盞互䜜甚の尺床を確立したす。 ご存知のように、この枬定には3぀のオプション 1察1 、 倚察1 、および倚察倚しかありたせん。



倚察1の リレヌションシップ  耇数リレヌションシップず呌ばれるは、明瀺的な因果ベクトルを持ちたす。倀リンクのプラむマリ受信者は垞に倚偎のリンク属性であり、 䞀方の属性倀は掟生倀リストリンクです。  したがっお、この関係の属性の甚語䞊の区分は、しばしば以䞋で䜿甚されたすが、 盎接リンク 属性ずバックリンク 属性になりたす 。



完党に察称的な1察1の関係 ナニタリ関係でもあるでは、ピアが参照する属性のそれぞれが、オブゞェクトの接続を䜜成するむニシ゚ヌタヌずしお機胜し、倀のプラむマリ受信者になるこずができたす。 この点での盎接リンクおよび逆リンクの属性ぞの分割は、本質的に玔粋に状況に応じたものです。 そしお、それらの1぀が反察の属性に倀を割り圓おた結果ずしおその倀を受け取るずいう事実にもかかわらず。



倚察倚の関係の抂念的な意味は非垞に曖昧であるため、別の考慮事項の察象ずなりたす。



図でさらに䜿甚される耇数および単䞀の関係のグラフィック衚珟は、次のようになりたす。







矢印のグラフィック画像は、䟝存関係ベクトルの画像ずバックリンクのリスト属性の画像の䞡方に盎感的に関連付けられおいるため、この衚蚘が䜿甚されたす。 タむプず名前で参照属性をマヌクするこずは、画像の必須芁玠ではありたせん。 参照属性は、反察のリレヌションクラスによっお入力され、それに応じおこのクラスの名前を取りたす。



基準コネクタ



オブゞェクトの接続の察称性は、接続されおいるオブゞェクトのリンク属性の倀の因果䟝存性によるものです。 他の䟝存関係ず同様に、これはコネクタによっお実装されたす 。これを参照コネクタず呌びたす 。 参照コネクタは先隓的にアクティブであり、参照倀の氞続的な論理的䞀貫性ず敎合性を保蚌したす。 その䜜業では、参照コネクタは、実際の参照属性に加えお、 サヌビス属性 OwnおよびDelも䜿甚したす 。 倚重関係コネクタヌの宣蚀は次のようになりたす。





サヌビス属性Ownは 、独自のクラスによっお入力され、オブゞェクトの独自の識別子 IDO をクラスオブゞェクトに栌玍したす。 この属性は、関係のコネクタがバックリンクの同じ属性に枡す倀の゜ヌスずしお、すべおのタむプの関係で䜿甚されたす。



Delサヌビス属性は、関係コネクタによっおロックコンテキストずしお䜿甚されたす 。 クラスAのオブゞェクトを論理的に削陀するず 、そのDel属性が初期化され、 Unsetメ゜ッドが呌び出されおコネクタのベヌス゜ケットのアドレスが呌び出されたす。これにより、属性Bが呌び出されたす。 「空の」倀ずキヌを持぀Setメ゜ッドの{A}その結果、察応する゚ントリがバックリンクBのリストから削陀されたす。 {A}。



Key属性コネクタのキヌコンテキスト は、デフォルトではクラスの基本属性です。 この属性の倀はコネクタヌによっおキヌずしお䜿甚され、送信された倀ず察になっお所有属性のIDOです。 このペアを受信する埌方リンク属性B. {A}には、バックリンクリスト自䜓を盎接圢成する単玔なリスト機胜がありたす。



実際、盎接リンク属性A. [B]は、コネクタにタヌゲットオブゞェクトのIDOを提䟛する単なる参照コンテキストです。 属性A. [B]は、リンクの実装䞭に栌玍された倀を受け取るず、コネクタのベヌス゜ケットでResetメ゜ッドを呌び出したす。これにより、属性Bのアドレスが呌び出されたす。オブゞェクトIDOずキヌを䜿甚したSetメ゜ッドの{A}その結果、バックリンクのリストに新しい゚ントリが远加されたすB. {A}。 さらに、 キヌおよびダむレクトリンクA属性の倀のその埌の倉曎[B]に続いお、バックリンクのリストの察応する倉曎を䌎うUnsetおよびResetぞの連続した呌び出しが行われたす。



単䞀の芳点では、 キヌコンテキストは明らかに䜿甚されたせんが、実装のミラヌ察称性を提䟛する2぀のリンクコネクタがありたす。





提瀺された宣蚀をよく芋るず、参照倀を割り圓おるルヌプ凊理のすべおの前提条件があるように芋えるかもしれたせんが、そうではありたせん。 Setメ゜ッドは、倖郚から受け取った倀が既存の倀ず等しい堎合、掟生再垰呌び出しを生成したせん。



関係創造



2぀の参照属性に加えお、少なくずも1぀のコネクタが関係の圢成に関䞎し、゜ケットのセットを適切に蚭定されたフラグず組み合わせたす。 宣蚀のこのボリュヌムはすべお、むンスタンスを䜜成するために事前定矩された方法ず抜象的なメタ関係を衚す圢匏を䜿甚しお、デヌタモデルのビゞュアルデザむナヌのファサヌドの埌ろに隠れおいるこずを匷調したいず思いたす。 コンストラクタヌがリレヌションのむンスタンスを䜜成するために必芁なのは、バむンドされるクラスのタむプず蚘述子だけです。



たた、クラスの関係も属性のコネクタもデヌタモデルの゚ンティティではなく、それによっお解釈されるこずもありたせん。 デヌタモデルは、クラス、属性、および゜ケットでのみ動䜜したす。 リレヌションずコネクタはアプリケヌションモデルの゚ンティティであり、アプリケヌションモデルはデヌタモデルの衚珟  衚珟圢匏です。



力関係



倉庫から倉庫ぞの商品の転送などの操䜜を怜蚎しおください。 請求曞転送オブゞェクトでは、2぀の倉庫オブゞェクトを䞀床に凊理する必芁がありたす。 このような必芁性は、参照属性Aの掟生倀の栌玍のアトミック圢匏を列挙可胜な 配列に眮き換えるこずで、関係のパワヌを単玔に増加させるこずで実珟されたす。





倚重リレヌションリンクの倚重床の胜力を高めるず、モデルコンストラクタヌは盎接リンク属性の远加芁玠を䜜成し、既存のものず同様の別のリレヌションコネクタヌが存圚し、アドレスポむンタヌの゜ヌスずしお新しい゚レメントを䜿甚したす refコンテキスト 電力の増加は、別の着信゜ケットを远加するこずを陀いお、逆方向リンク属性B. {A}の宣蚀に圱響しなかったこずに泚意しおください。 これ以降の図は、意味で必芁なコンテキストのみを瀺しおいたす。



同様に、単䞀関係の力の増加が実珟されたす。





このタむプの関係には远加の内郚察称性があるため、関係の䞡偎の参照属性の芁玠の数は垞に同じです。



同様に、耇数リンクのバックリンク属性は耇数のリストを提䟛できたす。 デフォルトでは、最初のメむンリストはクラスのベヌス属性をキヌずしお䜿甚したす 請求曞の堎合、これはDate属性になりたす。 䜕らかの目的で、たずえば合蚈請求曞の金額など、゜ヌト順が異なる別のリストが必芁だずしたす。 新しいリスト宣蚀を䜜成するこずにより、関係コンストラクタヌは、backlink属性の远加芁玠A2ず远加の参照コネクタヌを䜜成したす。 新しいコネクタはプラむマリコネクタず䌌おいたすが、キヌ゜ヌスずしお日付ではなく日付属性を䜿甚したす。




泚意ず匷調新しいリストを远加しおも、関係の力は倉わりたせん。



リストプロパティで远加の論理コンテキストが指定されおいる堎合、コンテキスト倀がtrueである゚ントリのみがそれに含たれたす。 このオプションは、たずえば「癜灰色」アカりンティングを実行する堎合に圹立ちたす。 たた、ベヌス参照コネクタの3぀のコンテキストはすべお既に䜿甚されおいるため、コンテキスト゜ケットの1぀のフリヌロックコンテキストを䜿甚できたす。 たずえば、次のように






ご芧のずおり、 refコンテキストやキヌコンテキストずは異なり、 ロックコンテキストをカスケヌドしお、既存のコンテキストに远加の論理コンテキスト条件を䜜成できたす。



参照敎合性管理



参照されおいるオブゞェクトを任意に削陀できないこずは明らかです。 したがっお、参照敎合性を維持するには、オブゞェクトぞの関連する倖郚リンクの可甚性を制埡する必芁がありたす。



芚えおいるように、 Delサヌビス属性の倀が初期化されるず、オブゞェクトは論理的に削陀されたす。 倖郚リンクを制埡する機胜を提䟛するために、各バックリンク属性は、䜜成されるず、 Del属性ぞの個別のパッシブコネクタを自動的に䜜成したす。





Setメ゜ッドでは、 Del属性の特殊なナヌティリティ関数がすべおの着信コネクタをチェックし、そのうちの1぀がtrueを返すバックリンクのリストが空でないずすぐに、関数はトランザクションを䞭止する䟋倖を発生させたす。 しかし、あなたは䟋倖に持ち蟌むこずはできたせん。 Del属性にアドレス指定されたGetメ゜ッドは、競合なしでオブゞェクトを削陀できる堎合、コネクタをポヌリングし、 falseを返したす 。



抂念的な芳点から、「 芪 」ずみなされる関係がありたす。 たずえば、 Waybillずその条件付き「 子 」 レコヌドは、Waybillのコンテキストでのみ存圚する堎合がありたす。 ここでは逆の動䜜が予想されたす。Recordオブゞェクトからのバックリンクがある堎合にのみInvoiceオブゞェクトを削陀できるだけでなく、独自の削陀のプロセスで、すべおのRecordsを削陀する必芁がありたす。 リレヌションシッププロパティでOwner仮想フラグを蚭定するず、必芁な反応を実珟できたす。その埌、デヌタモデルに次の倉曎が加えられたす。









最初に、 InvoiceクラスずRecordクラスのDel属性を接続するアクティブなコネクタが远加されたす。次に、 Getフラグをリセットするこずにより、 Delを察応するバックリンクリストに接続するコネクタが非アクティブになりたす。



盞互関係



倚重リレヌションによっお接続された3぀のクラスのシステムを考えたす。









クラスCのオブゞェクトにはオブゞェクトBずAぞの盎接ポむンタヌがあり、オブゞェクトBには Aぞのポむンタヌがありたす。 远加の芏則や制限はないため、最も䞀般的なケヌスでは盞互参照によっお接続されたオブゞェクトCずBは、クラスAの 異なるオブゞェクトを含めお䞀貫しお察凊できたす。



サンプルを少し倉曎しお、特定のセマンティックロヌドを導入したす。



Cを Studentクラス、 Bを 教職員 、 Aを 倧孊ずしたす。 孊生が専任の教育機関で専攻されおいるこずは明らかなようです。 蚀い換えれば、 孊生の堎合 、 倧孊ぞのポむンタは、 教員ぞのポむンタによっお決定されたす。 この芏則は、関係C → Bを介しおクラスBおよびCのクラスAぞの盎接参照の属性をバむンドするコネクタヌを䜜成するこずによっお確立されたす。 関連する属性は同じタむプ-クラスAであるこずに泚意しおください。









暙準コネクタによる参照属性のアクティブなリンク宣蚀は、倖郚の圱響䞋で、参照倀C. [A] = B. [A]の必芁な䞀貫性を自動的に提䟛したす。 実際には





盎接リンク属性のアクティブな䟝存関係の宣蚀C. [A] = B. [A]は、盎接的な論理的結果をもたらしたす。











掟生バックコネクタは完党に受動的であり、属性Cを倉曎しおも開始されたせん。 [A]、コンテキスト゜ケットの察応するUnset / Resetフラグがオフになり、倖郚の圱響の凊理プロセスに参加しないため。 このコネクタは、参照属性Cぞの倀の割り圓おを敎理するプロセスで䜿甚されたす。 [A]。これに぀いおは埌で詳しく説明したす。 それたでの間、デヌタ゜ヌスず芋なされる堎合、 バックコネクタによっおアドレス指定されたバックリンクのリストは、それらから1぀だけを自動的に遞択する機胜なしで、倚くの同皮の倀を提䟛したす。



䞀方、厳密に定矩されおいるず同時にリストから遞択できる芁玠は1぀だけであるずいう条件がありたす。 このためには、リストにはキヌの倀による䞀意性のプロパティが必芁です。たあ、キヌ自䜓が必芁です。



倀でグルヌプ化



同じ3぀のクラスの䟋を考えおみたしょう。ただし、より明確にするために、少し異なる解釈で説明したす。クラスAは、 レコヌド クラスC を暊日クラスB でグルヌプ化するゞャヌナルです。 ゞャヌナルの各日は、 日付  D カレンダヌ日付の倀によっお䞀意です。 この䞀意性は、属性に割り圓おられたバックリンク属性Aによっお提䟛されたす{B}リスト内の既存のキヌ倀を持぀リストに゚ントリを远加しようずするず、トランザクション䟋倖をスロヌするわずかに近代化されたリスト機胜 。



バックコネクタヌにもいく぀かの倉曎が加えられたした。 キヌコンテキストずしお日付D属性を䜿甚し、 セミアクティブになりたした ベヌス゜ケットのSetフラグがオフになっおいる堎合、そのコンテキストはアクティブですすべおのコンテキスト゜ケット゜ケットに察しおUnset / Resetフラグが蚭定されたす。









アクティブなコンテキスト゜ケットでは、属性C. [A]たたはC .Dの倀を倉曎するず、 バックコネクタがアクティブになり、 C .Dの倀が抜出され、リストAにアクセスするずきにキヌずしお䜿甚されたす。オブゞェクトID Bは、タヌゲット属性に割り圓おられたす。 これにより、クラスCのオブゞェクトをクラスBのオブゞェクトに自動的に配眮グルヌプ化したす。



しかし、察応するDayオブゞェクトが存圚しないC .Dの倀に日付を入力するずどうなりたすか この堎合、 バックコネクタは自然にNULを返し、 Dayぞのリンクは初期化解陀されたす。



この動䜜が必芁になるこずもありたすが、倚くの堎合、入力された日付に察応する必芁なDayオブゞェクトを自動的に䜜成する必芁があるこずに泚意しおください。 この動䜜を実装するために、 Autoset機胜がC. [B] 属性に割り圓おられたす 。 この機胜埌述は、 バックコネクタによっお開始されるず、クラスBの新しいオブゞェクトを自動的に䜜成し、その埌、䜜成されたオブゞェクトの識別子を盎接リンク属性の倀ずしお割り圓おたす。



しかし、これでは十分ではありたせん。 参照敎合性を保持するには、新しいオブゞェクトBの属性Dおよび{ A }は、厳密に定矩された倀、぀たりオブゞェクトCの類䌌の属性の珟圚の倀ず䞀臎する倀を自動的に受け取る必芁がありたす。 これらの目的のために、コネクタヌB .D→ C .DおよびB. [A]→ C. [A] で、倀の逆䌝送が有効になりたす。぀たり、属性C .DおよびCに属するコネクタヌの着信Get-゜ケットで[A] 、 Setフラグが远加で蚭定されたす。 次に、属性C. [B]に倀を割り圓おるず、コネクタBのトランスポヌトコンテキストB .D→ C .DおよびB. [A]→ C. [A]、これらのコネクタは、オブゞェクトBに倀を転送するために開始されたす。 図に瀺されおいる䟝存関係宣蚀は、倀のいずれかが倉曎されたずきに論理的敎合性ず参照敎合性を自動的に保持したす。



属性倀によるオブゞェクトのグルヌプ化を実装する䞊蚘の䞀連の宣蚀は、2぀のステップでモデルの内郚コンストラクタヌによっお䜜成されたす。 特定の䞀般クラスのbacklink属性のプロパティで䞀意性オプションが有効になっおいる堎合、この属性が属する関係は䞀意になりたす。 さらに、タヌゲットリンククラス自䜓が、ベヌス属性の倀によっおリンクをグルヌプ化するクラスずしお機胜できるようになりたした。 3番目のクラスのそのようなクラスずの関係共通クラスずも関係があるは、グルヌプ化が実装される倀によっお3番目のクラスのタプル内の属性を遞択できるオプションプロパティダむアログ内を取埗したす。



リンクのグルヌプ化



前の䟋を少し珟代化したすクラスAずCの絶察属性Dの堎所をクラスDぞの盎接リンクの属性にしたしょう䞀般に、バックリンクのリストは、倀のキヌず同じですカレンダヌの日付たたはIDOのID。 さらに明確にするために、クラスの意味を倉曎したす。クラスAは補品 、クラスDは倉庫 、クラスCは勘定/請求曞レコヌド 圚庫移動です。 次に、クラスBのセマンティックロヌドが䞀意に導出されたす。これは補品圚庫です。 WarehouseをSupplierたたはBuyerに眮き換えるず、クラスBはProduct-at-Supplier / Buyerになりたす。



行われた倉曎に察応する宣蚀は次のようになりたす。









WarehouseおよびGoodsオブゞェクトぞの特定のポむンタヌを受け取るず、すべおのRecordは自動的にGood-in-Warehouseオブゞェクトぞのポむンタヌを受け取り、ない堎合は自動的に䜜成したす。 泚3番目のクラス Product-in-Warehouse を介した2぀のクラスProductおよびWarehouseの接続は、 倚察倚リレヌションシップの実装であり、2぀のバックリンク属性の倀の盎接亀換に代わるものです。 さらに、このオプションには䞀意性のプロパティもありたす。 蚀い換えるず、オブゞェクトのペアごずに、 商品ず倉庫 、それらを接続する倉庫内オブゞェクトが単䞀のコピヌに存圚したす。 この動䜜は、バックリンクのリストの䞀意性プロパティが原因であり、反察のクラスぞの属性ポむンタがキヌ゜ヌスずしお䜿甚されたす。 たた、2぀のクラス ProductたたはWarehouse のどちらでリストの䞀意性が宣蚀されおいるかは関係ありたせん。反察偎のクラスの同じバックリンクのリスト通垞のリスト機胜を䜿甚には実際に䞀意のキヌのセットが含たれたす



倚察倚の関係



盎接の倚察倚の関係は、リンクされたクラスのそれぞれで盞互䜜甚する2぀のバックリンクリストのように芋えたす。 このような実装には、䞀般に、意味のない実甚的な意味がありたす。オブゞェクトの接続の事実のステヌトメントのみであり、この関係を通じおこれらのクラスの属性の䞀貫した盞互䜜甚を実珟する可胜性はありたせん。 したがっお、実際には、属性の目的の盞互䜜甚は、タヌゲットクラスずの関係に関連付けられた3番目のクラスの属性を通じお実装されたす。 実際のアプリケヌションモデルでは、このような構造は垞に芋られ、独立したタむプの関係を装うこずなく、最もarbitrary意的な方法で䜜成されたす。



䞊蚘の䟋の圚庫品のように、 3番目のクラスを介した関係に䞀意性のプロパティがある堎合は、たったく別の問題です。 ここで、3番目のクラス通信クラスの詳现は、キヌの゜ヌスずしおのリレヌションシップ属性の䜿甚ではなく、クラスリレヌションの抂念的な「掟生性」です。 したがっお、このような䞀意の 識別子によるクラスの3番目のクラスを介した接続は、 倚察倚の関係ずしおさらに考慮されたす。 このようなタむプは、 䞀意のリレヌションたたはrelation-projectionずしお名前を付けるこずができたす。



プロゞェクションリレヌションは、ダむアログの実行の結果ずしお䜜成され、リレヌションによっお接続されたクラスが遞択されたす。その埌、察応するコンストラクタヌメ゜ッドが3番目のプロゞェクションクラス自䜓を䜜成し、それに察応する耇合名ず、リレヌションの属性およびそれらを接続するコネクタヌの他のすべおの必芁な宣蚀の䞡方を割り圓おたす。同時に、投圱関係の3぀のクラスずの関係を圢成するクラスは、䞊蚘の䟋からコネクタの完党なセットを自動的に受け取りたす。これにより、オブゞェクトは投圱オブゞェクトぞのポむンタを自動的に受け取りたす。芖芚的に明確にするために、すべおのスキヌムの投圱クラスず投圱クラスの比率は二重矢印のように芋えたす。









泚目すべきは、投圱関係の組み合わせにより、あらゆる倚次元デヌタ分析を実装できるこずです。実際、すでに利甚可胜な投圱クラスを含め、どの投圱クラスも投圱関係に接続できたす。その埌、すべおの投圱クラスの属性で数倀の䞀般化を敎理できたす。



察応



増加倚数の我々は、このように順番で先に論じた通信の論理的なアナログずしおも芋るこずができる別のクラスの2぀の以䞊のオブゞェクトのアドレスに䞀぀のクラスのオブゞェクトを蚱容する関係倚察倚の。









これに基づいお、耇数圢匏のリレヌションシップには独自のプロゞェクションが必芁であるず想定する必芁がありたす。これは、耇数のリレヌションシップの䞀意のフォヌムであり、オブゞェクトぞのポむンタは自動的に取埗できたす。



そしお、リレヌションシップずプロゞェクションのダむアログを䜜成するプロセスで、同じクラスがタヌゲットクラスずしお遞択された堎合、そのようなナニヌクなリレヌションシップが実際に䜜成されたす。そしお、単玔クラスず投圱クラスの関係が䜜成された埌、属性ずコネクタヌの宣蚀は次の圢匏を取りたす。







その倖芳のすべおの奇劙さのために、それは、䟋えば䌚蚈で実際に䜿甚される論理的で完党に機胜する宣蚀です-残高勘定の盞互通信のオブゞェクトを受け取るために。厳密に蚀えば、ここから借りた名前- 通信、これは投圱クラスによっお実珟される耇数のナニヌクな関係を瀺すために以䞋で䜿甚されたす。



䞊蚘の宣蚀に泚意を䜕を払う必芁がありたす圌の1むンスタンスを持぀オブゞェクトの任意のペアを接続する埓来の投圱ずは察照的に、に察応このような関係は、盎接リンク芁玠のポむンタヌの組み合わせごずに1぀ず぀、2぀のむンスタンスで実装されたす。これらの目的のために、バックリンクのリストの圢成を含むすべおの盞互䜜甚においお、倀ずキヌの䞡方ずしお機胜する参照ポむンタヌは、それらが配眮される芁玠のむンデックスによっお補完されたす。さらに、意味のない二重アドレス指定をブロックするために、投圱クラスの参照属性に、䞡方の芁玠に同じ倀が割り圓おられないようにする特別な関数を割り圓おるこずができたす。



関係の実装



クラスオブゞェクトにリレヌションシップを実装する方法は1぀だけです。぀たり、Setメ゜ッドを䜿甚しお、タヌゲットIDOのIDOに盎接リンク属性を割り圓おたす。さらに、察応する呌び出しは、倖郚ずデヌタモデル自䜓の䞡方で開始できたす。たずえば、属性は、同じ参照属性をバむンドするコネクタを介しお、別のクラスからオブゞェクトぞのポむンタを取埗できたす。たた、Createメ゜ッドがタヌゲットクラスではなく、このクラスで入力されたリレヌションの属性盎接リンクず埌方リンクの䞡方の属性にアドレス指定されおいる堎合、オブゞェクトの䜜成時にリレヌションを盎接実装できたす。この方法では、別のオブゞェクトに関連する新しいオブゞェクトを䜜成するず䟿利ですたずえば、請求曞に関する新しいレコヌド属性は、Autoset機胜を䜿甚しおタヌゲット関係オブゞェクトを䜜成するこずにより、IDOを受け取るこずもできたす。



倖郚ナヌザヌは、単に参照倀を取埗しお属性に割り圓おるこずはできたせん。内郚識別システムぞの盎接アクセスを開くこずの悲しい結果は、コメントなしで明癜です。さらに、オブゞェクトの空間の倖偎では、「意味を倱う」ず呌ばれる別のIDO蚘述子が玠数になりたす。



したがっお、倖郚ナヌザヌは、各オブゞェクトがその絶察非参照倀で衚されるリストから芁玠を遞択するこずにより、ダむアログの圢で間接的にのみリンクを実装できたす。必芁なリストは、デヌタカヌ゜ルレむダヌのコンポヌネントによっお提䟛されオブゞェクトDBMSのむンタヌフェむスリ゜ヌスのサヌバヌ郚分は埌で考慮されたす、IDO割り圓おを開始したす行われた遞択に応じお。遞択ダむアログは、盎接たたはカスケヌドで、既存の背面コネクタに基づいお蚭定できたす。ダむアログリストの圢成の゜ヌスは、察応するバックリンクのリストです。



機胜オヌトセット



この機胜は、タヌゲットリレヌションシップクラスの掟生オブゞェクトを自動的に䜜成しおリレヌションシップを実装するために、盎接リンク属性に割り圓おられたす。自動蚭定



機胜は、むンバりンドコネクタたたは倖郚のUpdateむベントによっおトリガヌできたす。この堎合、タヌゲットリレヌションシップオブゞェクトは、゜ヌスオブゞェクトの参照属性に倀が栌玍されおいない堎合にのみ、機胜によっお䜜成されたす。



セットの耇補



倀の論理的盞互䜜甚には匷固な芏則があり、特定のドメむンに属する倀は、そのドメむンが゜ヌスに含たれる倀たたは゜ヌスが含たれる倀にのみ関連付けるこずができたす。この堎合、同等以䞊のドメむンを持぀倀のみが初期倀を取るこずができたす。最倧のドメむンUndefined Typeの埌にはタむプLogicalの属性があり、これは他のタむプの倀を取るこずができたす。簡単に蚀えば、コネクタヌは同じタむプの属性のみをバむンドできたす。これは、以前に怜蚎したすべおの䟋で芳察されたした。ただし、次の宣蚀では、バックリンク属性をリンクするパッシブコネクタA. {B}→ C {D}は明らかに異なるタむプであり、この芏則に明瀺的に違反しおおり、それにもかかわらず、生呜に察する完党な暩利を持っおいたす。









問題は、この堎合、盞互䜜甚の䞻題は意味そのものではなく、逆方向リンクリストの圢をずった関連セットの量的偎面であるずいうこずです。䜕が起こっおいるかのロゞックをより詳现に考えおみたしょう。



静的属性は、芁求でアクセスしたずきに初期化されおいない掟生倀であるにもかかわらず、着信接続がある堎合はそれを圢成するこずで倀を返すこずができたす。同時に、リク゚ストにはトランザクションに属しおいるずいう明瀺的な指瀺が含たれおいないため、属性自䜓は保存された倀を䜜成したせん。぀たり、デヌタベヌスはその状態を保持する必芁がありたす。倉わらない。効果のトランザクションの性質が明らかな堎合、それは別の問題です。この堎合、以前に初期化されなかった静的属性は、デヌタベヌスの状態の䞀般的な倉曎のフレヌムワヌク内で、栌玍された倀を圢成できたす。宣蚀からわかるように、問題のコネクタずそのタヌゲット属性C. {D}は、属性Cに倀を割り圓おるこずによっおトリガヌされたす。 [A]、぀たりトランザクション的に。そしお、珟時点で掟生倀が存圚しない堎合、属性C. {D}は、コネクタヌによっお提䟛される元のパタヌンに埓っお圢成を開始したす。



意味ずしお、バックリンクのリストは盎接リンクから掟生しおいたす。぀たり、属性C{D}元のリストのサむズで独自のリストを䜜成する唯䞀の方法は、必芁な数のクラスDのオブゞェクトを䜜成し、䜜成された各オブゞェクトに独自のオブゞェクトぞのポむンタヌを割り圓おるこずです。このような割り圓おを䌎う䜜成は、独自のアドレスぞの単䞀の䜜成コマンドで実行できたす。゜ヌスリストの各芁玠の属性および完党に正確な堎合-属性に割り圓おられたリスト機胜が行うこず。たた、この芁玠の倀は型が既知の参照ポむンタヌであるため、䜜成されたオブゞェクトのクラスタプルを分析するこずにより、必芁な型の盎接リンク属性が決定され、芁玠から抜出されたポむンタヌ倀が割り圓おられたす。



これらすべおのアクションの結果ずしお、既存のサンプル゜ヌスクラスの掟生オブゞェクトのセットによるず、タヌゲットクラスの掟生オブゞェクトの同様のセットが䜜成され、モデルずペアワむズ接続されたす。



内郚関係



同じタむプのオブゞェクト同じクラスのオブゞェクトをリンクするには、デヌタクラス内で盎接䜜成されるリレヌションが䜿甚されたす。同時に、リレヌションシップ自䜓を実装する方法は倉曎されたせん。2぀の参照属性がクラスに䜜成され、参照コネクタで接続され、独自のクラスで入力されたす。



泚目すべきこずは、前の段萜で説明した察応は、䞀郚ではあるが内郚関係に起因するこずもありたす。これは、1぀のクラスから掟生したオブゞェクトを接続するためです。真実は、サヌドパヌティのオブゞェクトを介しおこれを行いたす。



接続されたクラスが順番に遞択されるビゞュアルダむアログによっお䜜成される通垞のリレヌションずは察照的に、内郚リレヌションはタヌゲットクラスのビゞュアルスペヌスの属性の䟋によっお䜜成されたす。



内郚関係を通じお、属性はそれ自䜓にコネクタを䜜成できたす。これは非垞に効果的な手法であり、「环積合蚈」による䞀般化を含む、さたざたな皮類の意味の䞀般化を実装できたす。



内郚関係の機胜的な意味は、そのタむプによっお決たりたす。



チェヌン関係



内郚の1察1の関係により、クラスオブゞェクトのシヌケンシャルチェヌンを圢成できたす。これがchainず呌ばれる理由です。



チェヌン関係はさたざたな方法で実装できたす。共通所有者からのバックリンクのリストから前のオブゞェクトぞのコネクタを取埗するか、前のオブゞェクトに関連する埌続のオブゞェクトを䜜成しお関係を実装するオヌトセット機胜を䜿甚したす。埌者の堎合、Updateむベントメ゜ッドを䜿甚しお機胜を開始するず䟿利です。



䜿甚䟋ずしおは、䞀連の操䜜ずしお敎理された凊理サむクルの䞀郚の通過、たたは1幎の決枈期間四半期たたは月間があり、期間の始めず終わりに环積合蚈がありたす。チェヌン比のパワヌが3に増加するず、クラスのオブゞェクトは3次元結晶栌子ず論理的に類䌌するようになりたす。この蚭蚈は、物理環境を含む、さたざたなモデリング動䜜に䜿甚できたす。



再垰的な態床



recursiveず呌ばれる内郚の倚察1の関係により、オブゞェクトファむルシステム内のフォルダヌのようなオブゞェクト階局によっお圢成される可倉ネスト深さのツリヌ型デヌタ構造を䜜成できたす。再垰の䜿甚の兞型的な䟋は、建蚭珟堎での䜜業のカレンダヌスケゞュヌルです。このスケゞュヌルでは、再垰的なスケゞュヌルずずもに、チェヌンリレヌションも䜿甚されたす。再垰リレヌションを実装する最も䟿利で自然な方法は、既存の芪オブゞェクトに関連するクラスオブゞェクトを䜜成するこずです。



再垰関係によっお圢成されるオブゞェクトのツリヌ状の階局に関しお、これらのオブゞェクトず他のクラスのオブゞェクトずの耇数の関係を実装する堎合、2぀の論理的に明癜な制限ルヌルが適甚されたす。



再垰ず察話するためのルヌル



グラフィカルに、サヌドパヌティクラスず再垰クラスずの盞互䜜甚のルヌルを次のように説明できたす。







1. オブゞェクト階局ずの耇数のリレヌションシップの堎合、サヌドパヌティクラスのオブゞェクトは、この階局の最䞋䜍レベルに属するオブゞェクト、぀たり再垰リレヌションのバックリンク属性の倀が空のオブゞェクトにのみ盎接リンクを実装できたす。



2.オブゞェクト階局の最高レベル盎接再垰リンクの属性の初期化されおいない倀を持぀に属するオブゞェクトのみが、サヌドパヌティクラスのオブゞェクトぞの盎接リンクを実装できたす。



これらの制限は、他のクラスずの内郚再垰関係を持぀クラスの耇数の関係の実装にのみ適甚され、同様の単䞀関係には適甚されないこずに泚意しおください。䞀般的な階局の特城であるこれらのルヌルは厳密ではありたせんが、本質的に助蚀的なものです。オブゞェクトモデルのレベルでのこれらのルヌルぞの準拠は、いかなる方法でも制埡されず、アプリケヌションのむンタヌフェむス郚分に完党に垰属したす。



フラクタル投圱



䞀意の投圱関係で接続された䞀方たたは䞡方のクラスも内郚再垰を持っおいる堎合、これらのクラスの掟生オブゞェクトは、オブゞェクト階局の最䞋䜍レベルだけでなく、以降のすべおのレベルでも投圱オブゞェクトによっお盞互接続されるず仮定するのが論理的です。おおよそ次の図に瀺すずおりです。









このような関係を実装するには、投圱クラスに再垰関係の宣蚀も必芁です。



したがっお、プロゞェクションクラスで再垰リレヌションが䜜成されるず、このリレヌションシップの2぀の参照属性ずコネクタに加えお、モデルコンストラクタヌはさらに2぀の远加の属性ず、远加の属性の倀によっおオブゞェクト階局の次のレベルぞのプロゞェクションを提䟛するコネクタのセットを䜜成したす









コンストラクタヌは、接続されおいるクラスぞの投圱の盎接リンクの属性ず同じタむプに远加の属性図では[*]でマヌクを割り圓お、それらを関係属性のカテゎリヌに転送したす。ただし、違いがありたす。远加の属性のバックリンクはありたせん。



远加の属性は、図の蚘号=でマヌクされたアクティブなコネクタを介しお、同じタむプの再垰ダむレクトリンク属性から栌玍された倀オブゞェクトぞのポむンタヌを受け取りたす。プロゞェクションで接続されたオブゞェクトのいずれかで再垰が実装されおいない堎合番号1および3の通信スキヌム、察応する远加属性には倀が栌玍されたせんが、アクセスされるず戻りたす再垰なしのオブゞェクトぞのポむンタ。この動䜜は静的属性の兞型的なものであり、前述したずおり、Getメ゜ッドが倀が初期化されおいない属性にアクセスする堎合でも、着信コネクタをポヌリングしお戻り倀を生成できたす。図では、モデルコンストラクタヌによっお䜜成された察応するパッシブコネクタ、点線。



䞊で考慮されたCorrespondenceのような投圱バリアントで内郚再垰関係が宣蚀されるずき、モデルコンストラクタヌによっお完党に同様の远加属性ずコネクタのセットが䜜成されるこずに蚀及する䟡倀がありたす。



構造的むンタヌフェヌス



構造的なむンタヌフェヌスの必芁性は、さたざたな゚ンティティぞの統合されたアクセスを取埗するために関係を通じお必芁ずされる堎合に必ず発生したす。蚀い換えれば、異なる詳现のセットを持぀゚ンティティは、詳现の芳点から同皮のセットに瞮小する必芁がありたす。たあ、少なくずもそのずき、それらを䞀般的なリストずしお提瀺したす。



この問題の最初の解決策は、クラス継承のメカニズムによっお提䟛されたす。子孫クラスは、祖先クラスの属性のタプルを継承したす。これは、たずえば、豊富な皮類の金融ドキュメントをすべおDate型、Number型、Document Name / Transaction型、Amount型の1぀のリストにたずめるのに十分です。



この゜リュヌションは、むンタヌフェむスを「䞊から」ず任意に呌ぶこずができたす。うたく機胜したすが、残念ながらすべおの゚ンティティが共通の祖先を共有しおいるわけではありたせん。兞型的な䟋は、私たちに建蚭䞭で䌚蚈の詳现を䞎える䞀郚の顧客は、䞻芁な資金調達されおいる構造の数で構成され、建蚭オブゞェクト、䜜品によっお構成されおいる䜜品の皮を、そしお異なるに含たれおいる協定ず顧客。ガントチャヌトの党䜓像を瞮小するには、䜜業の進行状況資金調達、発生した費甚、工数などが必芁です。。倚重継承はお勧めできたせん。さらに、倚重゚ンティティの効果は、異皮゚ンティティを1察1の関係ず組み合わせるこずによっお埗られたす。これは、明らかに、単䞀の関係の哲孊的な意味です。この䟋では、ナニタリリレヌションず再垰を組み合わせるこずで結果が埗られ、宣蚀では次のようになりたす。







䞊蚘の「構築」アカりンティングの各サブゞェクトは、自動的にAutosetを䜿甚しおガントクラスにペアのオブゞェクトを䜜成し、その埌、そのオブゞェクトに盎接再垰リンクの属性の倀ずしお論理的な「所有者」ぞのポむンタヌず、他の倀を枡したす。 「所有者」ぞのポむンタは、再垰投圱スキヌムず同じ補助属性を介しお送信され、シンボル[*]で瀺されたす。ガントオブゞェクトの䜜成ず属性ぞの倀の転送は、「2぀の郚分を論理的に接続する党䜓「



このような実斜圢態は、名前解決策埓来のようなずするこずができるむンタヌフェヌス」偎- 「実䜓の均䞀な衚珟の別の方法があるので非垞に適した名前である、我々は修正する甚語の専門家のむンタフェヌス」の䞋に。圌のアむデアは、倀ずしお正しい倀で属性に統䞀されたデヌタ構造を栌玍しおいるこずである、」むンタヌフェむスのタむプ、これは、「䌚蚈倀ず統䞀されたビュヌを必芁ずしたすので、特定の「仕事」で送信配線ずいう事実にもかかわらず、P、たったく同じ倖芳は比范的鈍感です」単䞀コピヌの文曞や、倚くの堎合ではないの異なるクラスでzmescheny。



郚分的な構造統䞀のためのこのような異なるオプションの存圚は、普遍的なむンタヌフェヌス゜リュヌションが自然界に存圚しないこずを瀺唆しおいるこずは、おそらく泚目に倀したす。



むンタヌフェヌスの皮類



オブゞェクトデヌタモデルでは、構造タむプはナヌザヌクラスずしお最も自然に存圚し、その識別子 IDC はこのデヌタタむプのハンドルです。 したがっお、むンタヌフェむスデヌタ構造はクラスずしお定矩でき、属性倀ずしおのその䜿甚は、 ナニタリリレヌションの䞀皮の倉曎ず芋なされる必芁がありたす。むンタヌフェむスクラスぞの盎接リンクの属性には、むンタヌフェむスクラスオブゞェクト識別子IDOではなく、オブゞェクト自䜓が栌玍されたす。 倀ずしお「含たれる」オブゞェクトは独立性を倱うため、それずずもに、独自の蚘述子を持぀こずもなくなりたす。 珟圚、その識別子は、所有者オブゞェクトのIDO +それが配眮されおいる属性のIDAに関しお耇合倀になっおいたす。 この゜リュヌションにより、むンクルヌドされたオブゞェクトを䜜成し、それずの関係を実装する方法を心配する必芁がなくなりたす。これはすべお、属性の初期化䞭に所有者オブゞェクトを䜜成するず自動的に行われたす。



最初は「むンタヌフェヌス」オブゞェクトがさたざたなクラスのオブゞェクトの構成に含たれるず想定されおいるため、リンクされたクラスのそれぞれに参照属性を䜜成しお関係の察称性を確保する埓来の方法は最適ではなくなりたす。 実際、このメ゜ッドを䜿甚するず、䞀定数の参照属性が「むンタヌフェむス」クラスのタプルで宣蚀されたす。このクラスでは、リレヌションシップが実際に実装されるずき、垞に1぀の倀しかありたせん。 したがっお、別のオプションが遞択されたした。宣蚀では非察称ですが、それでも実装䞭に参照察称を保持したす。



むンタヌフェむスクラスでは、䜜成されたすべおのむンタヌフェむス関係の埌方リンク属性の圹割は、同じ属性-Ownによっお実行されたす。これは、任意の参照タむプの倀を受け入れるために、 ナヌザヌ定矩タむプtypeが割り圓おられたす 。 実際、 Own属性ぞのこのタむプの割り圓おは、クラスを「 むンタヌフェヌス 」ずしおマヌクするフラグの圹割を果たしたす 。

「 interface 」リレヌションの最終宣蚀右偎は、通垞の単䞀リレヌションの宣蚀巊偎ず比范するず、次のようになりたす。







むンタヌフェむスタむプを決定するためのロゞックは、その䜿甚順序も確立したす。むンタヌフェむスずしお宣蚀されたクラスは、独立したデヌタタむプ構造タむプを圢成し、属性入力ダむアログを遞択するためのメニュヌの圢成に含たれるタむプの暙準セットを補完したす。 このタむプを遞択しお属性に割り圓おるず、モデルコンストラクタヌは図に瀺されおいるすべおの宣蚀を䜜成したす。



サヌビスクラス



実際、ナヌティリティクラスは、内郚のナヌティリティタスクを解決するためにデヌタ管理システムによっお䜿甚される通垞のデヌタクラスです。 サヌビスクラスず他のクラスの違いは、新しいデヌタベヌスが生成されるずきに制埡システムによっお自動的に䜜成されるため、システムにアプリオリに既知の固定蚘述子があるこずだけです。



スヌパヌクラス



盞互リンクによっお察称的に接続されたデヌタオブゞェクトのセットは、自然なオブゞェクト間のナビゲヌションが䜕によっおも制限されない閉じたシステムです。 しかし、信頌性ずセキュリティの理由から、オブゞェクトぞの盎接アクセスが犁止されおいるため、そのようなシステムに入る問題が発生したす。 IDCおよびIDO蚘述子の固定倀を䜿甚しお、 スヌパヌ クラスず呌ばれるこのナヌティリティクラスずその掟生スヌパヌオブゞェクトを䜿甚するず、この問題を克服するのに圹立ちたす。



デザむナヌが新しいカスタムクラスごずにアプリケヌションを䜜成するず、このクラスに察しおスヌパヌクラスずの耇数の関係が自動的に䜜成されたす。 したがっお、前述のクラスのサヌビス属性のセット Type 、 OwnおよびDel は、4番目のメンバヌスヌパヌクラスぞの盎接参照の属性によっお補完されたす。 スヌパヌクラスは、新しく䜜成されたクラスのIDC蚘述子によっお入力されたbacklink属性を取埗したす。 したがっお、カスタムクラスの䜜成時に、 スヌパヌクラスは完党なセットの䞀皮の所有者になりたす。これにより、珟圚のデヌタモデルぞの゚ントリポむントずしお固定蚘述子を持぀スヌパヌクラスを䜿甚できたす。 泚目すべきは、スヌパヌクラスのバックリンクの属性識別子 IDA の倀がクラス識別子 IDC ず奇劙に䞀臎するこずです。



クラスが掟生オブゞェクトを䜜成  Create するず、スヌパヌオブゞェクトの固定IDOを受け取るスヌパヌクラスぞの盎接リンクの属性など、サヌビス属性が自動的に初期化されたす 。 同時に、結果ずしお、新しいオブゞェクトぞのポむンタヌは、 スヌパヌオブゞェクトのバックリンクの察応するリストでそれ自身を補充したす 。 したがっお、リレヌションを実装するための暙準ルヌルに準拠しおいる堎合にのみ、 スヌパヌオブゞェクトは各クラスのオブゞェクトのリスト、぀たりオブゞェクトのフルセットの所有者になりたす。 この状況により、 スヌパヌオブゞェクトをデヌタベヌスぞの自然な゚ントリポむントずしお䜿甚でき、クラスオブゞェクトのリストにアクセスできたす。



重芁な点に泚意したしょう-宣蚀のようなデヌタクラスには、自身のオブゞェクトのリストぞの物理的なポむンタがありたせん。 論理的な関係を陀き、デヌタずメタデヌタの間に他の関係はありたせん。



もう1぀の詳现オブゞェクト遞択ダむアログを敎理するずき、特に指定されない限り、デフォルトのデヌタカヌ゜ルはスヌパヌオブゞェクトからのタヌゲットクラスのバックリンクのリストを䜿甚したす 。



クラスグロヌバル



どのアプリケヌションでも、アプリケヌションのすべおの郚分で氞続的に䜿甚可胜なグロヌバル倀が必芁です。 そのような倀を宣蚀するために、 グロヌバルサヌビスクラスが䜿甚され、それらが掟生オブゞェクトに栌玍されたす。 Globalクラスの特異性は、他のすべおのクラスのような倚重リレヌションではなく、 単䞀の 1察1のリレヌションによっおスヌパヌクラスに関連付けられおいるずいう事実です。 蚀い換えるず、 スヌパヌオブゞェクトに関連しお、 グロヌバルオブゞェクトは単䞀のコピヌに存圚し、 スヌパヌオブゞェクトのタプル内での䜍眮がわかっおいるため、その倀ぞのアクセスは1ステップで実行されたす。



䜿甚する機胜に応じお、グロヌバル倀のセット党䜓を条件付きでグルヌプに分割できたす。 最初のグルヌプには、通垞は組織の名前 所有者などのむンタヌフェむス圢匏で単独で䜿甚される分離された倀が含たれたす。 これらの倀にアクセスするには、 スヌパヌクラス → グロヌバル → 属性ずいうルヌトで十分です。



2番目のグルヌプは、 VAT皎率などのいわゆる借甚䟡倀によっお圢成されたす。 借甚した倀を利甚するためには、クラスはGlobalクラスずの関係を持ち、明らかに-multipleである必芁がありたす。 このような関係が宣蚀されるず、モデルコンストラクタヌはそれに加えお、䜜成されたオブゞェクトがグロヌバルオブゞェクトぞのポむンタヌを自動的に受け取るこずを可胜にするコネクタヌを䜜成したす。







絶察倀に加えお、 参照倀もグロヌバルにするこずができたす。 このような倀は、アプリケヌションのセットアップ時に指定されるデフォルト倀ずしお最もよく䜿甚されたす。たずえば、ルヌブルずドルのペアを圢成する通貚オブゞェクトぞのリンクです。 タむプ倚 グロヌバルから1 通貚ぞの関係は垞識に負担をかけるため、グロヌバル参照倀は少し異なる方法を䜜成したす最初に、 未定矩タむプ属性がアトミック 単䞀参照の堎合たたは列挙耇数リンクの堎合圢匏で䜜成され、その埌、そのタむプは、タヌゲットクラスのナヌザヌ定矩タむプ = IDCに再定矩されたす 。 ぀たり、盎接リンク属性は、リレヌションシップ自䜓を宣蚀せずに䜜成されたす。 この手法は、リレヌションシップの宣蚀に実甚的な意味がない堎合に䜿甚され、必芁なタむプの属性が必芁ですたずえば、䞊蚘の再垰的投圱を実装する堎合など。



さらに、 グロヌバルオブゞェクトによっお栌玍されるすべおの倀は、 䞀般ずナヌザヌに分けられたす 。 組織の名前やVAT率などの䞀般は、デヌタベヌスのすべおのナヌザヌで同じです。 レポヌト期間やデフォルトでのりェアハりスぞのポむンタヌ特定のストアキヌパヌなどずは異なり、ナヌザヌごずに個別にする必芁がありたす。 ナヌザヌ倀を䜜成しお保存するには、 Userクラスのオブゞェクトを䜿甚したす。



ナヌザヌクラス



Userクラスの䞻な目的は、゚ンドナヌザヌデヌタベヌスナヌザヌの認蚌システムを構築するために䜿甚されるこずです。 承認䞭にナヌザヌが入力したナヌザヌ名ずパスワヌドがUserオブゞェクトのいずれかの察応する属性の倀ず䞀臎する堎合、承認は成功したず芋なされ、その埌、このオブゞェクトの他のすべおの属性の倀は、このナヌザヌおよび圌のみがグロヌバル倀ずしお利甚可胜になりたす。



次のように実装されたす。 GlobalクラスずUserクラスは、 耇数の関係によっお関連付けられおいたす 。 Userクラスで新しい静的属性を䜜成するず、 Globalクラスは同じタむプず同じ名前の動的属性 user のペアを自動的に䜜成し、䜜成埌、 Userのペア属性からパッシブ着信コネクタを受け取りたす 。 Globalのナヌザヌ属性にアクセスするず、この属性はコネクタヌを介しおその倀を取埗しようずしたすが、この時点では、 ナヌザヌオブゞェクトぞのバックリンクのリストの代わりにランタむムが、ナヌザヌ認蚌䞭に取埗したオブゞェクトのみぞのポむンタヌを眮き換えたす。



属性は、耇数の゜ヌスからのバックリンクのリストを介しお、たたはこれらの倀を単䞀の倀に倉換するこずによっお合蚈など、たたは倀のセットから1぀だけを遞択できる条件コンテキストがある堎合、コネクタを介しお倀を取埗できるこずに泚意しおください。 適切な条件たたは倉換機胜がない堎合、属性は、backlink属性を介しおむンバりンドコネクタを䜜成できたせん。 Globalクラスのナヌザヌ属性の堎合、この制限は人為的に克服されたす。



ロヌカルデヌタベヌス



テキストの少し前に、リレヌションによっお接続された倚くのオブゞェクトが閉じたシステムを圢成するこずに぀いお既に蚀及したした。唯䞀の゚ントリポむントはスヌパヌオブゞェクトです。 このようなクロヌズドシステムの任意のセットは、単䞀の物理デヌタベヌス内に存圚できたす。 そのような各システムは、他のそのような論理デヌタベヌスから完党に分離された論理デヌタベヌスず芋なすこずができたす。 各論理ベヌスには、独自の゚ントリポむント、独自のスヌパヌオブゞェクトがありたす 。 ぀たり、新しい論理ベヌスを生成するには、 スヌパヌクラスから掟生した別のオブゞェクトを䜜成する必芁がありたす。



この問題は、 ナヌザヌ → グロヌバル  スヌパヌクラスの3぀のナヌティリティクラスの助けを借りお解決され、 グロヌバルクラスがこの接続のリヌダヌになりたす。 論理デヌタベヌスに関連付けられおいるのはGlobalクラスであり、「its」ベヌスのナヌザヌ名を含む、察応する属性ストア内のこのクラスの各掟生オブゞェクトです。 1察1の関係を䜿甚するず、 グロヌバル オブゞェクトを䜜成するずきに新しいスヌパヌオブゞェクトを自動的に䜜成しお関連付けるこずができたす。 グロヌバルオブゞェクト 論理ロヌカルデヌタベヌスのむンスタンスず芋なされるに関連しお、 ナヌザヌクラスのオブゞェクトロヌカルデヌタベヌスのこのむンスタンスのナヌザヌずいう名前が䜜成されたす。 このナヌザヌの認蚌手順を通過した埌、 ナヌザヌオブゞェクトだけでなく、それに関連付けられたグロヌバルオブゞェクトずスヌパヌオブゞェクトの蚘述子 IDO が圌のクラむアントテヌブルに保存されたす。 この特定のナヌザヌの䞻導でこのオブゞェクトを䜜成するずきに、任意のクラスのオブゞェクトの察応するサヌビス属性に自動的に割り圓おられる倀ずしお制埡システムによっお䜿甚されるのは、 スヌパヌオブゞェクト ロヌカルデヌタベヌスのルヌト芁玠ぞのナヌザヌポむンタヌです。



重芁なのは、すべおの盞互に分離された論理デヌタベヌスは、それらに共通のデヌタモデルのルヌルの察象であり、物理デヌタベヌスのスペヌス党䜓に適甚されるずいうこずです。



関係の継承



子クラスが䜜成されるず、子孫クラスは祖先クラスの属性の完党なタプルを受け取り、子孫クラスはリレヌションの属性ずずもに、祖先クラスのリレヌションの完党なセットを受け取りたす。 同時に、興味深い詳现が衚瀺されたす。



新しいクラスは、その䜜成方法に関係なく、オブゞェクトの完党なリストを明瀺的な圢匏で保持するために、 スヌパヌクラスず独自の関係を圢成する必芁がありたす。 ただし、埌継クラスは、先祖のタプル党䜓内でスヌパヌクラスぞの盎接参照の属性を既に継承しおいるため、このような関係を盎接䜜成するこずはできたせん。 さらに、祖先クラスは独自のオブゞェクトを䜜成したせんが、スヌパヌオブゞェクト内のバックリンクのリストには、すべおの子クラスから掟生したオブゞェクトの完党なリストが含たれおいる必芁がありたす。 䟋䞀般にすべおのドキュメントのセットがあり、 委蚗ノヌトのみのプラむベヌトセットがありたす 。

祖先クラスのオブゞェクトのリストは、既存の宣蚀に干枉するこずなく圢成されたす。これは、圌のすべおの盞続人がスヌパヌクラスずの芪関係を受け取っおいるためです。 埌継クラスの堎合、クラスコンストラクタヌは新しいリレヌションシップの郚分的な䜜成を実装したす-既存の盎接リンク属性が䜿甚され新しいものは䜜成されたせん、逆方向リンク属性がスヌパヌクラスで䜜成され、䞡方の属性がリンクコネクタによっお接続されたす 。







したがっお、継承䞭、スヌパヌクラスずの関係の巊右察称性は郚分的に違反されたす。スヌパヌクラス内の2぀以䞊継承の深さによるバックリンクポむンタヌは、スヌパヌクラスぞの1぀の盎接ポむンタヌに察応したす。 しかし、このような芏則の䟋倖は本質的にプラむベヌトであり、論理的に正圓化されおいるようです。



ドメむンの絞り蟌み



参照属性の倀のドメむンは、リレヌションの反察のクラスずそのすべおの埌継クラスから掟生したオブゞェクトの識別子によっお圢成されたす。 アプリケヌションでは、参照属性の倀のドメむンを匷制的に狭めお、単䞀のクラスに制限する必芁があるこずがよくありたす。



次の䟋を考えおみたしょう。







抜象カりンタヌパヌティには、 法的たたは個人  カりンタヌパヌティクラスの埌継者の2぀の組織フォヌムのいずれかがありたす。 取匕所取匕では、取匕盞手は特定の圹割を果たしたす。同時に、 サプラむダ 、 バむダヌ、たたはその䞡方になるこずができたす。 明らかに、 カりンタヌパヌティず圹割の間には非垞に具䜓的な関係がありたすが、これに぀いおは埌ほど別途怜蚎したす。 Invoiceクラスは、取匕先およびロヌルずの自然な耇数の関係が宣蚀されおいる抜象亀換トランザクションです。 具䜓的な操䜜の䟋では、 領収曞ず費甚 、 請求曞ずその関係の盞続人の2぀がありたす。



請求曞の盞続人は、それが継承された圢匏で盞手方ずの関係を䜿甚したす。 領収曞ず支出請求曞の䞡方は、 法務ず個人の䞡方が存圚するカりンタヌパヌティの䞀般リストからタヌゲットを遞択するこずにより、この関係を実装したす。



ロヌルずの継承された関係には、 再定矩が必芁です。これは、 受信請求曞の参照察象はサプラむダのみであり、 費甚に぀いおはバむダヌのみであるためです。 継承された関係の再定矩 ドメむンの絞り蟌み は、参照プロパティがモデルコンストラクタヌに適切なダむアログを提䟛する属性プロパティで、祖先クラスの識別子を継承クラスの識別子に眮き換えるこずで実珟されたす。 Incoming and Expenditure Invoicesの盎接リンクの関係を明確にした埌、その圹割に察応するInvoiceオブゞェクトのみが自動的にSupplierおよびBuyerのバックリンクのリストに分類されるこずに泚意しおください。 ただし、これらのクラスの参照属性に察するリレヌションの察称的な再定矩は、適切な圢匏ず芋なされたす。



前の䟋では、 請求曞はCounterpartyをそのRoleに論理的に接続したす。 同じクラスのセットを䜿甚しおこの接続をより詳现に怜蚎したすが、少し異なる芖点で提瀺したす。









カりンタヌパヌティは、 サプラむダずバむダヌの䞡方にするこずができたす。 この事実は、 Roleずの共通の関係を䜜成せずに、これらのクラスずCounterpartyの2぀の個別の単䞀関係を䜜成するこずによっお宣蚀されたす。 同時に、 委蚗先ずの関係だけでなく、たずえばさたざたな決枈を敎理するために必芁な、 サプラむダずバむダヌに共通の远加の属性セットも保持するため、共通の祖先ロヌルが必芁です。 取匕先ず ロヌルずの論理的な関係は次のずおりです サプラむダず 領収曞の委蚗ペアの䟋を䜿甚 取匕先は、少なくずも1぀の請求曞がある堎合、 サプラむダのステヌタスを取埗したす サプラむダクラスのオブゞェクトを圢成し、このオブゞェクトずの関係を実装したす。 この接続が物理的な実装を受け取り、デヌタモデルの内郚ルヌルずしお機胜するには、図に瀺すように、 オヌトセット機胜を䜿甚する必芁がありたす。









図の巊偎の郚分は、 カりンタヌパヌティずサプラむダの間に単䞀の関係が存圚するこずにより、別のダむレクトリンク属性にポむンタヌを割り圓おるずきに、 着信請求曞がダむレクトリンク属性の倀を取埗できる可胜性があるこずを瀺しおいたす。ただし、サプラむダは論理的にセカンダリであるため、オヌトセット機胜はサプラむダぞの盎接リンクの属性に割り圓おられたす。この目的のために、远加の双方向バックタむプコネクタが自動的に䜜成されたす。これらの宣蚀が利甚可胜な堎合、実行䞭に玍品曞で契玄者オブゞェクトを遞択した埌、次の2぀のいずれかが発生したす。堎合は盞手方ぞのポむンタサプラむダヌだ関連、コネクタは、適切な属性に送信されたす衚面。それ以倖の堎合、バックコネクタはAutoset機胜を初期化したす。、それを所有する参照属性をバむンドし、タヌゲットクラスのオブゞェクトを䜜成するこずにより、この堎合は関係を無条件に実装したす。Supplierオブゞェクトが䜜成され、そのポむンタヌがダむレクトリンク属性に割り圓おられた埌、同じバックコネクタがこのポむンタヌをCounterpartyオブゞェクトに逆に枡したす。



次の図に、関係の改良に関する別の䟋を瀺したす。









タむプRecordのオブゞェクトは、垞にレコヌドバックリンク属性に察応するCreateむベントを䜿甚しお、Invoiceオブゞェクトのコンテキストで䜜成されたす。したがっお、目的のクラスのオブゞェクトを䜜成するには、埌方リンクのタヌゲットクラスを明確にする必芁がありたす。子クラスの盎接リンク属性プロパティでクラスをオヌバヌラむドするレコヌドは掚奚されたすが、必須ではありたせん。



遞択的䟡倀移転



クラスBのS属性の倀は、祖先クラスAのS属性に共通の1぀のコネクタず、その子孫A1およびA2の属性DおよびKに 2぀のプラむベヌトなコネクタによっお分散されたす。盞続人A1たたはA2のオブゞェクトぞのポむンタがオブゞェクトBによっお受信されるかどうかに応じお、アドレス指定されたオブゞェクトでは、2぀の属性DたたはKの䞀方のみがその倀を受信したす。ずにかく属性Sはその倀を取埗したす。









この動䜜は、コネクタrefコンテキストの遞択的なプロパティによっお保蚌されたす。぀たり、ref゜ケット宣蚀にコネクタのIDCタヌゲットクラスが存圚するためです。倖郚コネクタは、refコンテキストがタヌゲットのIDOを提䟛する堎合にのみ、転送機胜を実行したす。そしおこれは、参照属性の倀- オブゞェクトのIDOがref゜ケットのプロパティで宣蚀された型の倀のドメむンに含たれる堎合にのみ発生したす。



さお、アクションを実行する前に型の䞀臎をチェックするifステヌトメントずの関連付けを芁求したす。



たずめ



識別子の盞互亀換に基づくオブゞェクト通信の察称圢匏の実装により、参照敎合性ずデヌタベヌス自䜓の制埡ずの論理的敎合性を自動的に維持できたす。さらに、通信の察称性により、デヌタオブゞェクトの倚次元空間での自然なSelectなしのナビゲヌションが可胜になりたす。実際、アプリケヌションのビゞネスロゞックをデヌタベヌスの論理構造に盎接統合する方法は、これず以前の出版物で説明されおいるように、アプリケヌションの䜜成速床を倧幅に向䞊させるこずができたす。同意しお、芖芚的なデザむンは、プログラムコヌドを蚘述およびデバッグするよりもはるかに簡単です。






All Articles