[SQLD] 자격증 챌린지 5강

Hyunjun Kim·2024년 11월 10일

SQL Developer (자격증)

목록 보기
5/11

5. 관계와 조인의 이해

5.1. 관계와 조인의 이해

관계와 조인

관계 정의

관계 (Relationship)
관계형 데이터베이스에서 "관계"는 테이블 간의 연결을 의미합니다. 두 개의 엔티티 사이의 논리적인 연결, 엔티티와 엔티티가 존재의 형태나 행위로서 서로에게 영향을 주는 형태를 관계라고 합니다.

부모의 식별자를 자식의 식별자에 포함하면 식별관계, 부모의 식별자를 자식의 일반속성으로 상속하면 비식별관계라고 할 수 있습니다. 이러한 관계는 데이터의 무결성과 조직을 유지하는 데 중요합니다. 주요 관계 유형에는 다음과 같습니다.

  1. 일대일 (One-to-One): 한 테이블의 레코드가 다른 테이블의 단 하나의 레코드와만 연결됩니다. 예를 들어, 각 사용자 프로필이 하나의 사용자 계정에만 연결되는 경우입니다.
  2. 일대다 (One-to-Many): 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연결됩니다. 가장 흔한 관계 유형으로, 예를 들어 한 명의 고객이 여러 주문을 가질 수 있습니다.
  3. 다대다 (Many-to-Many): 한 테이블의 여러 레코드가 다른 테이블의 여러 레코드와 연결됩니다. 이 관계는 일반적으로 별도의 연결 테이블을 통해 구현됩니다. 예를 들어, 여러 학생이 여러 과목을 수강할 수 있습니다.

조인 정의

조인 (Join)
조인은 두 개 이상의 테이블을 연결하여 데이터를 검색하는 데 사용되는 방법입니다. 조인을 사용하면 여러 테이블에 흩어져 있는 정보를 결합하여 의미 있는 방식으로 조회할 수 있습니다. 주요 조인 유형은 다음과 같습니다.

  1. 내부 조인 (Inner Join): 두 테이블의 교집합을 반환합니다. 두 테이블 모두에서 일치하는 레코드만 결과에 포함됩니다.

  2. 외부 조인 (Outer Join)

  • 왼쪽 외부 조인 (Left Outer Join): 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환합니다. 일치하는 레코드가 없는 경우, 오른쪽 테이블의 값은 NULL로 표시됩니다.
  • 오른쪽 외부 조인 (Right Outer Join): 이는 왼쪽 외부 조인의 반대로 작동합니다.
  • 전체 외부 조인 (Full Outer Join): 두 테이블의 합집합을 반환합니다. 일치하지 않는 레코드는 NULL 값으로 표시됩니다.

위 모델은 고객과 주문 엔터티가 관계를 맺고 있습니다. 고객 엔티티의 입장에서는 ‘한 명의 고객은 여러 번 주문할 수 있다’, 주문 엔티티 입장에서는 ‘각각의 주문은 반드시 한 명의 고객에 의해 발생됩니다.

관계를 맺음으로 생기는 현상은 고객 엔티티의 식별자인 고객번호를 주문 엔티티에 상속시킨 것. 즉, 관계를 맺는다는 것은 식별자를 상속시키고 해당 식별자를 매핑키로 활용해 데이터를 결합하여 보겠다는 것!

계층형 데이터 모델

계층형 데이터 모델이 무엇인지만 알고 넘어갑시다.

계층형 데이터 모델은 데이터를 트리 구조로 표현하는 방식으로 동일한 데이터에서 상하 구조가 있는 것을 말합니다. 이 모델은 데이터를 계층적으로 구조화하여 관리하며, 각 계층은 다른 계층과 부모-자식 관계를 갖습니다. 즉, 계층형 데이터 모델에서는 한 레코드가 자기 자신에 대한 관계를 가질 수 있습니다. 이러한 경우를 “순환관계" 또는 "자기 참조관계"라고 합니다.

