2008. 9. 13. 01:58ㆍStudy/Database
1. 관계는 왜 중요한가
관계는 관계형 데이터베이스의 중요한 구성 요소다.
- 논리적으로 서로 연관된 한 쌍의 테이블들 사이의 연결을 설정한다.
- 테이블 구조를 더 정제하고 이중 데이터를 최소화하도록 도와준다.
- 여러 테이블들로부터 동시에 데이터를 추출할 수 있도록 해 주는 메커니즘이다.
2. 관계의 종류
1) 일대일 관계
일대일 관계는 보통 부분 집합 테이블을 수반한다.
2) 일대다 관계
데이터베이스 내의 한 쌍으 테이블들 사이에 존재하는 가장 일반적인 관계이다. 데이터 무결성 관점에서 이중 데이터를 제거하고 중복 데이터를 절대적으로 최소화해 주기 때문에 중요하다.
3) 다대다 관계
다대다 관계의 문제
- 테이블들 중 하나로부터 정보를 추출하는 것이 지루하고 다소 어렵다.
- 테이블들 중 하나가 대량의 중복 데이터를 포함한다.
- 양 테이블에 이중 데이터가 존재한다.
- 데이터를 삽입.갱식.삭제하기 어렵다.
4) 자기 참조 관계
테이블 내의 주어진 레코드가 테이블 내의 다른 레코드와 연관될 때 테이블은 자기 자신과 자기 참조 관계를 가진다. 자기 참조 관계도 일대일, 일대다, 다대다 관계를 가질 수 있다.
3. 현존하는 관계 식별하기
1) 테이블 관계 식별 행렬 만들기
- 데이터베이스의 모든 테이블드? 행렬을 만드는 것으로 관계 식별 작업을 시작한다.
- 테이블 목록의 테이블명을 행과 열에 동일한 순서로 차례로 적는다.
- 왼쪽 위에서 부터 각각의 테이블 쌍이 갖는 직접적인 관계를 판단한다.
2) 테이블 쌍이 갖는 관계를 식별시, 관점
- 연결적(associative)
a) 첫번째 테이블 내의 한 레코드는 두 번째 테이블 내의 하나 이상의 레코드들과 연관될 수 있는가?
b) 테이블 내의 한 필드는 다른 필드와 연관될 수있는 가?
- 상황적(contextual)
첫째 테이블에 의해 표현되는 주제의 하나의 인스턴스를 둘째 테이블에 의해 표현되는 주제의 여러 인스턴스들과 대조한다. 여기서 소유 지향과 행위지향의 두 범주가 있다.
a) 소유 지향 질문 : '소유하다', '가지다', '~의 부분이다', 및 '포함한다'와 같은 문구를 포함한다.
b) 행위 지향 질문 : '만들다', '방문하다', '놓다', '가르치다', '출석하다'와 같은 행위를 수반한다.
3) 행렬 상에서 한 쌍의 테이블 사이의 관계를 식별하기 위해 사용할 절차
- 한 쌍의 테이블들을 선택하고 첫째 테이블과 둘째 테이블 사이의 교차점의 항목을 적는다.
- 현재 작업 중인 행렬의 같은 쪽에 앴는 둘째 테이블에 위치를 잡고, 이것과 행렬의 반대쪽에 있는 첫째 테이블과의 사이에 있는 교차점의 항목을 적는다.
- 이 두 항목들에 적절한 공식을 적용하여, 테이블들 사이의 공식적인 관계를 식별한다.
- 적절한 방법으로 관계를 그린다.
- 행렬에서 두 항목을 삭제한다.
4. 각각의 관계 설정하기
일대일 또는 일대다 관계에 참여하는 테이블들 사이에 연결을 설정하기 위해서 주키와 외래 키를 사용한다.
1) 일대일 관계
부모 테이블의 주 키의 복사본을 취해서 자식 테이블의 구조에 포함시킴으로 일대일 관계를 설정한다. 자식테이블의 외래키는 자식테이블에서 주키 역할을 수행한다.
2) 일대다 관계
관계의 일인 테이블에서 주 키의 본사본을 취하고 다측에 포함시킨다.
3) 다대다 관계
연결 테이블로 다대다 관계를 설정한다.
- 다대다 관계 설정 절차
a) 관계의 각 테이블로부터 주 키의 복사본들을 취하고, 테이블의 구조를 만들기 위해 이 키들을 사용하여 연결 테이블을 정의한다. 연결 테이블에서 이 필드들은 다음과 같은 두 개의 서로 다른 목적으로 사용된다. 합쳐져서 테이블의 복합 주 키를 구성하고, 각각은 부모 테이블과 연결 테이블 사이의 관계를 설정하기 위한 고유한 외래 키다.
b) 연결 테이블에 두 테이블들 사이의 관계의 성질을 나타내는 이름을 부여한다.
c) 연결 테이블을 최종 테이블 목록에 추가하고, 테이블 종류와 테이블 설명을 위해 적절한 항목을 입력한다.
- 연결 테이블을 만드는 것이 가지는 결과
a) 다대다 관계가 해소 된다.
b) 연결 테이블은 두 개의 외래 키들을 포함한다.
c) 연결 테이블은 두 개의 외래 키로 구성되는 복합 주 키를 가진다.
d) 연결 테이블은 중복 데이터를 절대적으로 최소화하는데 도움을 준다.
e) 연결 테이블의 이름은 이 연결 테이블이 설정하는데 도움을 주는 관계의 목적을 반영한다.
4) 자기참조 관계
- 일대일과 일대다
주 키와 외래 키를 사용한다. 외래키가 이미 테이블 구조의 일부인 경우가 종종 있으며, 만약 아직 없다면 만들기만 하면된다.
- 다대다 관계
연결 테이블을 사용한다. 그러나 연결 테이블을 만드는데 사용되는 필드들이 같은 부모 테이블에서 나온다는 것이 다른 점이다.
5) 각 테이블의 구조 검토하기
테이블들 사이에 관계를 설정한 뒤에 모든 테이블 구조를 검태한다. 다시 이상적 테이블의 요소들을 따르는지 확인한다.
5. 모든 외래 키 정제하기
1) 외래 키의 요소들
- 복사되온 주 키와 같은 이름을 가진다.
- 복사되온 주 키를 위한 필드 명세의 복제를 사용한다.
- 참조하는 주 키로부터 값을 도출한다.
6. 관계 특성 설정하기
관계의 특성들은 레코드를 삭제할 때 어떤일이 벌어지는지, 관계에서 각 테이블이 사용하는 참여의 종류, 관계에서 각 테이블이 어느 정도로 참여하는지를 나타낸다.
1) 각 관계를 위한 삭제 규칙정의하기
주어진 관계의 부모 테이블에서 주어진 레코드를 삭제하기 위해, RDBMS가 뭇엇을 해야 하는지를 결정한다. 삭제 규칙은 관계 수준의 무결에에 중요하다.
- 거부(deny)
부모 테이블의 레코드를 삭제하지 않고 유지하면서 비활성으로 지정한다.
- 제약(restrict)
자식 테이블에 연관 레코드들이 있으면 부모테이블의 레코드를 삭제하지 않는다.
- 연속(cascade)
부모 테이블의 레코드를 삭제하고, 자식 테이블의 모든 연관레코드를을 자동적으로 삭제한다.
- 널화(nullify)
부모 테이블의 레코드를 삭제하고, 자식 테이블의 연된 레코드들의 외래 키 값을 널로 갱신한다.
- 기본값 설정(set default)
부모 테이블의 레코드를 삭제하고, 자식 테이블의 연관된 레코드들의 외래 키 값들을 외래 키의 필드 명세의 현재의 기본값 요소로 갱신한다.
* 주어진 관계를 위해 어떤 삭제 규칙이 적절한지 판단하는 최선의 방법은 관계 다이어그램을 검토한다.
eg) 부모 테이블의 레코드가 삭제될 때, 자식 테이블의 연관된 레코드들에는 어떤일이 발생하는가?
2) 각 테이블의 참여 종류 식별하기
- 참여 종류
a) 강제적(mandatory)
연관된 테이블에 레코드를 입력하기 전에 이 테이블에 어떤 레코드가 반드시 있어야 한다.
b) 선택적(optional)
연관된 테이블에 레코드를 입력하기 전에 이 테이블에 어떤 레코드가 있어야 할 필요가 없다.
* 참여의 종류가 명백하거나 상식적이거나 특별한 표준을 따를 때, 참여 종류를 설정할 수 있지만, 대부분의 참여 종류는 업무 규칙을 정의할 때 결정한다.
3) 각 테이블의 참여 수준 식별하기
참여수준은 연관된 테이블의 한 레코드와 연관되어야 하는 최소 레코드 수와, 연관된 테이블의 한 레코드와 연관될 수 있는 최대 레코드 수를 나타낸다.
4) 사용자 및 관리자들과 테이블 관계 검증하기
- 각 관계를 올바르게 식별했는지 확인한다.
- 각 관계를 올바르게 설정했는지 확인한다.
- 각 외래 키가 외래 키의 요소들을 따르는지 확인한다.
- 각 관계를 위해 적절한 삭제 규칙을 설정했는지 확인한다.
- 이중 테이블 관계의 각 테이블과 자기 참조 관계의 적절한 키 필드들을 위해 올바른 참여의 종류를 식별했는지 확인한다.
- 이중 테이블 관계의 각 테이블과 자기 참조 관계의 적절한 키 필드들을 위해 올바른 참여 수준을 식별했는지 확인한다.
7. 관계 수준의 무결성
관계 수준의 무결성은 다음을 보장한다.
1) 관계 내의 두 테이블 사이의 연결이 정상적이다. 일대일 또는 일대다 관계를 설정하기 위해 주 키와 외래 키를 사용하고, 다대다 관계를 설정하기 위해 연결 테이블을 사용함으로써 이것을 달성한다.
2) 의미 있는 방법으로 각 테이블에 새 레코드를 삽입할 수 있다. 관계 내의 각 테이블를 위한 적절한 참여의 종류를 지정함으로써 이것을 보장한다.
3) 어떤 역효과도 만들지 않고 기존의 레코드를 삭제할 수 있다. 관계를 위한 적절한 삭제 규칙을 할당함으로써 이것을 보장한다.
4) 관계 내에서 상호 연관될 수 있는 레코드들의 수에 의미 있는 제한이 있다. 관계내의 각 테이블을 위한 적절한 참여의 수준을 지정함으로써 이것을 구현한다.
--------------------------
출처 - 위 글은 byung8lim의 다음블로그 Blog.daum.net/byung8lim에서 가져온 것입니다.