본문 바로가기

Library/Database

From ER Model To Database, and View

관계집합에서 전체 참여란 무엇을 의미하는 것인가? 전체적인 참여라는 것은, 어떤 관계 집합이 있을 때, 특정 개체 집합이 이 관계 집합에 전체적으로 참여한다면, 이 특정 개체 집합의 원소 모두가 관계 집합의 부분 집합에 연관되어 있어야 한다는 것을 의미한다. 따라서, 부분적으로 참여한다는 것은, 이 개체 집합의 원소들이 반드시 관계 집합의 원소와 대응될 필요가 없다는 뜻이다.

외래 키(foregin key)는 참조하는데 목적이 있다. 즉, 관계 집합에서 특정 값이 외래 키로 선언되었다면, 반드시 그 값은 의미있는 값이어야 한다. 따라서, 참조 대상으로 선언된 키 값을 삭제하거나, 갱신하거나 하는 것은 반드시 데이터 무결성 조건을 위배하지 않아야 한다. 데이터 무결성 제약 조건은 현실 세계를 추상화하는 과정(데이터 모델링)을 거치면서 결정되며, 데이터베이스는 스키마를 통해서 이 제약 조건을 실질적으로 규정한다.

ER 모델을 데이터베이스로 옮기는 작업은 기계적이지만 개별 상황을 고려해야 하는 경우도 있다. 개체의 경우, 단순히 개체는 테이블로, 속성은 필드로 구성하면 되겠지만 관계 집합의 경우는 상황을 고려해서 설정해야 한다. 예를 들어, 관계가 자신만의 속성을 가진다면 관계 집합을 따로 테이블로 표현하는 것이 적절하다. 그러나, 관계가 자신의 고유의 속성을 가지고 있지 않다면, 관계가 가지는 개체 집합 내에서 데이터를 표현하는 방법도 고려해 볼 수 있다. 이 경우, 소유자와 참여 관계, 그리고 무엇을 외래 키로 선택해야 하는지 따위가 고려 대상이 될 수 있을 것이다.

뷰(view)는 외부 스키마(external schema)로 표현하기도 한다. 뷰는 데이터베이스에 물리적으로 존재하는 테이블이 아니며, 필요에 따라 임시적으로 계산된 테이블이다. 뷰는 외부 애플리케이션(application)이 필요로 하는 정보만을 조합하여 보여주는 역할만을 하게 되며, 이것은 외부 애플리케이션이 필요로 하지 않는 정보는 감춘다는 점에서 보안 측면에서도 유리하다. 뷰에서는 정보의 검색 및 추출이 주로 일어나게 되며, 데이터의 삽입, 삭제가 일어나지 않도록 주의를 기울여야 한다. 뷰에서 보여주는 정보는 해당 튜플(tuple)들이 저장되어 있는 실제 테이블에서 유일하다는 것을 알려주는 키 값이 포함되어 있지 않을 수도 있기 때문이다. 데이터의 삽입 및 삭제와 같은 동작은 데이터의 유일성을 검증해야 하기 때문에, 데이터를 구별할 키 정보가 완전하지 않다면 이런 동작을 안전하게 처리할 근거가 없다. 최근의 SQL 표준에서는 뷰에서도 데이터에 대한 갱신이 가능하도록 허용하고 있지만, 이 역시 뷰에서 데이터에 대한 적절한 키 값을 가지고 있는 경우에만 가능하도록 제한하고 있다.