Sql-Server
基於兩列創建唯一索引(雙向)
我想創建一個檢查約束或唯一索引來驗證我沒有在基於 2 列的表中創建重複項,我不希望這些列中有相同的兩個 ID。
考慮如下內容:(但這是不可能的)
CREATE UNIQUE INDEX entity_merge_no_recursive_merge_request_index on ENTITY_MERGE ( TYPE_CODE, CONCAT( IIF(INTO_ID > FROM_ID, INTO_ID, FROM_ID), '|', IIF(INTO_ID < FROM_ID, INTO_ID, FROM_ID) ) )
我想實現的範例:
我想確保在此處插入最後一個會失敗,因為它與 ID 1 相同但相反。
重要的是不要有任何
FROM_ID
高於或低於的規則,TO_ID
因為它應該可以合併任何 2 條記錄,並且有一些自動化或使用者通過前端來選擇誰是獲勝者記錄。這將使FROM_ID
記錄失效。
我寧願看到這在其他地方處理。大概是這樣的順序:
- 在應用程序中註意這一點。假設您可以控制可以在此表中插入/更新的內容,請在程式碼中處理它。
- 將執行插入/更新的過程相應地寫入此表。
- 我不是觸發器的忠實粉絲 - 但這可能是觸發器可以提供幫助的情況。這是基於兩個不同列的條件邏輯,並根據您最近更新中所述的規則檢查它們是否存在。
我還會問自己更多關於規則的資訊,它們是否有意義,它們是否可以擴展,以及是否有其他方法可以達到相同的結果。