1

私のテーブルの 1 つは、orderone to manyの 2 つのテーブルPaymentMethod1およびPaymentMethod2. null を回避できるように、属性がまったく異なるため、個別の「支払い方法」テーブルを作成しました。ただし、order特定の行は、任意の 1 つのテーブルの特定の行にリンクします - PaymentMethod1OR PaymentMethod2。これには、主キーの値がこれらのテーブルの両方で一意である必要があります。つまり、2 つの行が同じ主キーを持つことはできPaymentMethod1ません。PaymentMethod2

ここに画像の説明を入力

PaymentMethod1このように主キーを選択するのは正しいPaymentMethod2ですか?はいの場合、どのように実装しますか?

4

2 に答える 2

2

MySQL には、このタイプのポリモーフィズムを処理する組み込みメソッドがありません。

1 つの解決策は、orderテーブルに 2 つの外部キー列を用意することです。1 つは最初の支払い方法用で、もう 1 つは 2 番目の支払い方法用です。NULL を許可し、適切なものだけを入力してください。

この方法では、引き続き外部キー制約を使用できますが、完全には正規化されていません。

もう 1 つの方法は、支払い方法キーをテーブルから取り出し、order代わりに支払いタイプごとに 1 つずつ、2 つのジャンクション テーブルを作成することです。orderこれらのジャンクション テーブルを使用して、テーブルを適切な支払いタイプに結合します。この方法では、外部キー制約を使用することもでき、前の方法よりも正規化されています (NULL 値は必要ありません) が、外部キーの関係 (およびクエリ) はもう少し複雑です。

于 2015-03-05T14:35:19.517 に答える