본문 바로가기

구글링

SQL 일대일관계 (One-to-One SQL Relationship)

원문 : http://sqlrelationship.com/one-to-one-relationship/



일-대-일 관계 기초 One-to-One Relationship Basics

SQL에서 일대일 관계는 빅테이블을 Flat테이블의 성능 저하없이 작은 조각들로 나누기위해 과소평가되어 쓰이지만,  어떤 경우에 안정화된 EAV모델보다 낫다.

1:1관계의 완벽한 사용예는 아래 예와 같이 카탈로그 엔트리와 같은 기본 속성을 공유하는 엔티티와 관련있다. 그러나 이론에 들어가지않고 다음의 엔티티 관계 다이어그램을 보자:

이 컨셉의 아이디어는 모든 엔티티같에 공유되는 기본 속성들을 저장하는 테이블에 있다. 예의 카탈로그 엔트리의 경우처럼 공유된 속성들은 제품명(Product name), 개요(description) 그리고 가격(Price)이다. 제품의 특정 타입을 가르키는 속성들은 별도의 테이블에 저장되어있다. 이들 테이블간의 관계는 모든 테이블이 같은 Primary Key가지고 저장되어있다는 것이다.


구현 Implementation

위의 예에서 본것처럼, 일대일관계는 테이블같에 같은 Primary Key를 사용함으로서 간단하게 구현할수있다. 만일 엔티티 id 12345를 가지고 있는 어떤 제품이 저장되었다면 이 id는 모든 테이블에서 사용된다.

다른 Primary Key들을 사용하여 모든 테이블에 관계컬럼을 추가할수있지만 이것은 또다른 결점이 있다: SQL 구문이 더 복잡해지고 foreign key를 쓰려면 순환의존(circular dependency)이 되어버린다.