Sql-Server

基於兩列創建唯一索引(雙向)

  • March 9, 2022

我想創建一個檢查約束或唯一索引來驗證我沒有在基於 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記錄失效。

我寧願看到這在其他地方處理。大概是這樣的順序:

  1. 在應用程序中註意這一點。假設您可以控制可以在此表中插入/更新的內容,請在程式碼中處理它。
  2. 將執行插入/更新的過程相應地寫入此表。
  3. 我不是觸發器的忠實粉絲 - 但這可能是觸發器可以提供幫助的情況。這是基於兩個不同列的條件邏輯,並根據您最近更新中所述的規則檢查它們是否存在。

我還會問自己更多關於規則的資訊,它們是否有意義,它們是否可以擴展,以及是否有其他方法可以達到相同的結果。

引用自:https://dba.stackexchange.com/questions/308282