Database

[Database] 카디널리티(Cardinality) 2가지 의미

cloud-grace 2024. 5. 19. 14:38

카디널리티(Cardinality)란?

카디널리티는 2가지 의미로 사용된다.

  1. 테이블 간의 관계에서의 카디널리티
    • 두 테이블 사이의 관계를 말한다.
    • 각각의 레코드가 서로 어떻게 연결되는지를 설명한다.
  2. 컬럼에 있는 고유한 값에서의 카디널리티
    • 간단하게 말하면 튜플/행의 수이다.
    • 데이터베이스 테이블 내의 데이터 값의 다양성 또는 고유 값을 말한다.
    • 테이블의 특정 컬럼에 대한 고유한 값의 수를 카디널리티라고 한다.

카디널리티 : (1) 테이블 간의 관계

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

  • 사람 1명은 여권 1개만 가질 수 있다. 주민번호는 여권 테이블의 외래 키(Foreign Key)이자 유니크 키(Unique Key)이다.

일대다(One-to-Many) 관계

  • 고객 1명은 여러 주문을 할 수 있지만, 각 주문은 1명의 고객에게만 속한다. 고객ID는 주문 테이블의 외래 키(Foreign Key)이다.

다대일(Many-to-One) 관계

  • 여러 주문 제품은 같은 제품을 참조할 수 있다. 즉, 여러 주문 제품이 하나의 제품에 대응된다. 제품ID는 주문제품 테이블의 외래 키(Foreign Key)이다.

다대다(Many-to-Many) 관계

  • 학생 1명은 여러 과목을 수강할 수 있으며, 과목 1개는 여러 학생이 수강할 수 있다.

다대다(Many-to-Many) 관계 해소

  • 두 엔터티가 다대다 관계라면 두 개의 엔터티만으로는 서로 표현하는 데에 부족한 점이 있다.
  • 데이터 모델링에서는 다대다 관계는 미완성인 모델이기 때문에 이를 일대다, 다대일 관계로 나누는 세부적인 작업이 추가로 필요하다.
  • 두 엔터티의 관계를 표현하기 위해 두 엔터티 사이에 추가적인 엔터티가 필요하다.
  • 추가적인 엔터티는 두 엔터티의 공유 속성 역할을 하며 위의 예시는 학생별수강과목 엔터티에 해당한다.
  • 데이터 모델링에서 자연스레 이루어지는 공식과도 같은 부분이며 위의 예시처럼 중간 테이블을 사용한다.
  • 학생별 수강과목의 학생ID와 과목ID는 각각 학생 테이블과 과목 테이블을 참조하는 외래 키(Foreign Key)이다.

카디널리티 : (2) 컬럼에 있는 고유한 값

데이터베이스 테이블의 컬럼(Column)의 카디널리티(Cardinality)는 해당 컬럼에 있는 고유(Distinct)한 값의 개수를 말한다. 예를 들어, 성별(Gender) 컬럼의 남성, 여성 2가지 값이 존재하므로 이 컬럼의 카디널리티는 2이다.

  1. 높은 카디널리티 : 컬럼의 값이 매우 다양할 때 사용된다. 즉, 많은 고유 값을 포함한다.
    • 예시 : 주민등록번호, 이메일 주소
    • 대부분의 값이 고유해서 높은 카디널리티를 가진다.
  2. 중간 카디널리티 : 컬럼의 값이 중간 정도로 다양할 때 사용된다.
    • 예시 : 우편번호, 도시 이름
    • 일부 값이 고유하지만, 많은 값이 반복된다.
  3. 낮은 카디널리티 : 컬럼의 값이 적고 반복되는 값이 많을 때 사용된다.
    • 예시 : 성별, 상태 코드
    • 적은 수의 고유 값을 포함하며, 낮은 카디널리티를 가진다.

카디널리티 활용 측면

  • 쿼리 최적화 : 고유한 값이 많은 컬럼이라면 인덱스를 통해 검색 성능을 향상시킬 수 있다.
  • 중복 데이터 확인 : 높은 카디널리티를 가진 컬럼은 중복 데이터를 쉽게 확인할 수 있도록 도와준다.
  • 데이터베이스 설계 : 테이블을 설계할 때, 각 컬럼의 카디널리티를 고려해서 테이블 간의 관계 생성과 인덱스 생성에 도움이 된다.
  • 데이터 분석 : 데이터의 다양성을 파악하는 데에 도움이 된다. 카디널리티가 높은 컬럼은 데이터의 다양성이 큰 것이며, 이를 통해 여러 인사이트를 얻을 수 있다.