관계형 데이터베이스의 구성 요소 (2)

Heejeong Choi·2021년 8월 13일
0
post-thumbnail
해당글은 '오라클로 배우는 데이터베이스 입문' 책을 읽고 작성되었습니다.

지난장에서 관계형 데이터베이스의 가장 기본인 테이블과 그에 속한 행과 열(컬럼)에 대해 알아보았습니다. 이번 2장에서는 여러 키들의 역할에 대해 알아보겠습니다.

오늘 참조할 자료입니다.

데이터베이스에서 왠 '키(Key)'?

말 그대로, 열쇠라는 의미에서 비롯된 용어입니다. 즉, 수없이 많은 데이터를 구별할 수 있는 유일한 값이라는 뜻입니다. 키는 하나의 테이블을 구성하는 여러 열 중에서 특별한 의미를 지닌 하나 또는 여러 열의 조합을 의미하고 있어요.

키는 종류별로 데이터를 구별하거나 테이블 간의 연관 관계를 표현할 때 키로 지정한 열을 사용하기도 하죠.

키의 종류? 기본키(primary key), 후보키(candidate key), 외래키(foreign key), 복합키(composite key) 등으로 구분 될 수 있습니다.

1) 기본키(Primary Key)

여러 키 중에서 가장 중요한 키. 즉, 테이블에 저장된 행을 식별할 수 있는 유일한 값이어야 합니다. 그렇기 때문에 한 테이블 내에서 중복되지 않는 값만 가질 수 있겠죠? 또한, NULL값은 가져서도 안되겠구요.

위의 제가 참조해 둔 표를 참고해주세요. 기본키는 중복되지 않은 유일한 값이라는 특성을 가졌기 때문에 하나 또는 여러 열의 조합으로 만들어 질 수 있습니다. 위에 표를 보시더라도, 학번, 주민등록번호, 이메일, 전화번호가 기본키의 후보가 될 수 있겠죠. 그렇다면 저희는 학번을 기본키로 설정하도록 하겠습니다.

하지만, 기본키는 개인 정보 노출이 가장 적은 데이터로 선정해주셔야 합니다.

2) 후보키(Candidate Key)

후보키는 대체키(alternate key)라고도 부르며, 기본키가 될 수 있는 모든 키를 의미합니다.

자 그렇다면, 학번, 주민등록번호, 이메일, 전화번호가 기본키의 후보였고 학번을 기본키로 두기로 하였으니, 후보키는 주민등록번호, 이메일, 전화번호가 되는 것 입니다.

3) 외래키(Foreign Key)

외래키는 특정 테이블에 포함되어 있으면서 다른 테이블의 기본키로 지정된 키를 의미합니다.

학생 정보 테이블(위)와 학과 정보 테이블(아래)

학과 정보 테이블에 학과코드, 학과 이름, 개설 날짜, 그리고 대표 전화번호로 열이 구성되어있을 때, 각 학과를 구분 할 수 있는 유일한 데이터인 학과 코드를 기본키로 설정하였습니다.
학생 정보 테이블을 보면 열 중 학과 정보 테이블의 기본키인 학과코드가 있는데, 이 학과 코드가 바로 학생 정보 테이블과 학과 정보 테이블을 이어주는 외래키 역할을 한다고 말할 수 있습니다.
학사 정보 프로그램에 접속한다고 가정했을 때, 이 프로그램에 입력된 학번으로 특정 학생 정보 테이블에서 jenny 학생을 찾아 낼 수 있고, 이 학생의 행에 저장된 학과 코드를 활용하여 학과 정보 테이블 또한 찾아갈 수 있습니다. 그에 따라 jenny 학생이 속해 있는 해당 학과의 전화번호도 찾아낼 수 있는 것입니다.

그렇다면 테이블을 여러개 사용하지 않고 합쳐두는건 어때요?

같은 학과인 학생들의 행에는 동일한 데이터를 계속 넣어주어야 하는 중복데이터는 어떻게 하실건가요?

지금은 테이블을 붙여서 사용하는게 편리해 보일지더라도, 학과 데이터 종류가 100개 정도 있고, 학교에 학생은 매년 몇 천명씩 입학한다고 가정 할 때, 졸업생 데이터까지 고려한다면 중복데이터는 기하급수적으로 늘어날 것 입니다. 저장 공간 크기와 관리는 비용과 밀접한 관련이 있기 때문에 데이터 중복은 어쩔 수 없는 상황이 아닌 반드시 피해야하는 상황입니다.

4) 복합키(Composite Key)

여러 열을 조합하여 기본키 역할을 할 수 있게 만든 키.

profile
Welcome to my velog! I love learning something new to build up my ability in development field. I don't think it is shame not to know, but it is shame to pretend to know about something you don't know.

0개의 댓글