我有以下表:最佳實踐以更新EAV錶行
SubjectID AttributeID ValueID
1 1 2
1 1 3
1 2 1
2 1 3
2 2 1
1 3 1
一個屬性可以有多個值(在上表中的多個出現爲相同的屬性)。 對於相同屬性(不同值)的出現次數沒有限制。
我wan't更新與SubjectID = 1的主題,到VALUEID更改爲僅1在屬性Id爲1,因此
前:
Select * from Subject WHERE SubjectID=1 AND AttributeID=1
--returns:
SubjectID AttributeID ValueID
1 1 2
1 1 3
後:
Select * from Subject WHERE SubjectID=1 AND AttributeID=1
--returns:
SubjectID AttributeID ValueID
1 1 1
我正在做這個與可選參數的存儲過程(所有null和只更新提供的屬性),現在這不是問題。我的問題是:
更新這些行的最佳做法是什麼?我看到以下答案是可行的:
- 刪除所有包含指定屬性的行,然後插入新的;
- 如果只有一個類型(指定科目)的屬性更新一個(沒有,如果有超過1相同屬性的很好的解決方案)
任何其他的想法?
您是否使用了其他地方的每個被攝體屬性對多個值?如果沒有,我建議刪除這些並更新表格設計以防止重新發生。這將簡化您在此表上編寫的所有查詢/ SP。如果你需要保留這些記錄,那麼是的,我會刪除然後插入 - 在一個事務中。 –
我沒有真正的選擇,我不得不實施這個設計,差不多完成了,只停留在更新o.O – berthos