예를 들어, 조직도에서 각각의 직원은 부서 내에서 일하는 동료들과 관계가 있을 뿐만 아니라, 상사와 같은 상위 부서의 직원과도 관계가 있을 수 있습니다. 이때, 각 직원은 자기 자신과도 연결될 수 있습니다. 이러한 구조를 사용하면 조직 내에서 각 직원이 어떤 부서에 속해 있고, 누가 그들의 상사인지 등을 표현하기 용이해집니다.

계층형 데이터 모델의 다른 점은 자기 자신을 조인했다는 것입니다. 이를 우리는 셀프조인(Self-Join)이라고 합니다.

상호배타적 관계

상호배타적 관계의 개념

상호배타적 관계가 무엇인지만 이해하고 넘어갑시다.

상호 배타적 관계(Exclusive Relationship)란 두 요소 또는 그룹 간의 관계 중에서 서로 중복되지 않고 상호 배타적인 경우를 의미합니다. 즉, 한 요소 또는 그룹이 다른 요소 또는 그룹과 동시에 속할 수 없는 관계를 나타냅니다. 이러한 관계는 두 가지 이상의 상태 또는 조건 중 하나만이 성립할 수 있도록 설계되어 있습니다.

예시) 음식 주문

친구 A와 B가 같은 레스토랑에서 저녁을 함께 주문하려고 합니다. 그런데 A는 피자를 먹고 싶고, B는 파스타를 먹고 싶어합니다. 레스토랑의 규칙에 따르면 한 사람당 하나의 메뉴만 주문할 수 있습니다. 따라서 A가 피자를 주문하면 B는 파스타를 선택할 수 없고, 그 반대도 마찬가지입니다. 이때 피자와 파스타는 상호배타적인 관계에 있습니다.

다시 말해, A가 피자를 주문하면 B는 그 메뉴를 선택할 수 없으며, B가 파스타를 주문하면 A는 피자를 선택할 수 없습니다. 이렇게 둘 중 하나를 선택하는 것이 상호배타적인 관계의 특징입니다.

연습문제

1번

Q. 문제다음 중 SQL에서 두 테이블을 결합하는 데 사용되는 조인 유형으로 가장 부적절한 것은 무엇인가?
A내부 조인 (INNER JOIN)
B외부 조인 (OUTER JOIN)
C교차 조인 (CROSS JOIN)
D순차 조인 (SEQUENTIAL JOIN)

정답
내부 조인 (INNER JOIN)은 두 테이블에서 일치하는 행을 결합할 때 사용됩니다. 외부 조인 (OUTER JOIN)은 일치하는 행이 없는 경우에도 한 테이블의 행을 포함하여 결합할 때 사용되며, 외부 조인에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있습니다. 교차 조인 (CROSS JOIN)은 두 테이블 간의 모든 가능한 조합을 생성합니다.

2번

Q. 문제다음 중 데이터베이스에서 엔티티 간의 관계를 매핑하고 데이터를 연결하는 방식에 대한 설명으로 가장 정확한 것은 무엇인가?
AA) 조인은 데이터베이스 내의 두 엔티티 간에 논리적 연결을 생성하지 않고, 데이터를 단일 엔티티로만 관리한다.
BB) 조인은 주로 데이터베이스 내의 테이블을 별도로 분리하여 관리하기 위해 사용되며, 엔티티 간의 관계를 매핑하는 데 사용되지 않는다.
CC) 조인은 엔티티 간의 관계를 매핑하기 위해 매핑키를 사용하여 두 엔티티의 데이터를 연결하고, 관련된 정보를 함께 조회할 수 있게 한다.
DD) 조인은 오직 데이터베이스의 성능 최적화를 위해서만 사용되며, 엔티티 간의 관계나 데이터 연결에는 영향을 미치지 않는다

정답
조인은 데이터베이스에서 두 테이블(엔티티) 간의 관계를 매핑하고 데이터를 연결하는 중요한 기능입니다. 매핑키(보통 외래키)를 통해 관련된 엔티티의 데이터를 함께 조회할 수 있으며, 이를 통해 복잡한 데이터 관계를 효과적으로 처리할 수 있습니다. 선택지 A, B, D는 조인의 정의와 역할을 잘못 설명하고 있습니다.

5.2. 모델이 표현하는 트랜잭션의 이해

트랜잭션의 이해

