1. 수퍼키(Super Key)
Ÿ 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키
Ÿ 릴레이션을 구성하는 모든 튜플에 대해 유일성(Unique)은 만족하지만, 최소성(Minimality)은 만족하지 못함
* 유일성: 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 함
* 최소성: 키를 구성하는 속성하나를 제거하면 유일하게 식별할 수 없도록 꼭 필요한 최소의 속성으로 구성되어야 함
2. 후보키(Candidate Key)
Ÿ 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용되는 속성들의 부분 집합
Ÿ 유일성과 최소성을 모두 만족함
3. 기본키(Primary Key)
Ÿ 후보키 중에서 특별히 선정된 키로 중복된 값을 가질 수 없음
Ÿ 유일성과 최소성을 가지며 튜플을 유일하게 식별하기 위해 반드시 필요함
Ÿ NULL 값을 가질 수 없음
4. 대체키(Alternate Key)
Ÿ 후보키 중에서 선정된 기본키를 제외한 나머지의 후보키
5. 외래키(Foreign Key)
Ÿ 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
Ÿ 한 릴레이션에 속한 속성 A와 참조 릴레이션의 기본키인 B가 동일한 도메인 상에서 정의되었을 때의 속성 A를 외래키라고 함
Ÿ 외래키는 참조 릴레이션의 기본키와 동일한 키 속성을 가짐
선언적 참조 무결성
기본 키 제약 (Primary key constraints)
유일제약 (Unique constraints)
참조 키 제약 (Foreign key constraints)
Identity 속성
기본키 제약 (Primary Key Constraints)
기본 키
- 한행을 유일하게 식별하는 컬럼이나 컬럼의 조합
- 컬럼수준 또는 테이블 수준에서 생성될 수 있다.
테이블 수준 PRIMARY KEY 제약은 하나 이상의 컬럼에 지정될 수 있다.
컬럼수준 PRIMARY KEY 제약은 해당 컬럼에 지정된다.
- 해당 컬럼에 대한 유일 색인이 생성된다.
테이블 생성시의 제약
테이블 수정시의 제약
- Books Online참조 (-_-;;;)
고려사항
- 비클러스터 색인이 지정되지 않거나 이미 클러스터 색인이 테이블에 존재하지 않으면 클러스터 색인이 생성됨
- NOT NULL로 지정된 컬럼에 대해서만 지정될 수 있다.
- 각 테이블은 단 하나의 기본 키 제약을 가질 수 있다.
- WITH NOCHECK를 지정해도 기존 데이터에 대한 제약을 막을 수 없다.
- 이미 기본 키 제약이나, 유일 제약, 클러스터 색인이 존재하면 새로운 기본 키 제약이 추가되기 전에 삭제되어야 한다.
유일제약(Unique Constraints)
두 행이 같은 색인 값을 가지지 않도록 제한한다.
- 주로 대체 후보 키(candidate Key)를 위해 사용된다.
- NULL을 허용하는 것을 제외하면 기본 키 제약과 유사하다.
- 컬럼과 테이블 수준에서 생성될 수 있다.
- 클러스터 또는 비 클러스터 색인을 지정된 컬럼에 생성한다.
- 한 테이블에서 하나 이상의 컬럼을 지정할 수 있다.
테이블을 생성하는 경우에 유일제약
테이블을 수정하는 경우에 유일제약
- Books Online참조 (-_-+)
고려사항
- 한 테이블의 두 행이 NULL이 아닌 값을 가질 수 없다.
- 컬럼 자료형은 NULL을 허용한다.
- 하나의 테이블에 하나 이상의 유일 제약을 지정할 수 있다.
- 색인의 종류가 지정되지 않으면 유일 제약을 지정할 수 있다.
- WITH NOCHECK 옵션을 지정하더라도 기존의 데이터에 대한 유일 제약 점검을 막을 수 없다.
참조 키 제약 (Foreign Key Constraints)
추가되는 데이터가 반드시 참조하는 테이블에 일치하는 값을 가지도록 요구한다.
테이블을 생성하는 경우에 유일제약
테이블을 수정하는 경우에 유일제약
외부키 제약을 만들때 존재하는 데이터를 체크하지않는 참조키 제약을 만들때
- Books Online참조
고려사항
- FOREIGN KEY 문에 지정된 컬럼과 자료형의 개수는 REFERENCES 절의 컬럼과 자료형의 개수와 순서대로 일치해야한다.
- FOREIGN KEY 제약을 위한 색인은 자동적으로 생성되지 않는다.
조인의 성능을 향상시키기 위해 색인을 생성하는 것이 좋다.
- WITH NOCHECK 옵션을 지정하면 기존의 데이터에 대해 FOREIGN KEY 제약이 점검되지 않는다.
Identity 속성
테이블에 들어가는 각 행을 식별하는 시스템 생성의 값을 가지는 컬럼을 지정할 수 있다.
IDENTY[(seed, increment)]
- 이전의 identity값과 테이블을 정의할 때 미리 지정한 증가 값을 근거로 하여 자동으로 값을 생성한다.
Identity 컬럼을 생성하는 명령들
- CREATE TABLE
- ALTER TABLE
- SLELECT INTO
CREATE TABLE class( student_id INT IDENTITY(100, 5), name VARCHAR(16) )
INSERT class VALUES ('Martin')
|
고려사항
- 하나의 테이블에 단 하나의 identity 컬럼을 허용한다.
- 갱신될 수 없다.
- NULL을 허용하지 않는다.
- integer, numeric, decimal 자료형을 사용해야한다.
IDENTITYCOL 키워드
- identity 컬럼을 참조할 수 있도록 한다.
- identity 속성으로 정의된 컬럼의 이름을 기억할 필요가 없다.
전역변수 @@identity
- 해당 세션 동안 삽입된 마지막 행의 identity값을 유지한다.
SELECT * FROM class WHERE IDENTITYCOL = 125 SELECT @@identity
|
IDENT_INCR / IDENT_SEED 시스템 함수
IDENT_INCR(‘table_name’)
IDENT_SEED(‘table_name’)
- 각각 테이블의 identity컬럼을 위한 증가 값과 초기값을 반환한다.
IDENT_INSERT 옵션의 사용
- SET IDENTITY_INSERT table_name ON
- 시스템에 의해 값이 자동 생성되는 것을 중지하고 사용자가 직접 identity 컬럼에 값을 삽입할 수 있도록 한다.
- 시스템 관리자, 데이터베이스 소유자, 테이블 소유자에 의해서만 설정될 수 있다.
- 한사용자는 한번에 하나의 테이블에 대해서만 IDENTITY_INSERT 설정을 가질 수 있다.
- 하나의 테이블은 여러명의 IDENTITY_INSERT 설정을 가지는 사용자를 가질 수 있다.
- identity 값을 재사용하는 효과를 가진다.
-----------------------------------------
- Primary Key & Foreign Key 보기
-> 프로그램 종료후 다시 띄우기
* PRIMARY KEY : 테이블의 행을 유일하게 식별할 수 있는 유일 키 칼럼(들)을 지정
* FOREIGN KEY : 자신이나 다른 테이블의 Primary key를 참조하는 칼럼(들)을 지정
Primary key를 삭제할 경우에 착오가 발생할 수 있다.
왜냐 하면 Primary key는 다른 테이블에서 Foreign key로 참조될 수 있기 때문에
Primary key가 삭제됨으로서 데이터 무결성 문제가 발생하기 때문이다.
만약에 Primary key를 삭제할 때 데이터 무결성 문제를 고려하지 않으려면
SQL 문장 맨 뒤에 CASCADE를 추가로 적어주면 된다.
CASCADE를 명시하는 것은 데이터베이스에 치명적인 열향을 줄 수 있으므로
신중히 결정해야 한다.
따라서
*DELETE RULE 'CASCADE' 로 설정
*UPDATE RULE 'CASCADE' 로 설정 |
------------------------------------