티스토리 뷰

반응형
🗝️ 데이터베이스 키의 모든 것: 학생 데이터로 쉽게 이해하기

🗝️ 데이터베이스 키의 모든 것: 학생 데이터로 쉽게 이해하기


📖 데이터베이스와 키: 왜 필요할까?

데이터베이스는 데이터를 체계적으로 저장하고 관리하는 시스템입니다. 예를 들어, 대학에서 학생 정보를 관리하려면 이름, 학번, 이메일 같은 정보를 저장해야 합니다. 하지만 데이터가 많아지면 특정 학생을 정확히 찾는 게 어려워집니다. 예를 들어, “김지훈”이라는 학생을 찾으려는데 같은 이름이 여러 명이라면 혼란이 생기죠.
이때 키(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)을 참조하는 경우 → 참조 무결성 위배 → 외래키가 아닙니다.

💭 비유

외래키는 수강신청할 때 “학생증을 확인”하는 과정입니다. 학생증(학번)이 학생 테이블에 없으면 수강신청이 불가능합니다.

🔷 키의 발전 과정: 한눈에 정리

학생 테이블을 통해 키가 어떻게 정제되는지 정리합니다:
  1. 슈퍼키: {학번}, {학번, 이름}, {학번, 이메일, 전화번호} 등 유일성을 보장하는 모든 조합.
    안 되는 경우: {이름}, {학과} → 유일성 위배.
  2. 후보키: {학번}, {이메일} → 최소한의 속성으로 유일성 보장.
    안 되는 경우: {학번, 이름} → 최소성 위배.
  3. 기본키: {학번} → 대표로 선택.
  4. 대체키: {이메일} → 기본키로 선택되지 않은 후보키.
  5. 외래키: 수강신청.StudentID → 학생 테이블의 기본키 참조.

📊 키 종류 정리표

키 종류 정의 예시 안 되는 예시
슈퍼키 유일성을 만족하는 모든 속성 조합 {학번}, {학번, 이름} {이름}, {학과}
후보키 유일성과 최소성을 만족하는 속성 조합 {학번}, {이메일} {학번, 이름}, {이름}
기본키 후보키 중 대표로 선택된 키 {학번} -
대체키 기본키로 선택되지 않은 후보키 {이메일} -
외래키 다른 테이블의 기본키를 참조하는 키 수강신청.StudentID 수강신청.과목코드


💡 결론: 키의 중요성

데이터베이스에서 키는 데이터를 정확하고 효율적으로 관리하는 핵심입니다. 학생 테이블을 통해 키의 발전 과정을 보았습니다:
  • 슈퍼키는 유일성을 보장하는 시작점입니다.
  • 후보키는 불필요한 속성을 제거해 효율성을 높입니다.
  • 기본키대체키는 테이블의 대표 식별자와 예비 식별자를 정의합니다.
  • 외래키는 테이블 간 관계를 연결해 데이터 무결성을 지킵니다.
이 과정을 이해하면 데이터베이스를 더 체계적으로 설계할 수 있습니다. 학생 관리 시스템처럼, 키를 잘 설정하면 학생을 빠르게 찾고, 수강신청 데이터를 정확히 관리할 수 있습니다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
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
글 보관함
반응형