유일성과 최소성
유일성
유일성이란 하나의 키(Key)로 유일한 행(Row)을 식별할 수 있는 성질을 의미합니다.
주민등록번호는 생명이 태어나면 한 명당 하나씩만 부여받기 때문에 전산상으로 실수가 있는 게 아닌 이상 절대 중복될 수 없습니다. 따라서 유일성을 갖고 있습니다.
하지만 이름이나 성별은 동일한 이름과 성별을 갖고 있는 사람들이 여럿 존재할 수 있기 때문에 유일성을 갖고 있지 않습니다.
(주민등록번호)
→ 유일성을 갖는다.
(이름)
→ 유일성을 갖지 않는다.
(주민등록번호, 이름)
→ 두 개를 묶어도 유일성을 갖는다.
최소성
행(Row)을 유일하게 식별하는 데 있어서 반드시 필요한 속성으로만 구성되어야 하는 성질을 의미합니다.
주민등록번호와 이름을 묶어서 키(Key)를 구성하게 되면 유일성을 만족하므로 행을 유일하게 식별할 수 있습니다.
하지만 잘 생각해 보면 주민등록번호만 있으면 이름이 없더라도 유일성을 만족하기 때문에 행을 유일하게 식별할 수 있습니다. 따라서 이름은 반드시 필요한 속성이 아니기 때문에 최소성을 갖지 않습니다.
이름을 빼고 주민등록번호만으로 키를 구성한다면 불필요한 속성은 없으므로 최소성을 갖게 됩니다.
(주민등록번호)
→ 최소성을 갖는다.
(주민등록번호, 이름)
→ 최소성을 갖지 않는다.
데이터베이스 Key 종류
슈퍼키(Super Key)
유일성을 갖고 있는 모든 칼럼(혹은 속성)은 슈퍼키가 될 수 있습니다. 유일성만 갖고 있으면 최소성을 갖고 있지 않아도 됩니다.
예) (주민등록번호), (학번), (주민등록번호, 학번), (주민등록번호, 이름)
후보키(Candidate Key)
후보키(Candidate Key)는 유일성과 최소성을 모두 갖고 있어야 합니다.
(주민등록번호, 이름)은 유일성을 갖긴 하지만 이름은 행을 유일하게 식별하는 데 있어서 반드시 필요하진 않기 때문에 최소성을 만족하지 않습니다. 따라서 슈퍼키는 될 수 있지만 후보키는 될 수 없습니다.
대신 이름을 빼버리고 (주민등록번호)만 가지고 키를 구성한다면 유일성과 최소성을 모두 만족하므로 후보키가 될 수 있습니다.
기본키(Primary key)
기본키(Primary Key)는 후보키 중에서 설계자가 선택한 키입니다. 후보키 중에서 선택되었으므로 유일성과 최소성을 모두 만족합니다. 따라서 중복된 값을 가질 수 없습니다. 추가적인 특징으로는 NULL 값이 올 수 없습니다.
일반적인 RDBMS에서는 기본키를 설정하면 자동으로 인덱스(Index)를 생성하기 때문에 데이터를 빠르게 조회할 수 있습니다.
대체키(Alternative Key)
대체키(Alternative Key)는 후보키가 두 개 이상인 경우 기본키로 선택되지 못하고 남은 후보키들을 의미합니다.
외래키(Foreign Key)
외래키(Foreign Key)는 다른 테이블의 기본키 칼럼과 연결되는 칼럼을 의미합니다. 관계형 데이터베이스에서는 1:1(일대일), 1:N(일대다), N:M(다대다)과 같은 여러 관계들이 존재합니다. 이러한 관계들을 표현할 때 외래키를 사용합니다.
예를 들어 책 테이블과 카테고리 테이블이 있다고 가정해 보겠습니다. 그리고 하나의 책은 여러 개의 카테고리를 가질 수 있다고 한다면 책과 카테고리는 1:N 관계가 되고 이를 표현할 때 외래키를 사용합니다.
책 테이블
책 번호(PK) | 책 이름 |
1 | 단어가 읽기다 기본편 |
2 | 단어가 읽기다 실력편 |
카테고리 테이블
카테고리 번호(PK) | 카테고리 이름 | 책 번호(FK) |
1 | 요리 | 1 |
2 | 학교 생활 | 1 |
3 | 요리 | 2 |
1:N(부모와 자식) 관계에서의 외래키 칼럼은 N(자식)에 해당하는 테이블에 추가하면 됩니다. 그리고 외래키 값은 값은 부모가 누구인지에 대한 참조 값(부모의 PK 값)을 갖고 있으면 됩니다.
이렇게 외래키를 사용하여 관계를 표현하면 카테고리 테이블에서 외래키 값으로 부모가 누구인지 바로 알 수 있고 조인(JOIN)으로 두 테이블을 합쳐서 데이터를 조회해 볼 수 있습니다.
테이블을 분리하고 외래키로 관계를 표현하면 데이터의 무결성을 유지할 수 있다는 이점이 있습니다. 만약 테이블을 분리하지 않고 하나의 테이블에서 책 정보와 카테고리 정보를 모두 관리한다면 책 이름이 바뀔 경우 자식에 해당하는 모든 카테고리 수만큼 부모의 책 이름을 전부 갱신해줘야 하는데 이는 데이터의 무결성을 유지하기 매우 어려워진다고 할 수 있습니다.
'📓 CS 지식 > 📖 데이터베이스' 카테고리의 다른 글
데이터베이스 기본 개념 정리 (0) | 2023.09.19 |
---|---|
데이터베이스 관계 정리(1:1, 1:N, N:M) (0) | 2023.09.11 |