참고 - YouTube: 쉬운코드
하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질
을 말합니다.
여러 개의 튜플이 존재할 때 각각의 튜플을 서로 구분할 수 있는 속성이 존재해야 합니다.
한 마디로 말하자면, 각각의 튜플은 유일해야 한다는 뜻입니다.
예를 들어 어떤 릴레이션에 (주민번호, 나이, 사는 곳, 혈액형) 이라는 속성이 존재한다고 하면,
이 때, 나이, 사는 곳, 혈액형은 모두 충분히 중복될 수 있는 속성들입니다.
하지만 주민번호는 모두 다르기 때문에 주민번호 속성에서 중복은 절대 발생할 수 없습니다.
이 릴레이션에서 키는 주민번호로 지정될 것이며, 이렇게 각각의 튜플을 구분할 수 있는 성질을 유일성
이라고 표현합니다.
키를 구성하는 속성들 중 가장 최소로 필요한 속성들로만 키를 구성하는 성질
을 말합니다.
쉽게 말해, 키를 구성하고 있는 속성들이 진짜 각 튜플을 구분하는 데 꼭 필요한 속성들로만 구성되어 있는지를 의미합니다.
예를 들어 위와 같이 (주민번호, 나이, 사는 곳, 혈액형) 릴레이션에서 (주민번호, 나이) 가 키로 지정이 되어 있다면, 당연히 이 키는 각 튜플을 구분할 수 있습니다.
주민번호와 나이가 모두 같은 사람은 세상에 존재하지 않기 때문에 그렇게 말할 수 있지만, 더 간단하게 주민번호가 중복되는 사람은 세상에 존재하지 않습니다.
그렇기 때문에 (주민번호, 나이) 로 지정된 키는 최소성을 만족하지 않고 키에서 나이를 뺀 주민번호 만 키로 지정이 될 경우, 이 키는 최소성
을 만족한다고 할 수 있습니다.
데이터베이스에서 Key
란, 데이터베이스 내에서 각각의 레코드를 구분하기 위한 값 또는 속성(열)을 의미합니다.
즉, Key
는 레코드 간 구분을 위한 식별자 역할을 합니다.
데이터베이스에서 Key
는 데이터의 일관성과 무결성을 보장하기 위한 중요한 역할을 수행하며, 데이터베이스를 설계하고 구현할 때 매우 중요한 개념입니다.
데이터베이스에서 Key는 다음과 같이 종류가 있습니다.
참고: https://ggop-n.tistory.com/78
아래는 Key
가 수행하는 역할에 대한 구체적인 설명입니다.
레코드 구분
데이터베이스 내에 저장된 레코드 각각은 유일한 Key 값
을 가지고 있습니다.
이를 통해 각각의 레코드를 구분할 수 있으며, 데이터의 중복을 방지합니다.
무결성 제약 조건 보장
Key
를 이용하여 데이터의 일관성과 무결성을 보장할 수 있습니다.
데이터베이스 내의 모든 레코드는 Key 값을 가지고 있으며, 이를 이용하여 특정 조건을 만족하지 않는 레코드를 필터링하거나, 관련 테이블 간의 무결성 제약 조건을 설정할 수 있습니다.
레코드 검색 및 정렬
Key
를 이용하면 데이터베이스 내에서 빠르고 정확한 레코드 검색 및 정렬이 가능합니다. 데이터베이스 시스템은 Key
를 이용하여 레코드를 찾거나 정렬할 수 있으며, 이를 통해 데이터 검색과 분석을 수행할 수 있습니다.
관계형 데이터베이스에서의 레코드 연결
관계형 데이터베이스에서는 PrimaryKey
와 ForeignKey
를 이용하여 레코드 간의 관계를 설정합니다. PrimaryKey
는 해당 테이블의 레코드를 유일하게 식별하는 Key로 사용되며, ForeignKey
는 다른 테이블의 Primary Key를 참조하는 Key로 사용됩니다.
이를 통해 두 테이블 간의 관계를 설정하고 데이터를 효율적으로 관리할 수 있습니다.
인덱스 생성 및 검색
데이터베이스에서 자주 사용되는 컬럼을 인덱스로 설정하여 검색 시간을 단축시킬 수 있습니다.
이 때 인덱스
는 Key 값을 기반
으로 생성되며, 이를 이용하여 데이터 검색 시간을 단축시킵니다.
데이터의 보안 유지
Key
값을 이용하여 데이터의 보안을 유지할 수 있습니다.
데이터베이스 내에서 중요한 정보를 보호하기 위해 해당 데이터에 접근할 수 있는 사용자를 제한하거나, 암호화된 Key를 사용할 수 있습니다.
위와 같이 Key
는 데이터베이스에서 매우 중요한 역할을 수행합니다.
데이터베이스를 설계하고 구현할 때는 이러한 Key를 적절하게 설정하여 데이터의 일관성과 무결성을 보장하고, 데이터의 검색 및 관리를 효율적으로 수행할 수 있도록 해야합니다.
유일성 O, 최소성 X
각 릴레이션(테이블)에서 튜플(행)을 유일하게 식별할 수 있는 속성(열, attribute) 또는 속성의 집합입니다.
이는 테이블에서 중복을 허용하지 않는 고유 식별자와 같은 역할을 합니다.
Superkey
는 릴레이션에서 하나 이상의 존재할 수 있습니다.
또한, Superkey
중에서 최소한의 속성으로 구성된 것을 Minimal Superkey
라고 합니다.
Minimal Superkey
는 유일성과 최소성을 모두 만족시키며, 테이블의 기본키(primary key)
로 사용됩니다.
Player 테이블에서 id, name 조합은 각 학생을 고유하게 식별할 수 있는 Superkey
가 될 수 있습니다.
이 경우, id나 name 중 어느 하나만으로도 학생을 고유하게 식별할 수 있지만, 두 개의 속성을 함께 사용하면 더 강력한 식별력을 가지게 됩니다.
PLAYER(id, name, team_id, back_number, birth_date)
의superkey
{id, name, team_id, back_number, birth_date}
{id, name}
{name, team_id, back_number}
... etc
유일성 O, 최소성 O
Superkey 중에서 유일성(uniqueness)을 만족하는 속성(열) 또는 속성의 집합
입니다.
즉, 테이블의 모든 튜플을 고유하게 식별할 수 있는 속성들의 집합을 의미합니다.
CandidateKey
는 Superkey
와 달리 유일성을 만족하는 최소한의 속성 집합을 의미합니다.
즉, 하나의 테이블에서 여러 개의 Candidate Key가 존재할 수 있으며, 이 중에서 기본키(Primary Key)로 사용할 속성 집합을 선택할 수 있습니다.
CandidateKey
는 테이블을 설계할 때 중요한 개념 중 하나이며, 데이터베이스의 정규화(normalization) 과정에서 중요한 역할을 합니다.
Player 테이블에서 id와 team_id, back_number 조합은 모두 튜플을 유일하게 식별할 수 있는 CandidateKey가 될 수 있습니다.
PLAYER(id, name, team_id, back_number, birth_date)
의candidateKey
{id}
{team_id, back_number}
후보키 중 선택받은 키
테이블에서 특정 행(row)을 고유하게 식별할 수 있는 하나의 속성(열) 또는 속성의 집합입니다.
즉, PrimaryKey
는 테이블의 모든 행을 고유하게 식별할 수 있는 유일한 식별자(identifier)입니다.
PrimaryKey
는 테이블에서 반드시 하나만 존재해야 하며, 해당 테이블의 모든 행에 대해 유일하고 NULL 값을 포함하지 않아야 합니다.
PrimaryKey
로 지정된 속성(열)은 반드시 유일성 제약 조건(unique constraint)을 가져야 합니다.
PrimaryKey
는 테이블을 설계할 때 중요한 역할을 합니다. 이는 테이블에서 데이터를 조회, 수정, 삭제할 때 특정 행을 고유하게 식별할 수 있도록 해주기 때문입니다.
또한, PrimaryKey
를 이용하여 다른 테이블과의 관계를 정의하는 외래키(foreign key)
를 설정할 수 있습니다.
PrimaryKey
는 보통 테이블에서 자동으로 생성되는 일련번호(serial number), GUID(Globally Unique Identifier), 또는 유일성이 보장되는 다른 속성을 사용하여 정의됩니다.
PLAYER(id, name, team_id, back_number, birth_date)
의PrimaryKey
{id}
or{team_id, back_number}
후보키 중 선택받지 못한 키
테이블 내에서 PrimaryKey
를 제외한 나머지 Key
를 말합니다.
즉, 테이블 내에서 유일성을 보장하는 Key이지만, PrimaryKey로 사용되지 않은 Key를 의미합니다.
AlternateKey
는 PrimaryKey
로 사용될 수 없지만, 다른 테이블에서 ForeignKey
로 사용될 수 있습니다. 따라서, 테이블 간의 관계를 설정하는 데 사용될 수 있습니다.
AlternateKey
를 사용할 때에도 유일성을 보장해야 합니다.
따라서, 데이터베이스에서 중복을 제거하기 위해 AlternateKey
를 선택할 때에는 유일성을 보장하는 Key
를 선택해야합니다.
Order(주문) 테이블에서 order_id(주문 ID)
가 PrimaryKey
인 경우, customer_id(고객 ID)
와 같은 다른 Key는 AlternateKey
가 됩니다.
ORDER(order_id, customer_id, menu, cost)
의AlternateKey
{customer_id}
...
테이블에서 특정 속성(열) 또는 속성의 집합에 대해 유일성(uniqueness)을 강제하는 제약 조건(constraint)입니다.
즉, UniqueKey
로 지정된 속성(열)은 해당 속성에 대해 중복된 값을 허용하지 않습니다.
UniqueKey
는 PrimaryKey
와 유사한 역할을 합니다.
하지만, PrimaryKey
는 해당 테이블에서 반드시 하나만 존재하며 NULL 값을 허용하지 않아야 하지만, UniqueKey
는 여러 개의 속성을 조합하여 지정할 수 있으며, NULL 값을 포함할 수 있습니다.
UniqueKey
는 테이블에서 중복된 값을 허용하지 않아야 하는 경우에 사용됩니다.
UniqueKey
는 테이블을 설계할 때 중요한 역할을 합니다. 이는 데이터의 일관성과 무결성을 유지하기 위해 중요하기 때문입니다.
또한, UniqueKey
를 이용하여 다른 테이블과의 관계를 정의하는 외래키(foreign key)
를 설정할 수 있습니다.
사용자 테이블에서 team_id, back_number
는 중복되면 안 되기 때문에 UniqueKey
로 지정할 수 있습니다.
PLAYER(id, name, team_id, back_number, birth_date)
의UniqueKey
{team_id, back_number}
다른 릴레이션의 기본키를 참조
ForeignKey
는 한 테이블의 PrimaryKey
를 다른 테이블의 특정 속성(열)과 연결하는 역할을 합니다.
즉, ForeignKey
는 다른 테이블의 PrimaryKey
를 참조(reference)하는 속성(열)입니다.
이를 통해 한 테이블의 데이터를 다른 테이블과 연결할 수 있습니다.
ForeignKey
를 가지고 있는 테이블을 참조하는 테이블이라고 부르며, 이를 참조하는 테이블에서는 ForeignKey
와 PrimaryKey
가 동일한 값이어야 합니다.
ForeignKey
를 이용하여 두 개 이상의 테이블을 연결하면, 데이터를 보다 효율적으로 관리할 수 있습니다.
PLAYER 테이블
에서는 TEAM 테이블
의 team_id
를 참조하는 ForeignKey
를 설정할 수 있습니다.
PLAYER(id, name, team_id, back_number, birth_date)
와
TEAM(id, name, manager)
가 있을 때ForeignKey
{team_id}