트랜잭션의 이해

트랜잭션은 데이터베이스의 논리적 연산단위입니다.

트랜잭션 예시: 은행 계좌 이체
가상의 은행에서 두 계좌 간의 금액 이체를 통해 트랜잭션을 설명해 보겠습니다

1. 시작 (Begin):

  • 트랜잭션은 어떤 일련의 작업을 나타내기 시작할 때 시작됩니다. 예를 들어, A 계좌에서 B 계좌로 100달러를 이체하려는 트랜잭션이 시작됩니다.

2. 작업 수행:

  • 트랜잭션은 하나 이상의 작업으로 이루어집니다. 이 경우에는 A 계좌에서 100달러를 빼고, B 계좌에 100달러를 더하는 두 가지 작업이 있습니다.

3. 확인 (Commit):

  • 모든 작업이 성공적으로 수행되었다면, 트랜잭션을 완료하기 위해 확인 단계로 넘어갑니다. 이를 "커밋"이라고 부릅니다. A 계좌에서의 인출과 B 계좌로의 입금이 성공하면 트랜잭션을 커밋하여 최종 결과를 반영합니다.

4. 롤백 (Rollback):

  • 하지만 중간에 어떤 문제가 발생한다면, 트랜잭션을 롤백하여 모든 작업을 취소할 수 있습니다. 예를 들어, A 계좌에 잔고 부족 등의 이유로 트랜잭션이 실패한다면, 롤백을 통해 모든 작업을 취소하고 처음 상태로 돌아갈 수 있습니다.

5. 끝 (End):

  • 트랜잭션이 커밋되거나 롤백되면 해당 트랜잭션은 종료됩니다. 모든 작업이 반영되었거나, 아니면 아무런 영향도 주지 않은 상태로 끝나게 됩니다.

트랜잭션의 특징

데이터 모델링에서 트랜잭션은 몇 가지 특징을 갖고 있습니다. 주요 특징은 다음과 같습니다:
1. 원자성 (Atomicity):
- 트랜잭션은 원자적인 작업의 단위로 간주됩니다. 이는 트랜잭션 내에서 수행되는 모든 작업이 성공하거나 실패할 경우 전체가 실패하는 것을 의미합니다. 중간에 어떠한 작업이라도 실패하면 이전 상태로 롤백되어야 합니다.
2. 일관성 (Consistency):
- 트랜잭션이 완료된 후에는 데이터베이스가 일관된 상태여야 합니다. 트랜잭션이 시작하기 전과 후에 일관성이 유지되어야 합니다. 데이터베이스의 제약조건을 준수하고, 비즈니스 규칙을 지켜 일관성을 유지합니다.
3. 고립성 (Isolation):
- 여러 트랜잭션이 동시에 실행될 때 각각의 트랜잭션이 서로 영향을 미치지 않도록 하는 것을 의미합니다. 다수의 트랜잭션이 동시에 실행될 때, 각각의 트랜잭션이 자신만의 공간에서 작업하고 마치 다른 트랜잭션이 존재하지 않는 것처럼 격리되어야 합니다.
4. 지속성 (Durability):
- 트랜잭션이 성공적으로 완료된 경우, 해당 트랜잭션에서 수행한 변경 사항은 영구적으로 데이터베이스에 반영되어야 합니다. 시스템 장애 또는 다시 시작되더라도 트랜잭션의 결과가 영구적으로 저장되어야 합니다.

이러한 특징들은 데이터 모델링에서 트랜잭션이 데이터베이스의 안전하고 신뢰할 수 있는 상태를 유지하는 데 얼마나 중요한 역할을 하는지를 나타냅니다.

연습문제

1번

Q. 문제트랜잭션 중에 '롤백(Rollback)'이란 무엇을 의미하나요?
A트랜잭션이 성공적으로 완료되어 모든 변경 사항이 데이터베이스에 반영되는 과정
B트랜잭션 처리 중 발생한 오류로 인해 트랜잭션을 시작하기 전의 상태로 데이터를 복구하는 과정
C데이터베이스에 저장된 데이터를 백업하여 재해 발생 시 복구할 수 있도록 하는 과정
D여러 트랜잭션을 동시에 처리하면서 발생할 수 있는 충돌을 해결하는 과정

