데이터베이스의 Key에 대해서 이해하기 전에 먼저 중요한 용어인 유일성과 최소성에 대해서 확실히 이해하고 넘어가야 키에 대한 역할을 확실하게 구분 할 수 있다.
유일성과 최소성
유일성
먼저 유일성에 대해서 알아보자면 유일성은 이해하기가 간단하다.
다음과 같은 Member 테이블을 가정해보자.
member_id | name | age | Gender |
1 | 김봄보 | 20 | 남 |
2 | 문봄보 | 20 | 남 |
3 | 박봄보 | 21 | 녀 |
4 | 문봄보 | 19 | 남 |
유일성이란, 여러 개의 튜플이 존재 할 때, 각각의 튜플을 유일하게 식별 할 수 있는 것을 의미한다.
위의 테이블을 봤을 때, member_id 말고 다른 값들은 중복 된 값이 존재해서 각각의 튜플들을 구분 할 수 없는 것으로 보여진다.
이럴 때 member_id는 유일성을 가졌다고 본다.
튜플과 레코드
포스팅을 작성하면서 튜플과 레코드에 대해서 헷갈리는 부분이 있었다. 어디서는 ROW라 부르고 어디서는 튜플이라 부르고 어디서는 레코드라고 부르고 도대체 이들에 대한 차이점은 무엇인지 궁금했다. 모두가 같은 뜻이지만 사용하는 시스템에 따라 부르는 용어가 달라진다고 한다. 각 시스템에 대해서 잘 설명된 표가 있어서 참고하는 것이 좋을 것 같다.
파일 시스템 | 데이터베이스 모델링 | 관계형 데이터베이스 |
파일(File) | 엔터티(Entity) | 테이블(Table) |
레코드(Record) | 튜플(Tuple) | 행(Row) |
키(Key) | 유일값(Identifier) | 기본키(Primary Key), Unique |
필드(Field) | 어트리뷰트(Attribute) | 컬럼(Column) |
이 기회에 확실하게 구분하는 것이 좋을 것 같다. 주로 정보처리기사를 공부하다보면 데이터베이스 모델링 관점에 있어서 학습을 하는데 많이 접하기 때문에 아마 중간에 보이는 것이 익숙할 것 같다는 느낌도 든다.
참고 : Entity는 엔티티라고 해야하는게 맞지 않는가?
궁금해 할지는 모르겠지만 실제로 Entity를 엔터티라고 부르는 것을 많이 볼 수 있었고, 어디서는 엔티티라고 사용하는 것도 볼 수 있었다. 다만 소프트웨어 용어 사전과 실제 발음을 들어봐도 엔터티라고 부르는 것을 볼 수 있다.
따라서, 통일성을 위해 엔터티라고 하는 것이 좋을 것 같다!
최소성
이 최소성이라는 부분이 자주 헷갈리게 되는 관점이다. 정처기 시험을 보면서도 틀리고, 데브 코스를 보면서도 최소성에 대해서 또 헷갈리는 상황을 경험했었다. 하지만 분명히 확실하게 구분 할 수 있는 예시를 한 번 들어보면 이해가 될 것이라고 생각한다.
먼저 최소성에 대한 정의부터 살펴보자.
최소성이란 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질이다. 여기서 많이 헷갈리는 관점은 복합키는 최소성을 만족하지 않는다고 오해를 하는 경우가 종종 있다. 결론부터 말하자면 복합키는 최소성을 만족 할 수도 있고, 안 할 수도 있다.
복합키 + 최소성 O
다음과 같은 급여 테이블을 한 번 살펴보자.
사번 | 지급년월 | 지급일 | 급여액 |
1 | 202304 | 20230410 | 3,000,000 |
2 | 202304 | 20230410 | 3,500,000 |
3 | 202304 | 20230410 | 4,000,000 |
1 | 202305 | 20230510 | 3,500,000 |
2 | 202305 | 20230510 | 3,500,000 |
3 | 202305 | 20230510 | 4,000,000 |
다음과 같은 테이블이 있다고 할 때, 사번으로 테이블을 구분하고 싶어도 연도가 바뀌거나 달이 바뀌게 되면 사번이 중복되게 되는 현상이 발생한다.
이때, 복합키로써 (사번, 지급년월) 혹은 (사번, 지급일)을 기본키로서 지정하면, 해당 복합키는 이 테이블을 구분하기 위한 최소한의 속성들로 구성된 키이고 이것이 최소성을 만족하는 것이다.
복합키 + 최소성 X
복합키임에도 최소성을 만족하는 경우를 봤으면 최소성을 만족하지 않는 경우에 대해서도 알아보자. 다음과 같은 간단한 사원 테이블을 보자.
사번 | 이름 | 주민등록번호 | 직급 |
1 | 김봄보 | 901111-1xxxxxx | 부장 |
2 | 박봄보 | 941111-1xxxxxx | 과장 |
3 | 문봄보 | 971111-1xxxxxx | 대리 |
4 | 김봄보 | 991111-1xxxxxx | 사원 |
다음과 같은 테이블 구조에서 (사번, 주민등록번호)를 복합키로서 기본키로 등록했다고 가정하자.
하지만 다음과 같은 상황에서는 사번 또한 각 사원마다 고유해야하기 때문에 중복이 발생하지 않고 주민등록번호 또한 중복되지 않는다.
따라서, 각 컬럼들은 튜플들을 구분할 수 있고 이런 경우가 최소성을 만족하지 않는 것이다.
위의 내용을 이해했다면 단일 키는 무조건 최소성을 만족한다는 것을 이해할 수 있을 것이다. 그럼 이제 이어서 위의 개념을 가지고 각 키에 대한 종류와 개념에 대해서 알아보자.
키의 종류
슈퍼 키(Super Key)
유일성을 만족하는 키이다.
위의 사원 테이블을 예시로 봤을 때는 사번, 주민등록번호, {사번, 주민등록번호}, {사번, 이름, 주민등록번호} 는 모두 유일성을 만족하는 키이다.
복합 키(Composite Key)
2개 이상의 속성을 사용한 키이다.
후보 키(Candidate key)
유일성과 최소성을 만족하는 키이다. 후보 키라고 불리는 이유는 기본 키가 될 수 있는 후보들이기 때문이다.
사원 테이블에서는 사번 혹은 주민등록번호가 될 수 있다. NULL 값이 허용되지 않는다.
기본 키(Primary Key)
후보 키에서 선택된 키이다. 후보키의 속성을 다 가지고 있는 것이다. 다만 후보키 중에서 선택된 것일 뿐이다.
하지만 테이블을 구성하는데 있어서 가장 중요하게 작용하기도 한다.
대체 키(Surrogate Key)
후보 키 중에서 기본 키로 선택되지 않은 키이다.
질문을 하는 부분에 있어서 다음과 같이 질문을 하는 경우가 많다.
대체키와 슈퍼키 중 유일성과 최소성을 만족하는 키는 무엇인지, 유일성만 만족하는 키가 무엇인가.
실제로 정보처리기사 시험에 나왔던 문제이고, 프로그래머스 데브코스 시험에서도 비슷한 질문이 객관식에 나오기도 했다.
외래 키(Foreign Key)
어떤 테이블을 참조하는 키이다. 테이블들 간의 관계를 나타내기 위해서 사용된다.
대부분은 관례상 참조하는 테이블의 기본키를 사용하고는 한다. 기본 키 자체가 해당 테이블을 유일하게 식별할 수 있는 키이기 때문이다.
다만, 기본키를 제외하고도 유니크 제약조건이 달려있는 속성이거나 대체 키도 가능하다. 해당 속성들도 테이블을 유일하게 식별 할 수 있기 때문이다.
추가적으로, 다대일 관계에서 다 테이블에 존재하며 외래 키에는 NULL이 들어 올 수도 있다.
예를 들어서 사원 회사 부서 테이블이 있고, 사원 테이블에 회사와 부서 테이블이 연관되어 있을 경우 아직 신입사원이 어떤 부서인지 결정되지 않았을 경우 이러한 상황이 발생 할 수 있다.
키에 대한 구분은 유일성과 최소성이 무엇인지에 대해서 확실히 구분만 할 수 있다면 외우기에는 생각보다 간단하니 꼭 구분을 하도록 하자!
참고 문서
https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%ED%82%A4KEY-%EC%A2%85%EB%A5%98-%F0%9F%95%B5%EF%B8%8F-%EC%A0%95%EB%A6%AC
https://velog.io/@00yubin00/DB-%ED%82%A4%EC%9D%98-%EC%A2%85%EB%A5%98-%EC%8A%88%ED%8D%BC%ED%82%A4-%ED%9B%84%EB%B3%B4%ED%82%A4-%EA%B8%B0%EB%B3%B8%ED%82%A4-%EB%8C%80%EC%B2%B4%ED%82%A4-%EC%99%B8%EB%9E%98%ED%82%A4
https://dba.stackexchange.com/questions/286720/is-it-necessary-for-a-foreign-key-to-be-a-primary-key-in-another-table-why
'Computer Science > DataBase' 카테고리의 다른 글
3 계층 스키마 ( 3-Level Schema) (0) | 2023.04.29 |
---|
데이터베이스의 Key에 대해서 이해하기 전에 먼저 중요한 용어인 유일성과 최소성에 대해서 확실히 이해하고 넘어가야 키에 대한 역할을 확실하게 구분 할 수 있다.
유일성과 최소성
유일성
먼저 유일성에 대해서 알아보자면 유일성은 이해하기가 간단하다.
다음과 같은 Member 테이블을 가정해보자.
member_id | name | age | Gender |
1 | 김봄보 | 20 | 남 |
2 | 문봄보 | 20 | 남 |
3 | 박봄보 | 21 | 녀 |
4 | 문봄보 | 19 | 남 |
유일성이란, 여러 개의 튜플이 존재 할 때, 각각의 튜플을 유일하게 식별 할 수 있는 것을 의미한다.
위의 테이블을 봤을 때, member_id 말고 다른 값들은 중복 된 값이 존재해서 각각의 튜플들을 구분 할 수 없는 것으로 보여진다.
이럴 때 member_id는 유일성을 가졌다고 본다.
튜플과 레코드
포스팅을 작성하면서 튜플과 레코드에 대해서 헷갈리는 부분이 있었다. 어디서는 ROW라 부르고 어디서는 튜플이라 부르고 어디서는 레코드라고 부르고 도대체 이들에 대한 차이점은 무엇인지 궁금했다. 모두가 같은 뜻이지만 사용하는 시스템에 따라 부르는 용어가 달라진다고 한다. 각 시스템에 대해서 잘 설명된 표가 있어서 참고하는 것이 좋을 것 같다.
파일 시스템 | 데이터베이스 모델링 | 관계형 데이터베이스 |
파일(File) | 엔터티(Entity) | 테이블(Table) |
레코드(Record) | 튜플(Tuple) | 행(Row) |
키(Key) | 유일값(Identifier) | 기본키(Primary Key), Unique |
필드(Field) | 어트리뷰트(Attribute) | 컬럼(Column) |
이 기회에 확실하게 구분하는 것이 좋을 것 같다. 주로 정보처리기사를 공부하다보면 데이터베이스 모델링 관점에 있어서 학습을 하는데 많이 접하기 때문에 아마 중간에 보이는 것이 익숙할 것 같다는 느낌도 든다.
참고 : Entity는 엔티티라고 해야하는게 맞지 않는가?
궁금해 할지는 모르겠지만 실제로 Entity를 엔터티라고 부르는 것을 많이 볼 수 있었고, 어디서는 엔티티라고 사용하는 것도 볼 수 있었다. 다만 소프트웨어 용어 사전과 실제 발음을 들어봐도 엔터티라고 부르는 것을 볼 수 있다.
따라서, 통일성을 위해 엔터티라고 하는 것이 좋을 것 같다!
최소성
이 최소성이라는 부분이 자주 헷갈리게 되는 관점이다. 정처기 시험을 보면서도 틀리고, 데브 코스를 보면서도 최소성에 대해서 또 헷갈리는 상황을 경험했었다. 하지만 분명히 확실하게 구분 할 수 있는 예시를 한 번 들어보면 이해가 될 것이라고 생각한다.
먼저 최소성에 대한 정의부터 살펴보자.
최소성이란 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질이다. 여기서 많이 헷갈리는 관점은 복합키는 최소성을 만족하지 않는다고 오해를 하는 경우가 종종 있다. 결론부터 말하자면 복합키는 최소성을 만족 할 수도 있고, 안 할 수도 있다.
복합키 + 최소성 O
다음과 같은 급여 테이블을 한 번 살펴보자.
사번 | 지급년월 | 지급일 | 급여액 |
1 | 202304 | 20230410 | 3,000,000 |
2 | 202304 | 20230410 | 3,500,000 |
3 | 202304 | 20230410 | 4,000,000 |
1 | 202305 | 20230510 | 3,500,000 |
2 | 202305 | 20230510 | 3,500,000 |
3 | 202305 | 20230510 | 4,000,000 |
다음과 같은 테이블이 있다고 할 때, 사번으로 테이블을 구분하고 싶어도 연도가 바뀌거나 달이 바뀌게 되면 사번이 중복되게 되는 현상이 발생한다.
이때, 복합키로써 (사번, 지급년월) 혹은 (사번, 지급일)을 기본키로서 지정하면, 해당 복합키는 이 테이블을 구분하기 위한 최소한의 속성들로 구성된 키이고 이것이 최소성을 만족하는 것이다.
복합키 + 최소성 X
복합키임에도 최소성을 만족하는 경우를 봤으면 최소성을 만족하지 않는 경우에 대해서도 알아보자. 다음과 같은 간단한 사원 테이블을 보자.
사번 | 이름 | 주민등록번호 | 직급 |
1 | 김봄보 | 901111-1xxxxxx | 부장 |
2 | 박봄보 | 941111-1xxxxxx | 과장 |
3 | 문봄보 | 971111-1xxxxxx | 대리 |
4 | 김봄보 | 991111-1xxxxxx | 사원 |
다음과 같은 테이블 구조에서 (사번, 주민등록번호)를 복합키로서 기본키로 등록했다고 가정하자.
하지만 다음과 같은 상황에서는 사번 또한 각 사원마다 고유해야하기 때문에 중복이 발생하지 않고 주민등록번호 또한 중복되지 않는다.
따라서, 각 컬럼들은 튜플들을 구분할 수 있고 이런 경우가 최소성을 만족하지 않는 것이다.
위의 내용을 이해했다면 단일 키는 무조건 최소성을 만족한다는 것을 이해할 수 있을 것이다. 그럼 이제 이어서 위의 개념을 가지고 각 키에 대한 종류와 개념에 대해서 알아보자.
키의 종류
슈퍼 키(Super Key)
유일성을 만족하는 키이다.
위의 사원 테이블을 예시로 봤을 때는 사번, 주민등록번호, {사번, 주민등록번호}, {사번, 이름, 주민등록번호} 는 모두 유일성을 만족하는 키이다.
복합 키(Composite Key)
2개 이상의 속성을 사용한 키이다.
후보 키(Candidate key)
유일성과 최소성을 만족하는 키이다. 후보 키라고 불리는 이유는 기본 키가 될 수 있는 후보들이기 때문이다.
사원 테이블에서는 사번 혹은 주민등록번호가 될 수 있다. NULL 값이 허용되지 않는다.
기본 키(Primary Key)
후보 키에서 선택된 키이다. 후보키의 속성을 다 가지고 있는 것이다. 다만 후보키 중에서 선택된 것일 뿐이다.
하지만 테이블을 구성하는데 있어서 가장 중요하게 작용하기도 한다.
대체 키(Surrogate Key)
후보 키 중에서 기본 키로 선택되지 않은 키이다.
질문을 하는 부분에 있어서 다음과 같이 질문을 하는 경우가 많다.
대체키와 슈퍼키 중 유일성과 최소성을 만족하는 키는 무엇인지, 유일성만 만족하는 키가 무엇인가.
실제로 정보처리기사 시험에 나왔던 문제이고, 프로그래머스 데브코스 시험에서도 비슷한 질문이 객관식에 나오기도 했다.
외래 키(Foreign Key)
어떤 테이블을 참조하는 키이다. 테이블들 간의 관계를 나타내기 위해서 사용된다.
대부분은 관례상 참조하는 테이블의 기본키를 사용하고는 한다. 기본 키 자체가 해당 테이블을 유일하게 식별할 수 있는 키이기 때문이다.
다만, 기본키를 제외하고도 유니크 제약조건이 달려있는 속성이거나 대체 키도 가능하다. 해당 속성들도 테이블을 유일하게 식별 할 수 있기 때문이다.
추가적으로, 다대일 관계에서 다 테이블에 존재하며 외래 키에는 NULL이 들어 올 수도 있다.
예를 들어서 사원 회사 부서 테이블이 있고, 사원 테이블에 회사와 부서 테이블이 연관되어 있을 경우 아직 신입사원이 어떤 부서인지 결정되지 않았을 경우 이러한 상황이 발생 할 수 있다.
키에 대한 구분은 유일성과 최소성이 무엇인지에 대해서 확실히 구분만 할 수 있다면 외우기에는 생각보다 간단하니 꼭 구분을 하도록 하자!
참고 문서
https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%ED%82%A4KEY-%EC%A2%85%EB%A5%98-%F0%9F%95%B5%EF%B8%8F-%EC%A0%95%EB%A6%AC
https://velog.io/@00yubin00/DB-%ED%82%A4%EC%9D%98-%EC%A2%85%EB%A5%98-%EC%8A%88%ED%8D%BC%ED%82%A4-%ED%9B%84%EB%B3%B4%ED%82%A4-%EA%B8%B0%EB%B3%B8%ED%82%A4-%EB%8C%80%EC%B2%B4%ED%82%A4-%EC%99%B8%EB%9E%98%ED%82%A4
https://dba.stackexchange.com/questions/286720/is-it-necessary-for-a-foreign-key-to-be-a-primary-key-in-another-table-why
'Computer Science > DataBase' 카테고리의 다른 글
3 계층 스키마 ( 3-Level Schema) (0) | 2023.04.29 |
---|