무결성과 정합성

무결성은 단순히 데이터가 맞냐 틀리냐의 관점이고,

정합성은 복제속성, 중복속성, 가공속성 등 원천데이터로 부터 파생된(derived) 데이터간의 논리적 값이 일치하느냐의 관점이다.

 

무결성이 위배된 데이터는 찾기도 쉽고, 고치기도 쉽다. 문제를 찾았으니 고치면 그만인것이다.  그러나 정합성의 위배는 문제가 완전히 다르다.

논리적 값이 일치해야하는 값들간의 부정합성이다 보니 값이 달라지는 이전의 문제인지 이후의 문제인지 부터 찾아야 하고,

문제가 발생된 지점(속성)을 찾았다면 그 이후 해당 문제의 속성값을 원천으로해서 파생된 정합성이 보장되어야 하는 속성들도 모두 찾아 수정해야 한다.

그래서 정합성을 지키지 못하는 DB 설계나, 프로그램 로직이 많은 비용을 발생시킨다고 하는 것이다.

이것이 특히 정합성 유지를 강조하는 이유라 하겠다. 

 

이러한 문제가 발생하는 이유는 정합성이 보장되어야 하는 속성들간에는 자신이 도출된 값, 즉 자신이 참조해야할 바로 앞의 데이터만을 바라봐야 하는데

가장 원천이 되는 값을 각개로 바라보게 될때 발생한다. 물론 각각의 속성들이 원천데이터로 부터 잘못된 논리적 계산을 해서 발생할 수도 있다.

 

암튼 정합성이 지켜진다라는 의미는

원천데이터가 무결성이 지켜졌든 훼손되었든간 이를 바라보는 derived attribute간에는 논리적 값이 일치한다면 정합성이 유지된것이다.

다시말하지만 정합성은 값이 맞느냐 틀리느냐의 관점이 아니고,

같은 원천데이터로 부터 파생된 모든 속성들의 논리적 값이 모두 일치하느냐 하지않느냐의 관점이라는 것이다.

즉 틀린값으로 모든 derived attribute의 값이 일치한다면 그건 정합성이 지켜진것이다. 그리고 그래야 한다.

 

 

아래 그림는 실제 Bidding System의 입찰결과장표로, 원천데이터로 부터 계산된 가공데이터의 예시이다.