자격증/SQLD

SQLD(SQL-Developer) (3)

짱뚱짱 2024. 10. 9. 09:00

💙 관계의 차수 (Cardinality)

- 한 엔터티의 레코드(인스턴스)가 다른 엔터티의 레코드(인스턴스)와 어떻게 연결되는지를 나타내는 표현

- 주로 1:1, 1:N, N:M 등으로 표현

 

1) 1 대 1 관계

  * 완전 1 대 1 관계

    - 하나의 엔터티에 관계되는 엔터티가 반드시 하나로 존재하는 경우

    - ex) 사원은 반드시 소속 부서가 있어야 함

  * 선택적 1 대 1 관계

    - 하나의 엔터티에 관계되는 엔터티가 하나이거나 없을 수 있는 경우

    - ex) 사원은 하나의 소속 부서가 있거나 아직 발령전이면 없을 수 있음

 

2) 1 대 N 관계

  - 엔터티에 하나의 행에 다른 엔터티의 값이 여러개 있는 관계

    ex) 고객은 여러 개 계좌를 소유할 수 있음.

 

3) M 대 N 관계

  - 두 엔터티가 다대다의 연결 관계 가지고 있음

  - 이 경우 조인 시 카테시안 곱이 발생하므로 두 엔터티를 연결하는 연결엔터티의 추가로 1 대 N 관계로 해소할 필요가 있음.

  ex) 한 학생이 여러 강의를 수강할 수 있고, 한 강의 기준으로도 여러 학생이 보유할 수 있음.

    => 이 두 엔터티의 연결엔터티로는 구매이력 엔터티가 필요함

  

💙 관계의 페어링 (Cardinality)

- 엔티티 안에 인스턴스가 개별적으로 관계를 가지는 것

- 관계란 페어링의 집합을 의미함

 

** 관계와 차수, 페어링 차이

  - 학생강의 엔터티는 관계를 가짐

  - 한 학생은 여러 강의를 수강할 수 있고, 한 강의도 여러 학생에게 수강될 수 있으므로 M 대 N 관계이며, 이 때 차수는 M:N가 됨

  - 인스턴스의 관계를 보면 "학생 A강의 B2023년 1학기에 수강했고 성적은 'A+'를 받았다"와 같은 특정한 페어링이 형성

  - 이런식으로 관계의 차수는 하나의 엔터티와 다른 엔터티 간의 레코드 연결 방식을 나타내는 반면, 관계 페어링은 두 엔터티 간의 특정 연결을 설명하고 추가 정보를 제공하는 용도로 사용.

 

💙 식별자 개념

- 하나의 엔터티에 구성된 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 나타냄

- 하나의 유일한 식별자가 존재해야 함

- 식별자는 논리 모델링에서 사용하는 용어. 물리 모델링에서는 키(key)라고 표현

  ex) 학생 엔터티의 주식별자는 학생번호 속성 => 학생 테이블의 기본키는 학생번호 컬럼

                                 (논리 모델링)                              (물리 모델링)

 

💙 주식별자 특징

1️⃣ 유일성 : 주식별자에 의해 모든 인스턴스를 유일하게 구분함

  ex) 학생 엔터티에서 이름 속성은 동명이인이 발생할 수 있으므로 모든 인스턴스를 완벽하게 구분할 수 없으므로 학생번호와 같은 유일한 식별자를 주식별자로 사용

 

2️⃣ 최소성 : 주식별자를 구성하는 속성은 유일성을 만족하는 최소한의 속성으로 구성

  ex) 학생 엔터티의 주식별자는 학생번호만으로 충분한데, 학생번호 + 이름으로 구성할 필요 없음

 

3️⃣ 불변성 : 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함

                    (항상 고유값으로 존재해야 함)

  ex) 학생 엔터티에 주식별자인 학생번호가 때에 따라 변경되서는 안됨

 

4️⃣ 존재성 : 주식별자가 지정되면 반드시 값이 존재해야 하며 NULL은 허용 안 됨

 

💙 식별자 분류

1) 대표성 여부에 따른 식별자의 종류

주식별자 보조식별자
* 유일성과 최소성을 만족하면서 엔터티를 대표하는 식별자

* 엔터티 내에서 각 인스턴스를 유일하게 구분할 수 있는 식별자

* 타 엔터티와 참조관계를 연결할 수 있는 식별자
* 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자지만, 대표성을 가지지 못해 참조 관계 연결을 할 수 없는 식별자

* 유일성과 최소성은 만족하지만 대표성을 만족하지 못하는 식별자

 

 

2) 생성 여부에 따른 식별자의 종류

내부식별자 외부식별자
* 다른 엔터티 참조 없이 엔터티 내부에서 스스로 생성되는 식별자 * 다른 엔터티와 관계로 인하여 만들어지는 식별자 (외래키)

 

 

3) 속성 수에 따른 식별자 종류

단일식별자 복합식별자
* 하나의 속성으로 구성 * 2개 이상의 속성응로 구성

 

 

4) 대체 여부에 따른 식별자의 종류

본질식별자 인조식별자
* 비즈니스 프로세스에서 만들어지는 식별자 * 인위적으로 만들어지는 식별자

* 자동 증가하는 일련번호 같은 형태

ex) 👉🏻 부서코드 => 부서식별에 필요한 본질식별자

      👉🏻 주문번호 => 주문일자 + 주문순서 + 상품코드 대신 만든 인조식별자

 

💙 식별자 표기법

 

💙 식별자 도출기준

1) 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.

  - 같은 식별자 조건을 만족하더라도 업무적으로 더 많이 사용되는 속성을 주식별자로 지정

    ex) 학생번호와 주민번호 중에 학생번호가 주식별자, 주민번호는 보조식별자

 

2) 명칭이나 내역등과 같은 이름은 피함

  - 이름 자체를 주식별자로 사용하는 행위를 피함

    ex) 부서명 보다는 부서코드를 부여하여 부서코드를 주식별자로 사용

 

3) 속성의 수를 최대한 적게 구성

  - 주식별자를 너무 많은 속성으로 구성 시, 조인으로 인한 성능저하 발생 우려
  - 일반적으로 7~8개 이상의 주식별자 구성은 새로운 인조식별자를 생성하여 모델을 단순화 시키는 것이 좋음

    ex) 주문 엔터티에 대해 주문일자 + 주문상품코드 + 고객번호 + .... 등으로 구성 => 주문번호 속성 추가!

 

💙 관계간 엔터티 구분

1) 강한 개체

  - 독립적으로 존재할 수 있는 엔터티

    ex) 고객계좌 인터티 중, 고객은 독립적으로 존재할 수 있음

 

2) 약한 개체

  - 독립적으로 존재할 수 없는 엔터티

    ex) 고객과 계좌 엔터티 중, 계좌는 독립적으로 존재할 수 없음(고객에 의해 파생되는 엔터티)

 

'자격증 > SQLD' 카테고리의 다른 글

SQLD(SQL-Developer) (6)  (2) 2024.10.28
SQLD(SQL-Developer) (5)  (2) 2024.10.24
SQLD(SQL-Developer) (4)  (5) 2024.10.18
SQLD(SQL-Developer) (2)  (4) 2024.09.27
SQLD(SQL-Developer) (1)  (5) 2024.09.24