DataBase

[SQLD] 식별자

DH_0518 2025. 2. 13. 01:11

 

 

 

식별자

 

 

식별자

  • 엔터티 내의 각 인스턴스를 고유하게 구분하기 위한 속성, 혹은 속성들의 집합을 의미
  • 식별자를 통해 데이터의 무결성과 효율적인 관리를 보장할 수 있다


비식별자

  • 인스턴스를 식별하는데 사용되지 않는 속성으로, 인스턴스를 유일하게 식별하는데 영향을 미치지 않는다
  • 예를들어 '이름', '닉네임', '성별' 처럼 중복될 수 있는 속성은 인스턴스를 식별할 수 없기에 비식별자이다

 

 

주식별자의 주요 특징

  • 유일성
    • 주식별자에 의해 엔터티 내 모든 인스턴스가 유일하게 구분되어야 한다
  • 최소성
    • 주식별자를 구성하는 속성의 수는, 유일성을 만족하는 최소한의 수로 구성되어야 한다
  • 불변성
    • 주식별자가 한번 특정 엔터티에 지정되면, 그 식별자의 값은 변하지 않아야 한다
  • 존재성
    • 주식별자의 값은 반드시 존재해야 하며, NULL 값을 가질 수 없다

 

 

식별자 분류

  • 주식별자, 보조식별자
    • 주식별자(Primary Identifier): 엔터티를 대표하며, 유일성과 최소성을 만족하는 식별자
    • 보조식별자(Secondary Identifier): 엔터티 내 인스턴스를 유일하게 구분할 수 있지만, 대표성은 가지지 않는 식별자
    • 주식별자 vs 보조식별자: 대표성을 가지는가에 따라 구분
  • 내부식별자, 외부식별자
    • 내부식별자(Internal Identifier): 다른 엔터티의 참조 없이, 엔터티 자체적으로 생성되는 식별자
    • 외부식별자(External Identifier): 다른 엔터티와의 관계를 통해 생성되는 식별자
    • 내부식별자 vs 외부식별자: 엔터티 내에서 스스로 생성되었는지에 따라 구분
  • 단일식별자, 복합식별자
    • 단일식별자(Simple Identifier): 하나의 속성으로 구성된 식별자
    • 복합식별자(Composite Identifier): 두 개 이상의 속성으로 구성된 식별자
    • 단일식별자 vs 복합식별자: 단일 속성으로 식별이 되는가에 따라 구분
  • 본질식별자, 인조식별자
    • 본질식별자(Natural Identifier): 업무에서 원래 존재하는 속성을 이용한 식별자
    • 인조식별자(Surrogate Identifier): 업무에 존재하지 않지만, 원래의 식별자가 복잡한 구성을 가지고 있기에 이를 대체하기 위해 인위적으로 생성된 식별자. 단일 식별자를 가진다면 복잡할 일이 없기에, 보통 복합 식별자에서 많이 사용된다
      (ex. uuid, auto increment로 생성하는 id 등)
    • 본질식별자 vs 인조식별자: 업무에서 원래 존재하는 속성이었는지, 필요에 의해 인위적으로 생성되었는지에 따라 구분

 

ex)

[사원 Table]

사원 ID 사원번호 주민등록번호(보조) 이름 부서(FK) 지역코드(FK) 직급(FK)
1 10451 970518-1xxxxxx 김동환 농구팀 BS 주장
2 10452 971231-1xxxxxx 매드캣 야행성팀 DJ 고양이
3 10453 971204-1xxxxxx 커즈아이 몬스터팀 SU 일반몬스터
4 10454 000629-3xxxxxx 비구름 하늘나라팀 SKY 버섯
  • 주식별자, 보조식별자
    • 주식별자 -> 사원 ID : 사원 엔터티를 대표, 유일성과 최소성을 만족한다
    • 보조식별자 -> 사원번호, 주민등록번호 : 인스턴스들을 유일하게 구분할 수 있지만, 주식별자는 아니다
  • 내부식별자, 외부식별자
    • 내부식별자 -> 사원번호, 주민등록번호 : 다른 엔터티 참조 없이, 사원 엔터티 자체적으로 생성된다. '이름'은 식별자가 될 수 없다
    • 외부식별자 -> 부서, 지역코드, 직급 : 각각 '부서', '지역', '직급' 테이블을 참조한다
  • 단일식별자, 복합식별자
    • 단일식별자 -> 사원번호, 주민등록번호 : 하나의 속성만으로 인스턴스들을 식별할 수 있도록 구성되어있다
    • 복합식별자 -> 사원번호+주민등록번호+이름 : 여러 속성을 결합하여 구성한다
  • 본질식별자, 인조식별자
    • 본질식별자 -> 사원번호, 주민등록번호 : 사원이 원래부터 가지는 본질적인 값이다
    • 인조식별자 -> 사원 ID : 업무에 존재하지는 않지만, 기존의 식별자를 대체하기 위해 인위적으로 생성된 값이다

 

 

 

 

 

 

ERD에서의 식별관계/비식별관계

 

 

 

식별 관계

  • 엔터티 간의 강한 연결 관계를 표현한다
  • 부모 엔터티의 PK가 자식 엔터티의 PK에 포함되어, 자식 엔터티의 PK를 구성하는 관계
  • 즉, 자식 엔터티가 부모 엔터티에 의존적이며, 부모 엔터티의 인스턴스가 없으면 자식 엔터티의 인스턴스도 존재할 수 없다
  • 따라서 라이프 사이클이 동일하다
  • ERD에서 실선으로 표시한다
  • ex) '게시글' - '댓글' 관계: 게시글이 삭제되면 댓글도 함께 삭제된다

 

비식별 관계

  • 엔터티 간의 약한 연결 관계를 표현한다
  • 부모 엔터티의 PK가 자식 엔터티의 FK로 사용되지만, 자식 엔터티의 PK에는 포함되지 않는 관계
  • 따라서 자식 엔터티 인스턴스는 부모 엔터티 인스턴스 유무에 상관없이 독립적으로 존재할 수 있다
  • ERD에서 점선으로 표시한다
  • ex) '방문자' - '방명록' 관계: 방명록에는 방문자의 PK가 적히지만, 방문자가 삭제되었다 하더라도 방명록이 삭제되지는 않는다

 

선택 기준

  • 식별 관계를 선택하는 경우
    • 자식 엔터티가 부모 엔터티에 완전히 의존적일 때
    • 자식 엔터티가 부모 엔터티 없이는 존재할 수 없을 때
    • 데이터의 정합성을 DB 수준에서 강력하게 보장해야 할 때
  • 비식별 관계를 선택하는 경우
    • 자식 엔터티가 부모 엔터티에 독립적일 때
    • 자식 엔터티가 부모 엔터티 없이 존재할 수 있을 때
    • 요구 사항의 변경에 유연하게 대응해야 할 때
  • **주의
    • SQL문에서 비식별자 관계라고 무조건 Join 관계가 최소화 되지는 않는다