を更新するI次の表があります。ベストプラクティスは、EAVテーブルの行
SubjectID AttributeID ValueID
1 1 2
1 1 3
1 2 1
2 1 3
2 2 1
1 3 1
属性が(同じ属性については、上記の表では、複数の出演)複数の値を持つことができます。 同じ属性(異なる値)の外観の数に制限はありません。
Select * from Subject WHERE SubjectID=1 AND AttributeID=1
--returns:
SubjectID AttributeID ValueID
1 1 2
1 1 3
後::
は、私はそう
前に、唯一の1 AttributeIDが1であるところにValueIDを変更するには、SubjectID = 1と件名を更新するためにwan't
Select * from Subject WHERE SubjectID=1 AND AttributeID=1
--returns:
SubjectID AttributeID ValueID
1 1 1
これは、オプションのパラメータ(すべてnullおよび提供された属性のみを更新する)、これは問題ではありません。私の質問は:
この行を更新するベストプラクティスは何ですか?私は実行可能な以下の答えを参照してください:
- 指定された属性を含むすべての行を削除し、新しいものを挿入します。
- (以上1は、同じ属性のために存在している場合ではない良い解決策)(指定されたサブジェクトのために)そのタイプの1つの属性のみが1つの更新がある場合
他のアイデア?
あなたが他の場所で、各被験者の属性のペアのための複数の値を使用していますか?そうでない場合は、これらを削除し、再現を防ぐためにテーブルのデザインを更新することをお勧めします。これは、あなたがこのテーブルで書く*すべての*クエリ/ SPを簡素化します。これらのレコードを保持する必要がある場合は、削除してからトランザクション内に挿入します。 –
私は本当に選択肢がありません、私はこの設計を実装しなければなりませんでした、ほぼ完了しました、アップデートについてまわるだけです.O – berthos