Data 무결성은 잘못된 Data는 입력을 막고, 정확한 Data에 대해서만 입력을 허가하겠다는 것입니다. 예를 들어 고객정보에 고객번호는 고객으로 등록한 날짜와 해당날짜에 등록한 순서에 의해서 할당되는 일련번호의 조합입니다. 따라서 고객번호는 반드시 11자리의 숫자로만 구성이 되어야 하며, 앞의 8자리는 날짜형식과 같아야만 입력이 가능하도록 제한하는 것이 Data 무결성을 지키는 것입니다. 

즉 Data에 의미를 부여함으로써, 각 Data에 허용가능한 값을 제한하는 것을 말합니다.

Data 무결성은 어떤 범위를 지키는 지에 관련된 Data 무결성과 적용방법에 따른 Data 무결성 두 가지


1. 데이터 무결성의 종류

범위에 따른 Data 무결성은 다음의 표와 같이 3가지로 나누어 볼 수 있습니다.

 

무결성 유형(Types of Integrity)

제약형식(Constraint Type)

Domain Integrity 

Default

 

Check

 

Referential

Entity

Primary Key

 

Unique

Referential

Foreign Key

 

Check


  • Domain Integrity(청렴,고귀한) : Column()에 대한 제약
  • Entity Integrity : Row()에 대한 것
  • Referential Integrity : 다른 Table과의 관계에서 나타나는 제약

 

Domain Integrity(영역무결성)

Domain Integrity 또는 Column Integrity는

Data Type, Length, Format, Range, Meaning, Uniqueness, Null Support, Default Value 등에 대한 내용을 정의하였는데요. 이것들이 바로 Domain Integrity를 지키기 위한 제약이 되는 것

예를 들어 고객정보의 주민등록번호와 같은 경우에는 년도, 월, 일자에 대한 정보가 맨 앞의 6자리로 지정이 되어 있고, 7번째 자리는 성별에 따라서 값이 부여가 됩니다.

고객번호의 입력규칙 또한 마찬가지로 Domain Integrity라고 할 수 있습니다.

 

Entity Integrity(실체무결성)

Entity Integrity 또는 Table Integrity는 Table 내의 모든 Row는 Primary Key로 알려진 유일한 식별자를 가져야만 한다는 것을 의미합니다.  Data가 Table 내에 존재해서는 안되는 것을 제약하는 것을 Entity Integrity라고 합니다.

 

 

Referential Integrity(참조무결성)

 참조되는 Table의 Primary Key와 참조하는 Table의 Foreign Key들 사이의 관계가 계속 유지되는 것을 보증하는 것을 말합니다. 

 


 

 

1. Enforcing(시행) Data Integrity

 

선언적 Data 무결성

  • Table, View와 같은 개체에 대한 정의 시에 입력될 Data를 허용할 수 있는 범위를 정의
  • 일반적인 Data 무결성 처리를 위해서 사용
  • Table이나 Column에 직접적으로 선언적 제약을 사용
  • 선언적 Data 무결성은 Default, Constraints, Rule 등을 이용하여 구현

Constraints

  • Domain : DEFAULT, CHECK
  • Entity : Primary Key, Unique
  • Referential : Foreign Key

절차적 Data 무결성

  • 주로 업무규칙이나 예외사항을 처리하는데 많이 사용
  • Transact-SQL을 이용하여 Script형태로 정의
  • 다른 Programming 언어를 통해서 Client Server, 어느 쪽에서라도 구현

 

 

1.제약조건 정의

Constraint는 말 그대로 제약조건을 말하는 것입니다.

Column Constraint : 하나의 Column에 대한 제약조건을 적용할 때 사용

Table Constraints : 하나 이상의 Column에 대해서 제약조건을 적용하는 것

Column수준의 제약조건과 Table수준의 제약조건의 차이는 없습니다. 다만 기술하는 방법에 차이가 있을 따름입니다.

 

 

 

 

2. Default 제약조건

DEFAULT는 아무런 값도 입력하지 않았을 경우에, MSSQL Server에서 자동적으로 기존에 설정되어 있던 값을 입력하는 것

  • Default INSERT구문에만 적용
  • Column당 하나의 Default만 지정가능
  • Default 제약조건은 Identity 속성 또는 timestamp Data Type과 같이 사용될 수 없습니다.

 

