본문 바로가기
컴퓨터/SQL

6_Oracle DDL 테이블 생성 시 제약 조건, 키의 종류와 이상현상(KEY, ANOMALY)

by 버니케이 2021. 8. 1.
반응형

 

 

6_Oracle DDL 테이블 생성 시 제약 조건, 키의 종류와 이상현상(KEY, ANOMALY)

 

 

데이터 언어의 구조에는 

데이터 정의어, 데이터 조작어, 데이터 제어어

가 있습니다.

 

 

 

그리고 테이블을 생성할 때는 create함수를 사용하면 됩니다.

여기서는 키의 종류와 정규화를 알아볼 것이기 때문에 함수는 나중에 살펴보겠습니다.

 

 

테이블을 만들 때 사용하는 식입니다.

분홍색으로 색칠된 부분이, 이 부분이 바로 키입니다.

PRIMARY KEYFOREIGN KEY, REFERENCES가 적혀있죠

 

 

 

1_제약 조건

기본키와 외래키, not null키, 유일키에 대해서 먼저 알아보겠습니다.

다른 제약조건들도 있는데, 나중에 다루도록 하겠습니다.

 

 

1-1_기본키 PRIMARY KEY

기본키는

김철수씨가 두명이 있는데

두명은 다른 사람입니다. 이를 구분하게 해주는 것이 기본키입니다.

이 기본키가 없다면 중복데이터처리가 될 위험이 있는데 이를 막아줍니다.

 

 

 

1-2_외래키 FOREIGN KEY

외래키는 다른 데이터테이블을 참조할 수 있는 키입니다.

소속부서와 부서테이블을 보면 01김철수가 홍보부, 김용욱이 인사부, 03김철수가 연구부인 것을 알 수 있습니다.

 

또한 같은 데이터테이블을 참조할 수도 있습니다.

김용욱의 관리를 01김철수가 하고, 03김철수의 관리를 김용욱이 하는 것을 알 수 있습니다.

 

 

1-3_NOT NULL

NULL할당받지않은, 아직 무엇인지 모르는 값입니다.

부서의 정보를 모른다고 해서 NULL값으로 놓으면, 부서를 불러올 수 없는 등의 문제가 생기기 때문에

꼭 입력을 해줘야 한다는 NOT NULL제약조건을 걸어야 합니다.

 

 

 

1-4_유일키 UNIQUE KEY

UNIQUE 제약조건은 유일한 값만 허용하는 키입니다.

 

예를 들어서, 사원번호와 부서번호는 유일한 값이여야 하죠

이렇게 사원번호가 똑같아버리면 철수씨와 용욱씨는 같은사람으로 인식되버리기 때문에 유일키에 위배가 됩니다.

여기 부서번호도 연구부와 홍보부가 같아버리면 같은 부서로 인식되어버리기 때문에 유일키 제약조건에 위배가 되는 것입니다.

 

 

 

2_ANOMALY 이상현상

이런 제약조건들을 지켜주지 않으면 이상현상이 발생하게 됩니다.

예시로 기본키 제약조건을 지키지 않았을 때 입니다.

일부러 색을 죽였습니다.

김철수씨가 두명인데, 기본키였던 사원번호가 안보이니 어떤사람이 김철수인지, 동일인물인데 정보가 변경된 것인지, 중복된 것인지 헷갈리게 됩니다.

이런 상황에서 다른 데이터를 추가하거나, 다른 테이블을 연결시켜버리면 이상현상이 발생하게 됩니다.

 

 

 

이상현상에는 삽입이상, 갱신이상, 삭제이상이 있습니다.

하나하나 예시를 들어 살펴보겠습니다.

 

 

 

2-1_삽입 이상(INSERTION ANOMALY)

이렇게 불필요한 데이터도 함께 삽입해야 하는 경우를 삽입 이상이라고 합니다.

신입생은 아직 수업을 듣지 않아서 수강번호를 갖고있지 않기 때문에 null값을 넣어야 하는데,

학번과 수강과목번호가 기본키이기 때문에 어쩔 수 없이 수강과목번호를 넣어야 하는 이상현상이 발생하게 됩니다.

 

 

 

2-2_갱신 이상(UPDATE ANOMALY)

04 과목에서는 주소가 수정이되었는데

02번 과목에서는 주소가 수정되지 않았습니다.

이렇게 일부만 수정되어 전체 데이터가 불일치하게 되는 것을 갱신이상이라고 합니다.

 

 

 

2-3_삭제 이상(DELETE ANOMALY)

수강취소기간에 영희가  02번 과목을 취소했습니다.

그래서 이 데이터를 지웠는데,

학생 이름과 나이와 주소까지 함께 삭제가 되어버렸습니다.

이렇게 원하지 않는 데이터까지 삭제되는 현상을 삭제이상이라고 합니다.

 

 

 

이 이상현상들은 정규화 라는 과정을 통해 방지할 수 있습니다.

정규화는 쉽게 말하면 테이블을 쪼개는 것입니다.

 

 

 

반응형

댓글