티스토리 뷰

 

관계형 데이터베이스 디자인에는 세 가지 유형의 관계가 있다.

  • One-to-One
  • One-to-Many (Many-to-One)
  • Many-to-Many

 

One-to-One

테이블 A의 행은 테이블 B에서 일치하는 행을 하나만 가질 수 있으며 그 반대의 경우도 마찬가지이다.

테이블 B에 저장된 데이터가 테이블 A에 쉽게 저장될 수 있기 때문에 일반적인 관계 유형이 아니다. 그러나 이 관계 유형을 사용하는 몇 가지 유효한 이유가 있다. 일대일 관계는 보안 목적, 대형 테이블 분할 및 기타 다양한 특정 목적으로 사용될 수 있다.

위의 예에서 우리는 HourlyRate 필드를 Employee 테이블에 직접 입력하고 Pay 테이블에 신경 쓰지 않을 수 있다. 그러나 시간당 요금은 특정 데이터베이스 사용자만 볼 수 있는 민감한 데이터 일 수 있다. 따라서 시간당 요금을 별도의 테이블에 넣어 특정 사용자만 해당 테이블의 데이터에 액세스 할 수 있도록 Pay 테이블에 대한 추가 보안을 제공할 수 있다.

 

One-to-Many (Many-to-One)

가장 일반적인 관계 유형이다. 이러한 유형의 관계에서 테이블 A의 행은 테이블 B에서 일치하는 행을 많이 가질 수 있지만 테이블 B의 행은 테이블 A에서 일치하는 행을 하나만 가질 수 있다.

일대다 관계는 보는 방식에 따라 다 대일 관계로 볼 수도 있다.

위의 예에서 Customer 테이블은 "many"이고 City 테이블은 "one"이다. 각 고객에게는 하나의 도시만 할당될 수 있다. 한 도시를 여러 고객에게 할당할 수 있다.

 

Many-to-Many

다대다 관계에서 테이블 A의 행은 테이블 B에 일치하는 많은 행을 가질 수 있으며 그 반대의 경우도 마찬가지이다.

다대다 관계는 중간 테이블로 연결된 두 개의 일대다 관계로 생각할 수 있다.

중간 테이블은 일반적으로 "접합 테이블"( "교차 참조 테이블"이라고도 함)이라고 한다. 이 테이블은 다른 두 테이블을 함께 연결하는 데 사용된다. 다른 두 테이블 각각의 기본 키를 참조하는 두 개의 필드를 사용하여 이를 수행한다.

따라서 Customers 테이블과 Products 테이블 간에 다대다 관계를 만들기 위해 Orders라는 새 테이블을 만들었다.

Orders 테이블에는 CustomerId라는 필드와 ProductId라는 필드가 있다. 이러한 필드에 포함된 값은 참조된 테이블의 해당 필드에 있는 값과 일치해야 한다. 따라서 Orders.CustomerId에 지정된 값은 Customer.CustomerId 필드에도 있어야 한다. 그렇지 않은 경우 실제로 존재하지 않는 고객에 대한 주문을 받을 수 있다. 존재하지 않는 제품을 주문할 수도 있다. 참조 무결성이 좋지 않다.

대부분의 데이터베이스 시스템에서는 데이터베이스가 참조 무결성을 적용해야 하는지 여부를 지정할 수 있다. 따라서 사용자 (또는 프로세스)가 기본 키 필드에 존재하지 않는 외래 키 값을 삽입하려고 하면 오류가 발생한다.

이 예에서 Orders.CustomerId 필드는 Customers.CustomerId (해당 테이블의 기본 키)에 대한 외래 키이다. 그리고 Orders.ProductId 필드는 Products.ProductId 필드 (해당 테이블의 기본 키)에 대한 외래 키이다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함