본문 바로가기

Programming/DataBase System

Chapter2 - 키




주어진 릴레이션 안에서 투플을 구별하는 방법이 있어야 한다. 이것은 릴레이션의 속성(attribute)으로 표현되어야 한다. 즉, 투플의 속성의 값은 그 투플을 유일하게 구별할 수 있어야 한다. 다르게 표현하면, 한 릴레이션에 있는 두 개의 투플의 모든 속성의 값이 같아서는 안된다.
    수퍼 키(superkey)를 간단히 표현하면, 한 릴레이션에서 그 투플을 유일하게 식별할 수 있도록 해주는 하나 혹은 그 이상의 속성들의 집합이다. 예를 들면, instructor 릴레이션의 ID 속성은 하나의 instructor 의 name 속성은 같은 이름을 가진 교수가 있을 수 있기 때문에 수퍼키가 아니다.
    릴레이션 r의 스키마에 존재하는 속성들의 집합을 R이라고 하자. R의 부분집합 K가 r의 수퍼키가 되기 위해서는, 서로 다른 두 투플의 K의 속성들이 같아서는 안된다. 다시 말해서, 투플 t1과 t2가 r에 존재하고 t1 != t2라면, t1.K != t2.K 이어야 한다.
    수퍼 키는 관련 없는 속성을 포함할 수 있다. 예를 들면, instructor 릴레이션에서 ID 와 name 이 수퍼키가 될 수 있다. 만약 K가 수퍼키라면 K를 포함한 어떠한 집합도 수퍼 키가 된다. 때로는 수퍼 키의 부분집합이 수퍼 키가 아닌 경우가 존재할 수 있다. 그러한 최소한의 수퍼키를 후보 키(cadidate key)라 한다.
    다른 여서 속성들의 집합이 하나의 후보 키 역할을 할 수도 있다. name과 dept_name 의 조합이 instructor 릴레이션에서 투플을 구분하는 데 충분하다고 하자. 그러면 {ID} 와 {name, dept_name} 둘 다 후보 키이다. ID 와 name 속성을 함께 사용하면 instructor 투플을 구분할 수 있지만, ID 하나만으로 후보 키를 이루기 때문에 {ID, name} 조합은 후보 키가 아니다. 결국 ID 속성 하나만이 후보 키가 된다.
    릴레이션 안에서 투플을 구별하기 위한 수단으로 데이터베이스 설계자에 의해 선택된 후보키를 지징할 때는 주기(primary key)라는 용어를 사용한다. 주 키, 후보 키, 수퍼 키는 각각의 투플이ㅡ 특성이 아니라 전체 릴레이션의 특성이다. 릴레이션의 어떠한 투플도 동시에 키 속성에 대해 같은 값을 가질 수 없다. 키의 지정은 모델링 하는 실세계의 제약조건을 나타낸다.
    주 키는 신중하게 선택해야 한다. 앞서 살펴본 바와 같이, 사람의 이름은 주 키가 될 수 없다. 같은 이름을 가진 사람이 존재하기 때문이다. 한 사람의 주민등록번호를 속성으로 사용한다면 이것은 후보키가 될 수 있다. 이론적으로 두 사람이 같은 주민등록번호를 가질 수는 없기 때문이다. 그러나 외국인에게는 주민등록번호가 주어지지 않으므로 내국인과 외국인을 동시에 고용하는 기관은 자체적인 구별 방법이 필요할 것이다. 키를 정하는 방법으로 여러 개의 속성을 동시에 이용하는 방법도 있다.
    주 키는 그 속성들이 절대로 변하지 않거나 매우 드물게 변하도록 선택해야 한다. 예를 들어, 개인의 주소 항목은 자주 바뀔 수 있기 때문에 주 키의 일부분으로 사용하면 안된다. 반번에 주민등록번호는 절대로 바뀌지 않는다. 조직에 의해 생성되는 유일한 식별자는 일반적으로 두 조직이 합병되는 경우가 아니면 변하지 않는다. 그러한 경우가 발생하면 같은 식별자가 두 조직에 의해 생성되었을 수가 있기 때문에 그 식별자가 유일할 수 있도록 식별자를 재조정할 필요가 있을 것이다.
    관습적으로 릴레이션 스키마의 주 키 속성은 다른 속성보다 앞에 쓴다. 예를 들어, department 릴레이션의 dept_name 은 주 키이기 때문에 가장 앞에 위치한다. 그리고 주 키는 밑줄로 표시한다. 
    릴레이션 스키마 r1은 자신의 속성들 가운데 다른 릴레이션 스키마 r2의 주 키를 포함할 수 있다. 이러한 속성을 r1으로부터 r2를 참조하는 외래 키(foreign key) 라고 한다. 릴레이션 r1은 왜래 키 종속을 가진 참조하는 릴레이션(referencing relation)이라고 부르며, 릴레이션 r2는 외래 키를 가진 참조된 릴레이션(referenced relation)이라고 한다. 예를 들어, instructor 릴레이션의 dept_name 속성은 deparment 를 참조하는 instructor 로부터의 외래 키이다. dept_name 은 department 릴레이션의 주 키이기 때문이다. instructor 릴레이션의 어떤 투플 ta가 있다면, tb의 dept_name 속성값이 반드시 department 릴레이션에 존재해야 한다. 즉, department 릴레이션에 ta의 dept_name 속성값을 자신의 주 키인 dept_name으로 가지는 투플 tb가 존재해야 한다. 
    section 릴레이션과 teaches 릴레이션을 살펴보자. 수업을 위한 어떤 분반이 존재한다면, 그 분반은 한 명의 교수가 가르쳐야 한다. 하지만 한 명 이상의 교수가 그 분반을 가르칠 수도 있아 이러한 제약조건을 강제하기 위해서 section 릴레이션에 (course_id, sec_id, semester, year_와 같은 특정 조합이 나타나야 한다. 그렇게 되면 이러한 조합은 teaches 에도 나타나야 한다. 하지만 한명 이상의 교수가 한 분반을 가르칠 수 있기 때문에 이러한 값의 집합은 teaches으 주 키가 되지 못한다. 결과적으로 section 으로부터 teaches로의 외래 키를 정의할 수 없다(teaches로부터 section 으로의 외래 키는 정의할 수 있다).
    section 으로부터 teaches로의 제약 조건은 참조 무결성 제약조건(referential integrity constraints)한 예이다. 참조 무결성 제약조건은 참조하는 릴레이션에 있는 투플의 특정 속성이 나타나는 값은 참조되는 릴레이션에 특정 속성에 최소한 하나의 투플이 존재해야 한다는 것이다.



  • 개체 무결성 제약 조건(Entity Integrity Constraint) : 존재하는 사실은 유일하게 식별되어야 한다.
  • 참조 무결성 제약 조건(Referential integrity Constraint) : 존재하지 않는 사실은 참조하지 않아야 한다.
  • Primary 값에는 NULL X
  • Primary key가 되지 못한 후보키를 대체키 Alternate key

SuperKey

A-B-C-D-E-F-G
=> 1개의 사실을 보여줄 때 

{A, B, C, D, E, F, G}
=> 그 중 1개의 Attribute로 봤을 때도 항상 1개의 사실을 보여줄때 이것 또한 슈퍼키가 된다.

A, B, C, F 에 최소의 슈퍼키 값을 보장해준다. uniquness minimality => CandateKey => 그보다 작은 슈퍼키 존재
=>슈퍼키 -> 후보키 X , 그보다 작은 슈퍼 키 존재X=>후보키 O


모든 테이블은 반드시 1개 이상의 슈퍼키가 존재, 1개 이상의 후보키가 존재

만약 슈퍼키가 1개-> 그 키가 후보키
단, 주키는 무조건 1개


'Programming > DataBase System' 카테고리의 다른 글

Chapter2 - 관계형 질의어  (0) 2019.04.14
Chapter2 - 스키마 다이어그램  (0) 2019.04.14
Chapter2 - 데이터베이스 스키마  (0) 2019.04.13
Chapter2 - 관계형 모델 소개  (0) 2019.04.12
Chapter1 - 요약  (0) 2019.04.12