0

たとえば、次のようなモデルがあります。

class User(Base):
    photo_id = Column(ForeignKey('photo.id'))

class Group(Base):
    photo_id = Column(ForeignKey('photo.id'))

class Photo(Base):
    __tablename__ = 'photo'

    user = relationship('User', backref='photo')
    group = relationship('Group', backref='photo')

しかし、最後のモデルでは and との関係UserGroup良くありません。なぜなら、ある場合には最初の関係が None になり、他の場合には 2 番目の関係が None になるからです (写真の所有者はユーザーまたはグループのみであり、両方ではないため)...モデルへの外部キーを持つ 2 つ以上のモデルにPhotoなる - 状況はさらに悪化します。そのような関係を正しくする方法は?

前もって感謝します!

4

3 に答える 3

1

ユーザーとグループが同じテーブルに格納されていない場合、2つの関係でそれらを定義することに問題はありません。これらの2つの関係は、2つの異なるSQLクエリを意味し、実際には、これら2つの異なるクエリが必要です。

ユーザーとグループを同じテーブルに格納できる場合は、継承を使用できます。親テーブルへのリレーションショップを作成します http://docs.sqlalchemy.org/en/latest/orm/inheritance.html

または、そのhttp://docs.sqlalchemy.org/en/rel_0_7/core/schema.html#reflecting-viewsのビューを作成し ます

于 2012-06-23T15:55:21.860 に答える
1

テーブルの継承を使用します: http://docs.sqlalchemy.org/en/rel_0_7/orm/extensions/declarative.html#joined-table-inheritance

このスライドをお勧めします: http://www.slideshare.net/tyler4long/quickorm . SQLAlchemyをベースにしたquick_ormについてです。同じ問題がテーブルの継承によってどのように解決されるかがわかります。

スライド 7: 多くのモデルは「コメント」との関係を持つ必要があります。 スライド 8: 問題を解決するために「コメント可能」という名前の親クラスを追加します。

構文は SQLAlchemy とは異なりますが、主なアイデアは理解できます。

于 2012-07-01T11:45:36.427 に答える
0

この種の関係をモデル化する正しい方法は1つではないと思います。カーディナリティ、ナビゲーション性も考慮すべき事実です。

モデリングの問題と非常によく似た解決策については、GenericAssociationsの例を参照してください。例は最初はやや複雑に見えるかもしれませんが、SQLAlchemyとのポリモーフィックな関連付けに関するMikeのブログを読むと、そこで何が起こっているのかがかなり明確になっているはずです。最終的にモデルが多少異なり、単一の属性(または)Photoで正しい親に戻ることはできない場合がありますが、実際に関係をの側からナビゲートする必要がありますか?parentownerPhoto

于 2012-06-25T15:59:10.027 に答える