Default의 사용

Enterprise Manager를 이용한 기본값(Default) 지정

 

3. CHECK 제약조건

  • 지정된 값만 입력이나 수정을 허가하도록 하는 제약조건
  • CHECK 제약조건은 INSERT문이나 UPDATE문 모두 사용가능
  • 같은 Table의 다른 Column을 참조가능
  • DEFAULT와 같이 IDENTITY Column이나 timestamp, uniqueidentifier Data Type에는 사용될 수 없습니다.

Enterprise Manager를 이용한 CHECK 제약조건 지정

 

 

 

4. Primary Key 제약조건

  • Table당 하나만 선언할 수 있다.
  • Primary Key의 값은 반드시 유일한 식별자로서의 역할을 해야만 한다.
  • Data INSERT, UPDATE 될 때 Data가 검사된다.
  • NULL 값이 허용되지 않는다.
  • Unique Index로 생성되어 진다.

Primary Key 지정 #1

Primary Key 지정 #2

 

5. UNIQUE 제약조건

  • Unique는 말 그대로 유일한 값
  • NULL의 입력을 허용한다.
  • Table에 여러 개의 Unique 제약조건을 지정할 수 있다.
  • Unique Index를 이용하여 사용되어 집니다.

6. Foreign Key 제약조건

  • 반드시 Primary Key Unique Constraint로 지정된 Column을 참조
  • Foreign Key는 하나 또는 그 이상의 Column에 지정 가능
  • 참조하는 Foreign Key Column 수와 참조되는 Primary Key Column수가 같아야 한다.
  • 참조하는 Foreign Key Data 길이와 참조되는 Primary Key Data 길이는 같아야 한다. 또한 호환되는 Data Type만이 참조할 수 있다.
  • Foreign Key에는 자동으로 Index를 생성시켜주지 않는다. 따라서 필요하다면 직접 Index를 생성하여야 한다.
  • Foreign Key에 의해서 참조가 설정되면, Primary Key는 변경될 수 없다.
  • 반드시 참조할 Primary Key가 존재하여야만 한다.
  • 같은 Table Column을 참조하는 경우에는 Foreign Key를 지정하지 않고 Reference 만으로도 참조가 가능합니다.

 

7. 기존 데이터에 대한 제약조건 중지

제약을 중지 또는 지연시키는 것은 CHECK Constraint FOREIGN KEY Constraint에서만 사용이 가능

- Syntax

ALTER TABLE Table_name 

[WITH CHECK|WITH NOCHECK] 

ADD CONSTRAINT constraint_name 

[FOREIGN KEY] [(column[,.n])] 

REFERENCES ref_table [(ref_col[,n])] 

[CHECK (search_conditions)]

 

8. 신규 데이터에 대한 제약조건 중지

Data를 입력할 때, 제약조건을 적용하고 싶지 않은 경우, NOCHECK Option을 이용하여 새로운 Data를 입력할 때, 제약조건을 검사하지 않게 할 수 있습니다.

-Syntax

ALTER TABLE table_name 

{CHECK|NOCHECK} CONSTRAINT 

{ALL|constraint[,n]}

 

9. Rule

Rule 역시 앞서 설명을 드린 것과 같이 Column에 입력될 값들에 대해서 유효한 값인지 아닌지를 판단하는 기능을 가지고 있습니다.

-Syntax

CREATE RULE rule_name 

AS constition_expressdion

sp_bindrule Syntax

sp_bindrule [@rulename=] 'rule',  

                  [@objname=] 'object_name' 

                  [, [@futureonly=]'futureonly_flag']

  • @rulename : Rule 개체의 명칭
  • @objname : Binding Column이나 사용자 정의 Data Type

실습: http://www.mssql.org/LectureSQL/

 

 


'RDBMS(mysql,mssql)' 카테고리의 다른 글

[MSSQL] 9.함수(Built-in Funtctions)  (0) 2018.08.01
[MSSQL] 8.데이터 검색(Query문)  (0) 2018.08.01
[MSSQL] 6.Table  (0) 2018.08.01
[MSSQL] 5.Database 구성요소  (0) 2018.07.30
[MSSQL] 4.T-SQL  (0) 2018.07.30

+ Recent posts