정답
롤백(Rollback)은 트랜잭션이 처리 중에 오류가 발생하거나, 어떠한 이유로 트랜잭션을 정상적으로 완료할 수 없을 때 사용하는 연산입니다. 이 과정을 통해 트랜잭션의 시작 지점 이전의 상태로 데이터베이스를 복구함으로써, 데이터의 일관성과 무결성을 유지할 수 있습니다.

2번

Q. 문제데이터베이스 관리 시스템에서 트랜잭션이 성공적으로 처리되어 데이터베이스의 일관성을 유지하려면 트랜잭션은 ACID 속성을 만족해야 합니다. 다음 중 ACID 속성에 대한 설명으로 가장 부적절한 것은 무엇인가요?
A원자성(Atomicity): 트랜잭션 내의 모든 작업은 완전히 수행되거나 전혀 수행되지 않아야 합니다.
B일관성(Consistency): 트랜잭션이 완료된 후에는 데이터베이스가 일관된 상태를 유지해야 합니다.
C격리성(Isolation): 하나의 트랜잭션이 실행되는 동안 다른 트랜잭션의 연산이 끼어들 수 있습니다.
D지속성(Durability): 트랜잭션이 성공적으로 완료되면, 그 결과는 시스템이 고장 나더라도 영구적으로 반영됩니다.

정답
ACID 속성은 데이터베이스 트랜잭션의 신뢰성을 보장하기 위한 네 가지 기본 원칙입니다. 격리성(Isolation)은 각 트랜잭션이 독립적으로 실행되어야 하며, 다른 트랜잭션의 연산이 끼어들어서는 안 된다는 원칙을 의미합니다. 올바른 격리성 설명은 트랜잭션의 변경사항이 다른 트랜잭션에 의해 간섭받지 않도록 보장해야 한다는 것입니다. 따라서 선택지 C는 격리성의 정확한 설명이 아니며, 이는 격리성의 목적과 반대되는 내용입니다.

5.3. Null 속성의 이해

Null 값의 연산은 언제나 Null이다

Null의 개념

Null은 데이터베이스에서 특정 필드 또는 칼럼에 값이 없음을 나타내는 특별한(중요한) 값입니다. Null은 '알 수 없음', '아직 정의되지 않음(미정)', '데이터 없음' 등으로 해석될 수 있습니다. 이는 어떤 데이터가 해당 필드에 대해 알려진 값이 없거나 적용할 수 없는 경우를 나타냅니다. Null 값은 ‘공백이나 숫자 0’과는 전혀 다른 의미입니다.

Null의 특징

  1. 미정 상태:
    • Null은 해당 필드의 값이 미정이거나 알 수 없는 경우를 나타냅니다. 어떤 이유로든 데이터가 존재하지 않거나 입력되지 않은 상태입니다.
  2. 데이터 부재:
    • Null은 필드에 대한 값이 없음을 나타냅니다. 다시 말해, 해당 필드에는 어떠한 데이터도 저장되어 있지 않은 상태입니다.
  3. 값의 비교 불가능:
    • Null 값은 다른 값과 비교할 때 특별한 주의가 필요합니다. Null은 다른 값과는 동등이나 불동등을 비교할 수 없습니다. Null과의 비교는 항상 불확실한 결과를 가져올 수 있습니다.

집계함수는 Null 값을 제외하고 처리한다

집계 함수와 Null

집계 함수는 대부분 Null 값을 제외하고 처리되기도 합니다. 이는 데이터베이스에서 Null 값이 특별한 상황을 나타내거나 연산에서 불확실한 결과를 가져오기 때문입니다. 다음은 이에 대한 설명과 예시입니다.

사칙 연산과 Null

Null + 2 or 2 + Null -> Null
Null - 2 or 2 - Null -> Null
Null * 2 or 2 * Null -> Null
Null / 2 or 2 / Null -> Null

