[태그:] 후보키

  • 데이터베이스의 질서를 잡는 5개의 열쇠: 슈퍼키부터 외래키까지 완벽 해부

    데이터베이스의 질서를 잡는 5개의 열쇠: 슈퍼키부터 외래키까지 완벽 해부

    데이터베이스의 세계는 수많은 정보가 저장된 거대한 공간과 같습니다. 이 공간에서 우리가 원하는 데이터를 정확하고 빠르게 찾아내고, 데이터 간의 관계를 명확하게 정의하여 정보의 신뢰도를 보장하기 위해 반드시 필요한 것이 바로 ‘키(Key)’입니다. 키는 단순히 데이터를 구분하는 식별자를 넘어, 데이터의 무결성을 지키고, 중복을 방지하며, 관계형 데이터베이스의 핵심적인 구조를 떠받치는 가장 중요한 기둥입니다.

    많은 분들이 기본키(Primary Key)와 외래키(Foreign Key)는 익숙하게 들어보셨겠지만, 이들의 관계와 근간을 이루는 슈퍼키(Super Key), 후보키(Candidate Key), 대체키(Alternate Key)의 개념까지 완벽하게 이해하는 것은 데이터베이스를 깊이 있게 다루기 위한 필수 과정입니다. 이 키들은 각각 독립적인 개념이 아니라, 가장 넓은 범위인 슈퍼키에서부터 시작해 점차 구체화되고 선택되는 유기적인 관계를 맺고 있습니다. 이번 글에서는 이 다섯 가지 키의 개념을 명확히 정의하고, 이들이 어떻게 서로 영향을 주고받으며 데이터베이스의 질서를 만들어가는지 구체적인 예시와 함께 하나하나 파헤쳐 보겠습니다.

    슈퍼키 (Super Key): 유일성을 만족하는 모든 속성의 조합

    데이터베이스 키의 여정은 가장 포괄적인 개념인 슈퍼키에서 시작됩니다. 슈퍼키는 테이블 내의 각 행(Row 또는 튜플)을 유일하게 식별할 수 있는 하나의 속성(Attribute) 또는 속성들의 집합을 의미합니다. 슈퍼키를 이해하는 핵심 단어는 ‘유일성(Uniqueness)’입니다. 즉, 슈퍼키로 지정된 속성(들)의 값은 테이블 내에서 절대 중복되지 않아야 합니다.

    예를 들어, 아래와 같은 ‘학생’ 테이블이 있다고 가정해 봅시다.

    학번주민등록번호이름학년전공이메일
    1001950101-1234567김민준3컴퓨터공학mj.kim@email.com
    1002960315-2345678이서연2경영학sy.lee@email.com
    1003950101-2121212박도윤3컴퓨터공학dy.park@email.com
    1004971120-1456789최지우1디자인jw.choi@email.com

    이 테이블에서 각 학생을 유일하게 구별할 수 있는 속성 또는 속성의 조합은 무엇이 있을까요?

    • {학번}: 학번은 모든 학생에게 고유하게 부여되므로 각 학생을 식별할 수 있습니다. 따라서 {학번}은 슈퍼키입니다.
    • {주민등록번호}: 주민등록번호 역시 대한민국 국민이라면 모두 고유한 값을 가지므로 슈퍼키가 될 수 있습니다.
    • {이메일}: 이메일 주소 또한 일반적으로 개인마다 고유하므로 슈퍼키의 자격이 있습니다.
    • {학번, 이름}: {학번}만으로도 이미 유일성이 보장되지만, 여기에 다른 속성인 {이름}을 추가한 조합 역시 유일성이 깨지지 않습니다. 따라서 {학번, 이름}도 슈퍼키입니다.
    • {주민등록번호, 전공}: {주민등록번호}만으로 유일성이 보장되므로, 여기에 {전공}을 추가해도 여전히 슈퍼키입니다.
    • {이름, 전공}: ‘컴퓨터공학’과에 ‘김민준’이라는 학생이 또 있을 수 있으므로 {이름, 전공} 조합은 슈퍼키가 될 수 없습니다. 동명이인이 존재할 가능성을 배제할 수 없기 때문입니다.

    이처럼 슈퍼키는 유일성을 만족하는 모든 조합을 의미하기 때문에, 그 개수가 매우 많을 수 있습니다. {학번}, {학번, 이름}, {학번, 전공}, {학번, 이름, 전공} … 등 유일성을 보장하는 속성을 하나라도 포함하고 있다면 모두 슈퍼키가 됩니다. 하지만 이 모든 슈퍼키를 식별자로 사용하기에는 불필요한 속성들이 포함되어 있어 비효율적입니다. 그래서 우리는 이 중에서 가장 간결한 조합을 찾아야 할 필요가 생깁니다.


    후보키 (Candidate Key): 최소한의 속성으로 유일성을 만족하는 정예 멤버

    후보키는 슈퍼키 중에서 더 이상 속성을 줄일 수 없는, 즉 ‘최소성(Minimality)’을 만족하는 키를 말합니다. 슈퍼키가 ‘유일성’만을 조건으로 하는 넓은 개념이었다면, 후보키는 ‘유일성’과 ‘최소성’이라는 두 가지 까다로운 조건을 모두 만족해야 하는 정예 멤버인 셈입니다.

    최소성이란, 키를 구성하는 속성 중 어느 하나라도 제거하면 더 이상 유일성을 만족하지 못하는 상태를 의미합니다.

    다시 ‘학생’ 테이블의 예시로 돌아가 보겠습니다. 위에서 찾은 슈퍼키들 중에서 어떤 것이 후보키가 될 수 있을까요?

    • {학번}: 유일성을 만족합니다. 여기서 속성을 더 제거할 수 없으므로(속성이 하나뿐이므로) 최소성도 만족합니다. 따라서 {학번}은 후보키입니다.
    • {주민등록번호}: 유일성을 만족하고, 속성이 하나이므로 최소성도 만족합니다. 따라서 {주민등록번호}도 후보키입니다.
    • {이메일}: 유일성을 만족하고, 속성이 하나이므로 최소성도 만족합니다. 따라서 {이메일}도 후보키입니다.
    • {학번, 이름}: 이 조합은 슈퍼키이지만, 후보키는 될 수 없습니다. {이름} 속성을 제거해도 남은 {학번}만으로 유일성이 충분히 보장되기 때문입니다. 즉, 최소성을 만족하지 못합니다.
    • {주민등록번호, 전공}: 이 조합 역시 {전공} 속성이 없어도 {주민등록번호}만으로 유일하므로 최소성을 위반하여 후보키가 될 수 없습니다.

    만약, 어떤 학교에서 {학년, 반, 번호} 세 가지 속성이 합쳐져야만 학생을 유일하게 식별할 수 있다고 가정해 봅시다. 이 경우 {학년, 반, 번호}는 슈퍼키가 됩니다. 여기서 ‘학년’ 하나만 빼면 같은 반에 같은 번호를 가진 다른 학년 학생이 있을 수 있어 유일성이 깨지고, ‘반’이나 ‘번호’를 빼도 마찬가지입니다. 따라서 이 조합은 최소성을 만족하므로 후보키가 될 수 있습니다.

    결론적으로 ‘학생’ 테이블에서는 {학번}, {주민등록번호}, {이메일} 이렇게 세 개의 후보키를 찾을 수 있습니다. 이들은 모두 테이블의 대표 식별자가 될 자격이 있는 ‘후보’들입니다.


    기본키 (Primary Key): 후보키 중에서 선택된 단 하나의 대표

    기본키는 후보키 중에서 데이터베이스 설계자가 선택한 단 하나의 ‘대표’ 키입니다. 후보키들은 모두 테이블의 각 행을 유일하게 식별할 수 있는 자격이 있지만, 이들 중 가장 대표성이 있고, 데이터 관리에 용이하며, 자주 사용될 것이라 판단되는 키를 기본키로 지정합니다.

    기본키는 다음과 같은 매우 중요한 특징을 가집니다.

    1. 유일성(Uniqueness)과 최소성(Minimality): 후보키에서 선택되었으므로 당연히 두 가지 특성을 모두 만족합니다.
    2. Not Null: 기본키로 지정된 속성은 절대 NULL 값을 가질 수 없습니다. 식별자 정보가 비어있다는 것은 논리적으로 말이 되지 않기 때문입니다.
    3. 불변성(Immutability): 기본키의 값은 자주 변경되지 않아야 합니다. 만약 기본키 값이 계속 변경된다면, 이 키를 참조하는 다른 데이터들과의 관계가 불안정해질 수 있습니다.

    ‘학생’ 테이블의 후보키 {학번}, {주민등록번호}, {이메일} 중에서 무엇을 기본키로 선택하는 것이 가장 합리적일까요?

    • {주민등록번호}: 법적으로 고유하며 절대 중복되지 않는 강력한 후보입니다. 하지만 주민등록번호는 민감한 개인정보이므로 보안에 매우 취약하며, 외부에 노출되어서는 안 됩니다. 또한, 국적이 없는 외국인 학생의 경우 주민등록번호가 없을 수 있습니다. 따라서 기본키로는 부적절할 수 있습니다.
    • {이메일}: 일반적으로는 고유하지만, 사용자가 이메일 주소를 변경할 가능성이 있습니다. 기본키는 불변성을 지향해야 하므로, 변경 가능성이 있는 이메일 주소는 좋은 기본키라고 보기 어렵습니다.
    • {학번}: 각 학생에게 학교가 부여하는 고유한 번호로, NULL 값이 될 수 없으며, 졸업할 때까지 변하지 않는 값입니다. 개인정보 노출 위험도 없으며, 다른 테이블(예: 수강신청 테이블)에서 학생을 참조할 때 사용하기에도 간결하고 명확합니다.

    따라서 대부분의 설계자는 이 경우 {학번}을 기본키로 선택할 것입니다. 이처럼 기본키는 단순히 유일한 값을 넘어, 데이터의 안정성, 간결성, 비즈니스 로직상의 대표성 등을 종합적으로 고려하여 신중하게 선택해야 합니다.


    대체키 (Alternate Key): 기본키가 되지 못한 나머지 후보들

    대체키는 이름 그대로 기본키를 ‘대체’할 수 있는 키입니다. 즉, 후보키 중에서 기본키로 선택되지 않고 남은 키들을 대체키라고 부릅니다. 대체키 역시 후보키이므로 유일성과 최소성을 모두 만족하며, 각 행을 유일하게 식별할 수 있는 능력을 가지고 있습니다.

    ‘학생’ 테이블에서 {학번}을 기본키로 선택했다면, 남은 후보키인 {주민등록번호}{이메일}이 바로 대체키가 됩니다.

    대체키는 왜 필요할까요? 비록 대표 선수인 기본키는 아니지만, 이들 역시 시스템 운영에 있어 중요한 역할을 합니다. 예를 들어, 학생이 자신의 학번을 잊어버렸을 때, 이메일 주소나 주민등록번호를 통해 본인 인증을 하고 학번을 찾을 수 있도록 시스템을 구현할 수 있습니다. 이처럼 대체키는 기본키 외에 데이터를 검색하거나 유일성을 보장해야 하는 추가적인 제약 조건이 필요할 때 유용하게 사용됩니다.

    데이터베이스 시스템에서는 대체키에 대해 ‘UNIQUE’ 제약 조건을 설정하여 데이터의 중복 입력을 방지하는 용도로 많이 활용합니다. 예를 들어, {이메일} 속성에 UNIQUE 제약 조건을 걸어두면, 시스템에 동일한 이메일 주소가 두 번 등록되는 것을 막을 수 있어 데이터의 정합성을 높일 수 있습니다.

    정리하자면, 키들의 관계는 다음과 같습니다.

    1. 유일성을 만족하는 모든 키의 조합을 찾는다. (슈퍼키)
    2. 슈퍼키 중에서 최소성을 만족하는 키들을 추려낸다. (후보키)
    3. 후보키 중에서 가장 대표가 될 만한 키를 하나 선택한다. (기본키)
    4. 기본키가 되고 남은 후보키들을 대체키로 둔다. (대체키)

    외래키 (Foreign Key): 테이블과 테이블을 연결하는 관계의 열쇠

    지금까지 다룬 키들이 하나의 테이블 ‘내에서’의 규칙과 질서를 잡는 역할을 했다면, 외래키는 테이블과 테이블 ‘사이’의 관계를 맺어주는 연결고리 역할을 합니다. 외래키는 한 테이블에 속한 속성(열)이 다른 테이블의 기본키를 참조하는 것을 말합니다. 이 관계를 통해 데이터베이스는 데이터의 ‘참조 무결성(Referential Integrity)’을 보장합니다.

    참조 무결성이란, 외래키의 값은 반드시 참조하는 테이블의 기본키 값 중 하나이거나, 혹은 NULL이어야 한다는 규칙입니다. 이는 존재하지 않는 대상을 참조하는, 즉 허상 데이터를 방지하는 매우 중요한 제약 조건입니다.

    예를 들어, ‘수강신청’이라는 새로운 테이블을 만들어 보겠습니다.

    학생 테이블

    학번 (PK)이름전공
    1001김민준컴퓨터공학
    1002이서연경영학
    1003박도윤컴퓨터공학

    수강신청 테이블

    수강ID (PK)수강생_학번 (FK)과목코드성적
    11001CS101A+
    21002MG203A0
    31001CS305B+
    49999CS101C0

    ‘수강신청’ 테이블의 수강생_학번은 ‘학생’ 테이블의 학번(기본키)을 참조하는 외래키(FK, Foreign Key)입니다. 이 외래키 관계를 설정하면, 수강생_학번 열에는 반드시 ‘학생’ 테이블의 학번 열에 존재하는 값(1001, 1002, 1003)만 입력될 수 있습니다.

    위 예시의 4번째 행처럼, ‘학생’ 테이블에 존재하지 않는 9999 학번 학생의 수강 정보를 입력하려고 하면 데이터베이스 시스템은 참조 무결성 위반 오류를 발생시키며 데이터 입력을 막습니다. 또한, ‘학생’ 테이블에서 학생 1001의 정보를 삭제하려고 할 때, 이 학생의 수강신청 정보가 ‘수강신청’ 테이블에 남아있다면 삭제가 제한될 수 있습니다. 이처럼 외래키는 두 테이블의 데이터가 항상 일관성 있는 상태를 유지하도록 강제하는 안전장치 역할을 합니다.

    이러한 외래키 관계를 통해 우리는 여러 테이블에 흩어져 있는 정보를 마치 하나처럼 연결하여 조회하고 관리할 수 있게 되며, 이것이 바로 관계형 데이터베이스의 핵심 원리입니다.


    마무리: 데이터 무결성의 초석, 올바른 키의 선택과 활용

    지금까지 데이터베이스의 질서를 유지하는 다섯 가지 핵심 키인 슈퍼키, 후보키, 기본키, 대체키, 외래키에 대해 알아보았습니다. 이 키들은 단순히 데이터를 구분하는 표식을 넘어, 데이터의 유일성과 최소성을 보장하고 테이블 간의 논리적 관계를 설정하여 데이터의 무결성과 일관성을 지키는 데이터베이스의 헌법과도 같습니다.

    가장 넓은 범위의 슈퍼키에서 시작하여 최소성을 만족하는 후보키를 걸러내고, 그중 가장 적합한 것을 기본키로 선정하며, 나머지를 대체키로 활용하고, 외래키를 통해 관계를 확장해나가는 이 일련의 과정은 논리적이고 체계적인 데이터베이스 설계의 근간을 이룹니다. 따라서 각 키의 특징과 관계를 명확히 이해하고, 설계하려는 시스템의 특성을 깊이 고려하여 최적의 키를 선택하고 적용하는 것은 성공적인 데이터베이스 구축의 가장 중요한 첫걸음이라 할 수 있습니다. 키를 잘못 선택하면 데이터의 신뢰도가 떨어지고 시스템의 성능 저하를 유발할 수 있으므로 항상 신중을 기해야 합니다.

  • 데이터의 주민등록번호, 키(Key)로 관계와 무결성을 보장하다

    데이터의 주민등록번호, 키(Key)로 관계와 무결성을 보장하다

    수많은 사람 속에서 ‘나’를 유일하게 증명하는 주민등록번호처럼, 방대한 데이터의 바다에서 특정 데이터를 정확하게 찾아내고 구분하기 위해서는 고유한 식별자가 반드시 필요합니다. 데이터베이스 세계에서 이 주민등록번호와 같은 역할을 하는 것이 바로 ‘키(Key)’입니다. 키는 단순히 테이블의 특정 행(Row)을 식별하는 역할을 넘어, 테이블 간의 관계를 맺어주고 데이터의 일관성과 무결성을 지키는 핵심적인 장치입니다.

    만약 키가 없다면, 우리는 ‘컴퓨터공학과에 재학 중인 김정보’라는 학생의 성적을 찾기 위해 테이블의 모든 데이터를 일일이 뒤져야 할지도 모릅니다. 동명이인이라도 있다면 문제는 더욱 심각해집니다. 키는 이러한 혼란과 비효율을 막고, 데이터베이스가 질서정연하고 신뢰할 수 있는 시스템으로 작동하게 하는 근본 원리입니다. 이 글에서는 정보처리기사 시험의 필수 개념이자, 데이터베이스 설계의 심장이라 할 수 있는 다양한 종류의 키에 대해 그 개념과 관계, 그리고 중요성을 심도 있게 알아보겠습니다.

    키의 종류: 목적에 따라 역할을 나누다

    데이터베이스에서는 여러 종류의 키가 각기 다른 목적과 규칙을 가지고 사용됩니다. 이들의 관계를 이해하는 것이 데이터베이스 설계를 위한 첫걸음입니다.

    슈퍼키 (Super Key)

    슈퍼키는 테이블의 각 행을 유일하게 식별할 수 있는 속성(Attribute) 또는 속성들의 집합입니다. 유일성(Uniqueness)은 만족하지만, 최소성(Minimality)은 만족하지 않을 수 있습니다. 즉, 행을 식별하는 데 필요 없는 속성이 포함될 수 있다는 의미입니다.

    예를 들어, ‘학생’ 테이블이 {학번, 주민등록번호, 이름, 학과} 속성으로 구성되어 있다고 가정해 보겠습니다.

    • {학번} -> 각 학생을 유일하게 식별 가능하므로 슈퍼키입니다.
    • {주민등록번호} -> 역시 유일하게 식별 가능하므로 슈퍼키입니다.
    • {학번, 이름} -> ‘학번’만으로도 충분히 식별 가능하지만, 이 조합 역시 모든 학생을 유일하게 식별할 수 있으므로 슈퍼키입니다.
    • {학번, 주민등록번호, 이름} -> 이 조합 또한 유일성을 만족하므로 슈퍼키입니다.

    이처럼 슈퍼키는 유일하게 식별 가능한 모든 속성의 조합을 의미하는 광범위한 개념입니다.

    후보키 (Candidate Key)

    후보키는 슈퍼키 중에서 최소성까지 만족하는 키입니다. 즉, 각 행을 유일하게 식별할 수 있으면서, 꼭 필요한 최소한의 속성만으로 구성된 키를 말합니다. 후보키에서 속성을 하나라도 제거하면 더 이상 유일성을 만족하지 못하게 됩니다.

    위의 ‘학생’ 테이블 예시에서 후보키는 다음과 같습니다.

    • {학번}: 유일성과 최소성을 모두 만족합니다.
    • {주민등록번호}: 유일성과 최소성을 모두 만족합니다.
    • {학번, 이름}: 최소성을 만족하지 않습니다. ‘이름’ 속성을 제거해도 {학번}만으로 유일한 식별이 가능하기 때문입니다. 따라서 후보키가 아닙니다.

    후보키는 ‘기본키가 될 수 있는 후보’들이며, 모든 테이블은 하나 이상의 후보키를 반드시 가집니다.

    기본키 (Primary Key, PK)

    기본키는 후보키 중에서 설계자가 특별히 선택한 단 하나의 키입니다. 테이블의 모든 행은 기본키 값을 통해 유일하게 식별되고 접근됩니다. 기본키는 다음과 같은 중요한 제약 조건을 반드시 따라야 합니다.

    1. 유일성 (Uniqueness): 모든 행의 기본키 값은 유일해야 하며, 중복된 값을 가질 수 없습니다.
    2. 최소성 (Minimality): 행을 식별하는 데 필요한 최소한의 속성으로 구성되어야 합니다.
    3. 개체 무결성 (Entity Integrity): NULL 값을 가질 수 없습니다. 즉, 기본키 값은 반드시 존재해야 합니다.

    설계자는 여러 후보키 중에서 가장 데이터를 잘 대표하고, 값이 변하지 않으며, 단순한 형태의 키를 기본키로 선정하는 것이 일반적입니다. ‘학생’ 테이블에서는 보통 {학번}을 기본키로 선택합니다.

    대체키 (Alternate Key)

    대체키는 후보키 중에서 기본키로 선택되지 않고 남은 키들을 말합니다. ‘학생’ 테이블에서 {학번}을 기본키로 선택했다면, 또 다른 후보키였던 {주민등록번호}는 대체키가 됩니다. 대체키 역시 후보키의 특성을 그대로 가지고 있으므로, 유일성과 최소성을 만족하며 NULL 값을 허용하지 않는 것이 좋습니다.

    외래키 (Foreign Key, FK)

    외래키는 한 테이블의 속성(또는 속성들의 집합)이 다른 테이블의 기본키를 참조하는 키입니다. 이는 테이블 간의 관계를 맺어주는 매우 중요한 역할을 하며, 데이터베이스의 ‘관계형’이라는 이름이 붙은 이유이기도 합니다. 외래키는 두 테이블을 연결하는 다리 역할을 하며, 데이터의 일관성을 보장하는 ‘참조 무결성’ 제약 조건을 설정하는 데 사용됩니다.

    예를 들어, ‘수강신청’ 테이블이 있고, 이 테이블에는 어떤 학생이 어떤 과목을 신청했는지에 대한 정보가 들어있다고 가정해 봅시다.

    • 학생 테이블: {학번(PK), 이름, 학과}
    • 과목 테이블: {과목코드(PK), 과목명, 학점}
    • 수강신청 테이블: {신청번호(PK), 학번(FK), 과목코드(FK), 신청일}

    여기서 ‘수강신청’ 테이블의 학번은 ‘학생’ 테이블의 학번(PK)을 참조하는 외래키이고, 과목코드는 ‘과목’ 테이블의 과목코드(PK)를 참조하는 외래키입니다.

    키 종류유일성최소성NULL 값역할 및 특징
    슈퍼키OXO유일성을 만족하는 모든 속성의 조합
    후보키OOX유일성과 최소성을 만족 (기본키 후보)
    기본키OOX후보키 중 선택된 단 하나의 대표 키
    대체키OOX후보키 중 기본키가 되고 남은 키
    외래키XXO다른 테이블의 기본키를 참조, 관계 설정

    관계의 핵심, 기본키와 외래키의 상호작용

    데이터베이스의 힘은 데이터를 단순히 저장하는 것을 넘어, 데이터 간의 관계를 정의하고 유지하는 데 있습니다. 이 관계의 중심에 바로 기본키(PK)와 외래키(FK)가 있습니다. 이 둘의 조합은 ‘참조 무결성(Referential Integrity)’이라는 중요한 규칙을 강제합니다.

    참조 무결성 (Referential Integrity)

    참조 무결성이란 외래키의 값은 반드시 참조하는 테이블의 기본키 값으로 존재하거나, 혹은 NULL 값이어야 한다는 규칙입니다. 이 규칙은 존재하지 않는 데이터를 참조하는 것을 막아 데이터의 일관성과 신뢰도를 극적으로 높여줍니다.

    앞서 들었던 ‘학생’과 ‘수강신청’ 테이블의 예를 다시 보겠습니다.

    • ‘수강신청’ 테이블에 데이터를 삽입할 때, 학번 컬럼에는 ‘학생’ 테이블에 실제로 존재하는 학번 값만 입력할 수 있습니다. 존재하지 않는 ‘9999’라는 학번으로 수강 신청 데이터를 만들려고 하면 데이터베이스 시스템이 오류를 발생시키며 입력을 거부합니다. 이것이 바로 삽입 시의 참조 무결성입니다.
    • 만약 ‘학생’ 테이블에서 학번 ‘1001’인 학생을 삭제하려고 할 때, ‘수강신청’ 테이블에 ‘1001’ 학생의 수강 기록이 남아있다면 어떻게 될까요? 참조 무결성 제약 조건은 이러한 삭제를 막거나, 관련된 수강신청 기록을 함께 삭제(CASCADE)하거나, 학번 값을 NULL로 설정(SET NULL)하도록 하는 등의 옵션을 제공합니다. 이를 통해 부모 없는 자식 데이터(Orphaned Record), 즉 유효하지 않은 참조 관계가 발생하는 것을 방지합니다.

    이처럼 PK와 FK는 서로 긴밀하게 상호작용하며, 사용자의 실수나 논리적 오류로부터 데이터베이스를 보호하는 강력한 수호자 역할을 합니다.

    복합키 (Composite Key)

    때로는 하나의 속성만으로는 행을 유일하게 식별할 수 없어 두 개 이상의 속성을 조합해야만 기본키 역할을 할 수 있는 경우가 있습니다. 이렇게 두 개 이상의 속성을 묶어 만든 기본키를 복합키라고 합니다.

    예를 들어, M:N 관계를 해소하기 위해 만들어지는 연결 테이블에서 복합키가 자주 사용됩니다. ‘수강신청’ 테이블에서 신청번호 없이 {학번, 과목코드}를 조합하여 기본키로 사용할 수 있습니다. ‘한 학생은 한 과목을 한 번만 신청할 수 있다’는 규칙이 있다면, 이 두 속성의 조합은 항상 유일성을 만족하기 때문입니다. 이 경우, {학번, 과목코드} 자체가 이 테이블의 복합 기본키가 됩니다.


    결론: 데이터 무결성의 초석이자 관계의 시작

    지금까지 데이터베이스의 다양한 키의 종류와 그 역할을 살펴보았습니다. 키는 데이터베이스 설계의 가장 기초적이면서도 가장 중요한 개념입니다. 어떤 속성을 키로 선택하고, 테이블 간에 어떤 관계를 맺어줄 것인지를 결정하는 과정이 바로 데이터 모델링의 핵심입니다.

    • 슈퍼키후보키를 통해 테이블 내에서 데이터를 유일하게 식별할 수 있는 모든 가능성을 찾아냅니다.
    • 그중 가장 적합한 기본키를 선택하여 개체 무결성을 보장하고, 데이터 접근의 기준점을 마련합니다.
    • 외래키를 사용하여 테이블 간의 논리적 관계를 설정하고, 참조 무결성을 통해 데이터의 일관성을 유지합니다.

    효율적이고 안정적인 데이터베이스를 구축하기 위해서는 각 키의 특성을 명확히 이해하고, 설계하려는 시스템의 요구사항에 맞게 적절한 키를 신중하게 선택하고 배치하는 능력이 필수적입니다. 키는 단순히 데이터를 구분하는 식별자를 넘어, 데이터 세상의 질서와 신뢰를 지탱하는 보이지 않는 뼈대와 같습니다. 이 뼈대를 얼마나 튼튼하고 논리적으로 설계하는가에 따라 데이터베이스 시스템 전체의 품질이 좌우된다는 점을 반드시 기억해야 합니다.