티스토리 뷰
반응형
🗝️ 데이터베이스 키의 모든 것: 학생 데이터로 쉽게 이해하기
📖 데이터베이스와 키: 왜 필요할까?
데이터베이스는 데이터를 체계적으로 저장하고 관리하는 시스템입니다. 예를 들어, 대학에서 학생 정보를 관리하려면 이름, 학번, 이메일 같은 정보를 저장해야 합니다. 하지만 데이터가 많아지면 특정 학생을 정확히 찾는 게 어려워집니다. 예를 들어, “김지훈”이라는 학생을 찾으려는데 같은 이름이 여러 명이라면 혼란이 생기죠.이때 키(Key)가 필요합니다. 키는 테이블의 각 행(레코드)을 유일하게 구분할 수 있는 속성(컬럼)이나 속성 조합입니다. 키를 잘 설정하면 데이터를 빠르게 찾고, 테이블 간 관계를 연결하며, 데이터의 정확성을 보장할 수 있습니다.
🔑 주요 용어 정의
- 유일성(Unique): 특정 속성(또는 속성 조합)의 값이 테이블에서 절대 중복되지 않는 성질입니다. 예: 학번은 모든 학생마다 다릅니다.
- 최소성(Minimality): 유일성을 유지하는 데 꼭 필요한 속성만 포함하는 성질입니다. 불필요한 속성은 제외해야 합니다.
- 무결성(Integrity): 데이터가 정확하고 일관되게 유지되는 상태입니다. 예: 존재하지 않는 학번으로 수강신청을 하면 안 됩니다.
🗃️ 데이터셋: 학생 테이블
대학의 학생 관리 시스템을 예로 들어 봅니다. 아래는 학생(Student) 테이블입니다.학번(StudentID) | 이름(Name) | 이메일(Email) | 전화번호(Phone) | 학과(Department) |
---|---|---|---|---|
2023001 | 김지훈 | jhkim@email.com | 010-1234-5678 | 컴퓨터공학 |
2023002 | 박서준 | sjpark@email.com | 010-2345-6789 | 전자공학 |
2023003 | 김지훈 | jhkim2@email.com | 010-3456-7890 | 기계공학 |
이 테이블에서 특정 학생을 찾으려면 어떤 정보를 사용할까요? “김지훈”이라는 이름은 두 명이어서 혼란스럽습니다. 전화번호나 이메일도 유일해 보이지만, 입력 오류(예: 오타)로 중복될 가능성이 있습니다. 그래서 키를 사용해 문제를 해결합니다.
🔷 1. 슈퍼키(Super Key)
정의
슈퍼키는 테이블에서 각 행을 유일하게 식별할 수 있는 속성 또는 속성의 조합입니다. 유일성만 만족하면 어떤 속성을 포함해도 슈퍼키가 됩니다.설명
학생 테이블에서 학번(StudentID)은 각 학생마다 고유하므로, 학번 하나만으로도 학생을 구분할 수 있습니다. 하지만 학번에 다른 속성을 추가해도 유일성은 유지됩니다. 예를 들어,{학번, 이름}
이나 {학번, 이메일, 전화번호}
도 각 행을 유일하게 식별합니다.
📌 슈퍼키 예시
- {학번}: 2023001, 2023002, 2023003은 모두 다릅니다.
- {학번, 이름}: (2023001, 김지훈), (2023002, 박서준), (2023003, 김지훈)은 모두 다릅니다.
- {학번, 이메일, 전화번호}: 더 많은 속성을 포함해도 유일성 유지.
🚫 슈퍼키가 될 수 없는 경우
- {이름}: “김지훈”이 두 명이므로 중복 → 슈퍼키가 아닙니다.
- {학과}: “컴퓨터공학”에 여러 학생이 있을 수 있음 → 슈퍼키가 아닙니다.
- {이름, 학과}: (김지훈, 컴퓨터공학)과 (김지훈, 기계공학)은 다르지만, 같은 학과에 같은 이름의 학생이 또 있을 수 있음 → 슈퍼키가 아닙니다.
💭 비유
슈퍼키는 학생을 구분하기 위해 학생증, 이름표, 전화번호 등 여러 정보를 조합해 “이 사람이 누구야!” 하고 알아보는 방법입니다. 하지만 너무 많은 정보를 쓰면 복잡해지죠.🔷 2. 후보키(Candidate Key)
정의
후보키는 유일성을 만족하면서 최소성을 갖춘 속성 또는 속성의 조합입니다. 즉, 속성을 하나라도 빼면 유일성이 깨지는 경우입니다.설명
슈퍼키는 유일성을 보장하지만, 불필요한 속성이 포함될 수 있습니다. 예를 들어,{학번, 이름}
은 유일하지만, 이름은 필요 없습니다. 학번만으로도 충분하죠. 학생 테이블에서 {학번}
과 {이메일}
은 각각 최소한의 속성으로 유일성을 보장하므로 후보키입니다.
📌 후보키 예시
- {학번}: 학번만으로 모든 학생을 구분할 수 있습니다.
- {이메일}: 이메일도 각 학생마다 고유하므로 후보키입니다.
🚫 후보키가 될 수 없는 경우
- {학번, 이름}: 유일성은 만족하지만, 이름은 불필요(최소성 위배) → 후보키가 아닙니다.
- {이름}: 유일성 위배(김지훈 중복) → 후보키가 아닙니다.
- {전화번호, 학과}: 전화번호가 유일하다고 해도, 학과는 불필요(최소성 위배) → 후보키가 아닙니다.
💭 비유
후보키는 학생을 구분할 때 최소한의 정보만 사용하는 겁니다. 학생증(학번) 하나만 보여주면 충분한데, 굳이 이름표까지 붙일 필요는 없죠.🔷 3. 기본키(Primary Key)
정의
기본키는 후보키 중에서 데이터베이스 관리자가 대표로 선택한 키입니다. 기본키는 유일성과 최소성을 만족하며, 값이 반드시 존재해야 하고(Null 불가), 중복될 수 없습니다.설명
학생 테이블에서{학번}
과 {이메일}
이 후보키입니다. 하지만 학번은 고정적이고 관리하기 쉽습니다(이메일은 바뀔 수 있죠). 그래서 {학번}
을 기본키로 선택합니다.
📌 기본키 예시
- {학번}
💭 비유
기본키는 학생들 사이에서 “너를 대표하는 건 학생증이야!”라고 정한 겁니다. 학생증 번호만 있으면 누구인지 바로 알 수 있습니다.🔷 4. 대체키(Alternate Key)
정의
대체키는 기본키로 선택되지 않은 나머지 후보키입니다.설명
학생 테이블에서{이메일}
은 후보키지만 기본키로 선택되지 않았습니다. 따라서 {이메일}
은 대체키입니다. 대체키는 기본키 대신 사용할 수 있는 예비 식별자 역할을 합니다.
📌 대체키 예시
- {이메일}
💭 비유
대체키는 학생증 대신 사용할 수 있는 “예비 학생증” 같은 겁니다. 이메일로도 학생을 구분할 수 있지만, 학생증(학번)이 더 자주 쓰입니다.🔷 5. 외래키(Foreign Key)
정의
외래키는 한 테이블의 속성이 다른 테이블의 기본키를 참조하는 키입니다. 테이블 간 관계를 연결하고 참조 무결성을 보장합니다.설명
이제 학생의 수강 정보를 관리하기 위해 수강신청(Enrollment) 테이블을 추가합니다.수강번호(EnrollID) | 학번(StudentID) | 과목코드(CourseCode) |
---|---|---|
1 | 2023001 | CS101 |
2 | 2023002 | CS102 |
3 | 2023003 | ME201 |
학번(StudentID)
은 학생 테이블의 기본키(Student.StudentID
)를 참조합니다. 이를 외래키라고 합니다. 외래키 덕분에 학생 테이블에 없는 학번(예: 9999999)으로 수강신청을 하는 잘못된 데이터를 막을 수 있습니다.
📌 외래키 예시
- 수강신청.StudentID → 학생.StudentID
🚫 외래키가 될 수 없는 경우
- 수강신청.과목코드: 학생 테이블의 기본키를 참조하지 않음 → 외래키가 아닙니다.
- 존재하지 않는 학번(예: 9999999)을 참조하는 경우 → 참조 무결성 위배 → 외래키가 아닙니다.
💭 비유
외래키는 수강신청할 때 “학생증을 확인”하는 과정입니다. 학생증(학번)이 학생 테이블에 없으면 수강신청이 불가능합니다.🔷 키의 발전 과정: 한눈에 정리
학생 테이블을 통해 키가 어떻게 정제되는지 정리합니다:- 슈퍼키: {학번}, {학번, 이름}, {학번, 이메일, 전화번호} 등 유일성을 보장하는 모든 조합.
안 되는 경우: {이름}, {학과} → 유일성 위배. - 후보키: {학번}, {이메일} → 최소한의 속성으로 유일성 보장.
안 되는 경우: {학번, 이름} → 최소성 위배. - 기본키: {학번} → 대표로 선택.
- 대체키: {이메일} → 기본키로 선택되지 않은 후보키.
- 외래키: 수강신청.StudentID → 학생 테이블의 기본키 참조.
📊 키 종류 정리표
키 종류 | 정의 | 예시 | 안 되는 예시 |
---|---|---|---|
슈퍼키 | 유일성을 만족하는 모든 속성 조합 | {학번}, {학번, 이름} | {이름}, {학과} |
후보키 | 유일성과 최소성을 만족하는 속성 조합 | {학번}, {이메일} | {학번, 이름}, {이름} |
기본키 | 후보키 중 대표로 선택된 키 | {학번} | - |
대체키 | 기본키로 선택되지 않은 후보키 | {이메일} | - |
외래키 | 다른 테이블의 기본키를 참조하는 키 | 수강신청.StudentID | 수강신청.과목코드 |
💡 결론: 키의 중요성
데이터베이스에서 키는 데이터를 정확하고 효율적으로 관리하는 핵심입니다. 학생 테이블을 통해 키의 발전 과정을 보았습니다:- 슈퍼키는 유일성을 보장하는 시작점입니다.
- 후보키는 불필요한 속성을 제거해 효율성을 높입니다.
- 기본키와 대체키는 테이블의 대표 식별자와 예비 식별자를 정의합니다.
- 외래키는 테이블 간 관계를 연결해 데이터 무결성을 지킵니다.
반응형
'정보처리기사' 카테고리의 다른 글
데이터그램 방식과 가상 회선 방식: 자세한 설명 (0) | 2025.07.08 |
---|---|
소프트웨어 설계의 응집도: 기능적 응집, 순차적 응집, 교환적 응집, 절차적 응집, 시간적 응집, 논리적 응집, 우연적 응집 (0) | 2025.07.07 |
UML의 관계: 의존, 연관, 일반화 (0) | 2025.07.06 |
URL의 구조와 의미: 완전 정리! 인터넷 주소, 프로토콜, 도메인, 경로, 질의 문자열, 프래그먼트 (1) | 2025.07.05 |
스머프 공격(Smurf Attack) - 원리와 대응법 (1) | 2025.07.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C++ 알고리즘
- 알고리즘문제풀이
- 코딩 테스트
- 파이썬코딩
- 코딩테스트
- 문자열처리
- 그래프 탐색
- 그리디알고리즘
- 백준
- c언어
- 문제 풀이
- 알고리즘기초
- 객체지향
- 프로그래밍
- 인접 행렬
- c++알고리즘
- 브루트포스
- 문제풀이
- Python
- 동적계획법
- 파이썬
- 알고리즘 문제풀이
- python 알고리즘
- 코딩
- C++
- 알고리즘
- DP
- 동적 계획법
- 그리디
- dfs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형