집계 함수와 Null 처리

  1. SUM 함수:

    • SUM 함수는 합계를 계산하는 함수입니다. 일반적으로 Null 값을 0으로 처리합니다. 따라서 Null 값을 제외하고 나머지 값들의 합을 계산합니다.
    SELECT SUM(column_name) FROM table_name;
  2. AVG 함수:

    • AVG 함수는 평균을 계산하는 함수입니다. Null 값을 제외하고 나머지 값들의 평균을 계산합니다.
    SELECT AVG(column_name) FROM table_name;
  3. COUNT 함수:

    • COUNT 함수는 행의 개수를 세는 함수입니다. 일반적으로 Null 값을 제외하고 유효한 값들의 개수를 세어줍니다. 단, COUNT(*) 의 경우 NULL을 포함해서 모든 행의 수를 리턴합니다.
    SELECT COUNT(column_name) FROM table_name;
  4. MIN/MAX 함수:

    • MINMAX 함수는 최소값과 최대값을 찾는 함수입니다. Null 값을 무시하고 나머지 값 중에서 최소값과 최대값을 찾습니다.
    SELECT MIN(column_name), MAX(column_name) FROM table_name;

예시

IDScore
190
2Null
385
495
  • AVG(Score)를 실행하면 Null 값인 2번 레코드는 무시되고, (90 + 85 + 95) / 3의 평균이 계산됩니다.
  • MIN(Score)MAX(Score)를 실행하면 Null 값인 2번 레코드는 무시되고, 각각 85와 95가 반환됩니다.

NULL이 포함된 연산

NULL 이 포함된 연산/집계를 해야할 경우 대부분 제외되고 처리되며, 보통은 NVL / ISNULL함수 등을 사용해서 NULL 값을 핸들링함.

연습문제

1번

Q. 문제데이터베이스에서 NULL 값의 특징에 대해 가장 정확한 설명은 무엇인가요?
ANULL은 0 또는 빈 문자열("")과 동일한 의미를 가진다.
BNULL은 필드에 데이터가 존재하지 않거나 알려지지 않은 값을 표현한다.
C모든 데이터베이스 시스템은 NULL 값을 저장할 수 없다.
DNULL 값 비교 연산(=, <, >)은 항상 TRUE를 반환한다.

정답
NULL은 무언가 알려지지 않았거나 적용되지 않는 상태를 나타내기 때문에, NULL 값에 대한 일반적인 비교 연산은 TRUE나 FALSE를 반환하지 않고, 대신 UNKNOWN을 반환하는 경우가 많습니다(이는 데이터베이스 시스템에 따라 다를 수 있음). 따라서 선택지 B가 가장 정확한 설명입니다.

2번

Q. 문제다음 중 데이터베이스의 집계 함수와 NULL 값의 관계에 대한 설명으로 가장 정확한 것은 무엇인가요?
ASUM() 함수는 NULL 값을 0으로 간주하여 합계에 포함한다.
BAVG() 함수는 NULL 값이 있는 행을 제외하고 평균을 계산한다.
CCOUNT(컬럼명) 함수는 NULL 값을 포함한 모든 행을 계산한다.
DMIN() 함수는 NULL 값을 최소값으로 고려하여 결과에 포함한다.

정답
AVG() 함수는 NULL 값이 있는 행을 제외하고 평균을 계산한다.

5.4. 본질식별자 vs 인조식별자

본질식별자 및 인조식별자

식별자란?

엔터티내에서 어커런스(데이터)를 구분할 수 있는 구분자를 식별자라고 한다. 속성 또는 속성 그룹을 말한다.

본질식별자 (Natural Key)

업무에 의해 만들어진 식별자

정의

  • 본질식별자는 데이터 엔터티를 식별하는 데에 자연스럽게 존재하는 속성이나 조합입니다. 이는 실제로 데이터와 밀접한 관련이 있는 속성으로, 엔터티가 갖고 있는 자연스러운 속성을 활용하여 식별자로 사용됩니다.

장점

  • 데이터베이스에 의미 있는 정보를 포함하므로 인간이 읽고 이해하기 쉽습니다.
  • 자연스럽게 발생하는 속성을 사용하므로 데이터 일치성이 높을 수 있습니다.

단점

  • 데이터 속성의 변화나 형식 변경이 발생하면 식별자에도 영향을 미칠 수 있습니다.
  • 복합 본질식별자의 경우 복잡성이 증가할 수 있습니다.

