2016-07-22 2 views
0

データベース(Django + PostgreSQL)上にInventoryテーブルを設計しようとしていますが、他のものと複数の多形性の関係を実装するのに最も正しい方法はどちらですか?テーブル。インベントリデータベースでポリモーフィックな関連付けを実装する

基本的に、各エントリにはテーブルの外部キーである必要があります。たとえば、製品を購入した可能性があるなど、テーブルのセットを参照できるinputフィールドが必要です。または製造/製造された可能性がある(すなわち、ProductionOrder)。同様に、最終的には(別のものを製造するために使用される場合)、例えば、SalesOrder(製品が販売されている場合)、または別のProductionOrderを参照することができoutputを有するであろう。

もちろん、単一の外部キーフィールドは異なるテーブルのエントリを参照することはできませんので、これを達成する最も良い方法は何ですか?私は同様の質問に対する回答を読んでいますが、提案はこのようなケースには適していないようです。中間テーブルを作成することは、売り上げと製造指図が少なくとも「スーパーセット」に属していないため、適切ではないようです。

私の現在の考えは、入力と出力の両方に可能な限り多くのフィールド(つまり、idProductionOrderidSalesOrder)を設定し、両方のフィールドに同時にデータが含まれないように-NAND-制約を追加することです。これは実用的な解決策かもしれないが、おそらく非常にきちんとしたものではないかもしれない。より良いアプローチがありますか?

答えて

0

私は、あなたが探していることはGenericForeignKey分野だと思います。これは、異なるモデルを指すことができます。ここにあなたの入力に基づい例:

class YourModel(models.Model): 
    limit = (models.Q(app_label = 'YourApp', model = 'ProductionOrder') | 
      models.Q(app_label = 'YourApp', model = 'SalesOrder ') | 
      models.Q(app_label = 'YourApp',model = 'ProductionOrder ')) 

    content_type = models.ForeignKey(ContentType, limit_choices_to = limit) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 

あなたは彼らがあなたもジャンゴ・スマート選択を使用することを検討すべきである管理者にうまく統合する場合docu

を参照してください。

関連する問題