1

Doctrine、Propel、Eloquent を見てきましたが、これまでのところ、他の 2 つのテーブル間のハイブリッド関係を持つ中間テーブルの存在を考慮したいと思っている人はいません。

http://s14.postimg.org/uoo8xt1sx/Screen_Shot_2013_07_29_at_2_50_47_PM.png

personはpersonVehicle と1対多の関係を持ち、これは の主キーによって促進されますpersonId

vehicleはpersonVehicle と1 対 1 の関係にあり、これは の主キーによって促進されますvehicleId

これまで見てきたすべてのORMは、特異な関係を処理します

  1. 一対一
  2. 一対多
  3. 多対多

ただし、2 つ以上の組み合わせはありません。そうですか?これらの関係 (人、車両、およびそれぞれの ID を personVehicle に) に ORM または代替手段を使用して挿入する最良の方法は何ですか?

4

2 に答える 2

1

これは古い質問ですが、偶然見つけて、2セント追加すると思いました...

オブジェクトの正確なドメインはわかりませんが、 vehicle と personVehicle がテーブル継承の良い候補である可能性があります。これは Doctrine が提供するものです: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

ここでの秘訣は、車両モデル (テーブル) が車両に関連するすべての共通フィールドを保持しているが、抽象的で決して使用されないことです。子モデルのみが使用されます。この場合は personVehicle です。その後、車両の他の子クラスも簡単に追加できます。

于 2014-07-11T18:02:52.270 に答える
0

あなたが説明する関係は、1 人のユーザーと複数の車両の間の事実上の 1 対多の関係です。

"vehicle" と "personVehicle" の間に "1 対 1" の関係がある場合、"personVehicle" は基本的に "vehicle" テーブルの拡張です。データベースが完全に取り込まれた場合、これらの両方のテーブルに同じ量の行があり、各 vehicleId に対して 1 行になります。共通の vehicleId をインデックスとして使用して、データや関係があいまいになることなく、「vehicle」テーブルと「personVehicle」テーブルを組み合わせることができます。

とにかく、本当にこの方法でテーブルを作成したい場合は、3 つのモデルを作成し、personVehicle を独自のものにすることができます。あなたの言うとおりにして、

vehicle-(1 対 1)-personVehicle-(多対 1)-user

于 2013-11-03T22:33:10.413 に答える