Eu tenho uma coluna RSEFlag que contém um valor de sinalizador que é a soma de um ou mais de 1, 2, 4. Tenho uma tabela separada que contém a descrição de cada um desses valores de sinalizador:
RSECode RSEDescription
------- --------------
4 Environment
1 Reliability
2 Safety
Gostaria de restringir minha coluna RSEFlag para que seja menor ou igual à soma dos valores da tabela RSE.
Este é um exercício que vale a pena e qual é a melhor abordagem?
CHECK
restrição definida em uma UDF para impor isso, mas isso vem com muitas ressalvas .INSERT
eUPDATE
disparar para fazer esse mesmo trabalho.No Oracle, você pode criar uma visualização materializada que una as duas tabelas e coloque sua
RSEFlag
coluna ao lado da soma apropriada. Em seguida, você aplicaria umaCHECK
restrição para impor issoRSEFlag <= RSECode_SUM
. Esta discussão Pergunte ao Tom tem um exemplo de como fazer isso. (Pesquisealter table dept_tot_mvw add constraint
e observe quedept_tot_mvw
é uma visão materializada.)Infelizmente, você não pode usar essa abordagem, pois as restrições não são permitidas em exibições indexadas no SQL Server.
IMO, não vale a pena tentar impor esse tipo de restrição com DRI por causa dos problemas de simultaneidade associados ao UDF e aos métodos de acionamento de restrição de dados - e há outras ressalvas também, como Nick menciona
É claro que você pode 'impor' esse tipo de restrição em uma API transacional - veja aqui minha resposta a uma pergunta relacionada para obter detalhes do que quero dizer