인조식별자 (Surrogate Key)

업무적으로 만들어지지는 않지만 본질식별자가 복잡한 구성을 갖고 있으므로 인위적으로 만든 식별자

정의

  • 인조식별자는 의도적으로 만들어진, 데이터와 무관한 특별한 식별자입니다. 주로 시스템이나 데이터베이스 설계 목적으로 생성되며, 엔터티를 고유하게 식별하기 위한 보조적인 역할을 합니다.

장점

  • 데이터 일관성이 유지되며, 데이터 변화에 대한 영향이 적습니다.
  • 복합 본질식별자의 복잡성을 피할 수 있습니다.

단점

  • 식별자 자체가 데이터베이스와 관련이 없어, 사용자가 직접 읽고 이해하기 어려울 수 있습니다.
  • 중복되지 않도록 일련번호 등을 생성하기 위해 추가적인 관리가 필요할 수 있습니다.

예시


본질 식별자가 이보다 더 복잡해질 수도 있다.
그럼 어떻게 해야 더 편할까? 🤔

묶어서 쓰지말고 그냥 하나 쓰면 되지 !
이러면 모든 게 해피할까?

문제 1) 중복 데이터로 인한 품질 문제

외부식별자 사용

외부식별자(External Identifier)를 사용하더라도 중복 데이터를 막을 수 없습니다. 외부식별자는 엔터티를 식별하는데 사용되지만, 이는 해당 엔터티의 속성과는 무관하게 외부적으로 제공되는 값이기 떄문입니다. 따라서 엔터티의 속성이 중복되더라도 외부식별자가 다르면 각각의 행은 다르게 식별됩니다.

예를 들어, 학생 정보를 저장하는 데이터베이스에서 시퀀스 번호를 외부식별자로 사용한다고 가정해봅시다.

| 번호      | 이름      | 전공       | 성별 |
|----------|----------|-----------|-----|
| 1        | Alice    | Computer  | 여성 |
| 2        | Bob      | Biology   | 남성 |
| 3        | Alice    | Physics   | 여성 |

이 경우, 이름과 전공이 중복되더라도 번호가 다르면 각 행은 다르게 식별됩니다.

중복된 데이터로 인한 문제

  1. 데이터 일관성 문제:
    • 중복된 데이터는 서로 다른 값이 동일한 엔터티에 반복되어 나타날 수 있습니다. 이로 인해 데이터 일관성이 훼손되고, 동일한 정보를 다르게 표현하는 경우가 발생할 수 있습니다.
  2. 데이터 정확성 문제:
    • 중복된 데이터가 존재하면 해당 데이터를 업데이트할 때 일관된 방식으로 수행되지 않을 수 있습니다. 이로 인해 일부 데이터는 최신 값이고, 다른 부분은 오래된 값일 수 있습니다.
  3. 검색 및 분석의 어려움:
    • 중복된 데이터는 데이터를 검색하거나 분석할 때 혼란을 야기할 수 있습니다. 동일한 정보가 여러 번 나타나면 쿼리 결과가 예상치 못한 방식으로 반환될 수 있습니다.
  4. 자원 낭비:
    • 중복된 데이터는 데이터베이스 공간을 낭비하며, 중복을 최소화하려면 더 많은 저장 공간이 필요해질 수 있습니다.
  5. 오류 가능성 증가:
    • 중복된 데이터는 데이터를 복사하거나 이동할 때 오류가 발생할 가능성을 높입니다. 하나의 값을 업데이트하더라도 모든 중복된 값에 대해 일괄적으로 처리해야 합니다.

중복 데이터 문제 해결책

  1. 고유 식별자 사용:
    • 고유 식별자를 사용하여 각 레코드를 고유하게 식별합니다. 이를 통해 중복된 데이터를 방지하고 데이터 일관성을 유지할 수 있습니다.
  2. 데이터 정규화:
    • 데이터 정규화를 통해 중복을 최소화하고, 데이터를 더 작고 일관된 형태로 구성함으로써 중복 데이터의 문제를 완화할 수 있습니다.
  3. 중복 체크 제약 추가:
    • 데이터베이스에 중복 체크 제약을 추가하여 중복된 데이터가 삽입되는 것을 방지할 수 있습니다.
  4. 주기적인 데이터 클렌징:
    • 주기적으로 데이터를 클렌징하고 중복을 정리하는 작업을 수행하여 데이터의 품질을 유지합니다.

문제 2) 불필요한 인덱스 생성

인덱스란?

데이터베이스가 데이터를 빠르게 찾기위해 순서를 유지하고 있는 데이터
(보통 PK로 설정된 컬럼은 자동적으로 INDEX가 걸려있음)

ex) 번호 맞추기 (B Tree, B+Tree)

  • 인덱스를 잘못걸면 서치 속도가 굉장히 느려질 수 있음
  • 인덱스를 유지하는 추가 작업 필요
  • 데이터 추가 용량 필요

본질식별자의 단점

  1. 길이와 복잡성: 본질식별자가 길고 복잡한 경우 인덱스 크기가 증가합니다. 이로 인해 저장 공간을 불필요하게 차지하고, 검색 성능이 감소할 수 있습니다.
  2. 갱신 연산 부하: 식별자가 변경될 경우, 해당 키를 사용하는 모든 외래키(Foreign Key)와 관련된 레코드를 업데이트해야 합니다. 이는 갱신 연산에 부하를 주고, 일관성을 유지하기 어려울 수 있습니다.

인조식별자의 단점

  1. 비즈니스 의미 부족: 인조식별자는 의미 없는 값으로, 데이터의 비즈니스 의미를 표현하지 않습니다. 이로 인해 데이터를 이해하기 어려울 수 있습니다.
  2. 추가적인 인덱스 관리: 인조식별자를 사용하는 경우, PK 인덱스 외에도 데이터 접근성을 높이기 위해 다른 인덱스를 추가로 생성해야 할 수 있습니다. 이는 저장 공간을 더 차지하고, DML 성능에 영향을 줄 수 있습니다.
  3. 인덱스 낭비: 불필요하게 많은 인덱스를 생성하는 경우 저장 공간을 낭비하고, 갱신 연산에 부하를 줄 수 있습니다.

단점을 고려할 때, 데이터 모델링 시에는 각각의 상황에 맞게 적절한 식별자를 선택하고, 이에 따라 인덱스를 효율적으로 관리하는 것이 중요합니다.

연습문제

1번

Q. 문제본질식별자의 주요 장점 중 하나가 아닌 것은 무엇인가요?
A본질식별자는 엔터티 내에서 자연스럽게 발생하는 속성을 기반으로 합니다.
B본질식별자는 시스템이나 데이터베이스 설계 목적으로 인위적으로 생성됩니다.
C본질식별자는 데이터의 의미를 포함하므로 인간이 이해하기 쉽습니다.
D데이터 속성의 변화가 본질식별자에 영향을 미칠 수 있습니다.

정답
본질식별자는 자연스러운 데이터 속성을 기반으로 하며, 엔터티가 자연적으로 갖고 있는 속성을 활용하여 식별자로 사용됩니다. 인위적으로 생성되는 식별자는 인조식별자(Surrogate Key)를 의미합니다.

2번

Q. 문제인조식별자(Surrogate Key)의 주요 장점 중 하나가 아닌 것은 무엇인가요?
A데이터베이스의 일관성과 데이터 변화에 대한 영향이 적습니다.
B복잡한 본질식별자를 대체하여 데이터 모델의 단순화를 도모할 수 있습니다.
C인조식별자는 데이터와 밀접한 의미를 가지고 있어 사용자가 쉽게 이해할 수 있습니다.
D중복되지 않도록 관리가 필요하지만, 엔터티를 고유하게 식별하는 데 효과적입니다.

정답
인조식별자는 데이터와 직접적인 의미적 연관이 없는 인위적으로 생성된 식별자입니다. 따라서 사용자가 직접 읽고 이해하기 어려운 경우가 많으며, 주로 시스템 내에서 데이터를 유일하게 식별하기 위한 목적으로 사용됩니다.

profile
Data Analytics Engineer 가 되

0개의 댓글