관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

SQL 1 - Session 102 : DDL 데이터 정의어 1 <이론 학습 1> 본문

자격증 공부/정보처리기사 실기

SQL 1 - Session 102 : DDL 데이터 정의어 1 <이론 학습 1>

huenuri 2024. 10. 8. 12:17

SQL 공부를 어느 정도 했으니 이제 정처기 실기도 공부할 수 있을 것 같다. 강의 분량이 상당히 많고 한 Chapter 단위로 묶어서 강의를 진행하는 것 같았다.

이제 본격적으로 공부를 시작해보자.


 

 

세션 102 - SQL : DDL

 

1. DDL(Data Define Language)

 

선생님이 바뀌었는데 필기를 너무 못하신다. 이전 선생님은 깔끔하게 정리를 잘 해주셨는데 말이다.

 

데이터베이스가 하나의 드라이브라고 보았을 때, 이 드라이브 안에는 A 스키마, B 스키마가 있을 수 있다. 스키마에는 테이블, 뷰 등이 있다. CREATE는 이러한 명령어를 정의할 때 사용한다. 이 테이블에는 번호, 이름, 주소 등이 저장되어 있다고 할 때 ALTER는 처음에 정의했던 형식 등을 변경할 때 사용한다.

DROP은 만들었던 내용을 삭제할 때 사용한다.


 

 

 

 

2. CREATE SCHEMA

 

스키마는 명령어만 잘 기억하면 된다. 스키마(Schema)는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 것으로 데이터 개체, 속성, 관계 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.

 

도메인이란 하나의 속성이 취할 수 있는 동일한 유형의 원자값들의 집합을 의미한다. 예를 들어 학년 속성의 데이터 타입이 정수형이고 해당 속성에서 취할 수 있는 값의 범위가 1~4까지라면, 1~4라는 범위는 해당 속성에 지정된 정수의 모든 범위가 아니라 일부분이다. 따라서 사용자는 1~4까지의 범위를 해당 속성의 도메인으로 정의해서 사용할 수 있다는 의미이다. 쉽게 말하면 도메인은 특정 속성에서 사용할 데이터의 범위를 사용자가 정의하는 사용자 정의 데이터 타입이다.

 

 

사용자 ID가 홍길동인 스키마 대학교를 이렇게 정의할 수 있다.


 

 

 

 

 

3. CREATE DOMAIN

 

대괄호로 묶인 것은 필수는 아니고 선택적으로 지정한다.

 

 

 

남, 여 두가지 중 아직 선택하지 않았을 때의 기본값을 '남'으로 지정했다.

 

이처럼 제약 조건을 명시해줄 수 있다. 제약조건의 이름은 'VALID-SEX'이고, 제약조건을 체크할 때 값은 남이나 여로 하겠다는 의미이다.

 

 

만약에 제약조건을 학년으로 할 경우에는 이처럼 작성하면 된다. 1학년에서 6학년까지 입력할 수 있도록 제약조건을 걸어주었다.


 

 

 

 

4. CREATE TABLE

 

테이블을 만드는 방법은 다음과 같다. 테이블을 만든 후 테이블 명을 적고 그 다음에 테이블 속성에 관한 모든 것을 적는다. 괄호의 시작부터 끝까지 적어나간다. NOT NULL은 이 필드는 절대로 비어있으면 안된다는 뜻이다. 

기본키는 비어있으면 안되고 유일해야 하므로 이를 지정하면 NOT NULL과 UNIQUE가 기본으로 저장된다. 기본키 대신에 대체키를 사용할 수 있다. 

만약에 학생 테이블에서 기본키가 학번이라면, 대체키는 주민 등록 번호가 될 수 있다. 외래키가 나오면 반드시 REFERENCES가 필수로 따라온다. 외래키가 어떤 테이블의 기본키와 연결되는지 지정해야 하기 때문이다.

 

 

 

 

예를 들어 두 개의 테이블이 있다고 하자. 하나는 두 개로, 다른 하나는 세 개의 필드로 구성되어 있다. 학생 테이블에서 기본키가 학번이 되지만, 학과와 학생 테이블을 연결시킬 때 전공을 학과 테이블의 학과 코드로 연결할 수 있다. 이때 학과 대 학생은 1 : N 관계가 된다.

 

학과 테이블에서의 학과 코드는 기본키가 되지만, 학생 테이블에서 전공은 외래키가 된다. 여기서 속성을 2가지 지정해줄 수 있다. ON DELETE는 삭제했을 때, ON UPDATE는 갱신했을 때이다. 예를 들어 학과 코드가 KOR이면 여기에 대응되는 전공도 KOR이 될 것이다. KOR을 KO로 변경하고 싶을 때 전공 필드는 어떻게 지정할지 옵션으로 지정한다.

제약 조건도 걸어주는데 만약 제약 조건명을 지정하지 않을 때는 CHECK를 써서 값에 대한 제약 조건을 정의할 수 있다.

 

 

 

 

 

외래키를 지정하면 참조 무결성의 CASCADE 법칙이 자동으로 적용된다. 예를 들어 두 개의 테이블이 있을 때 학생 테이블에서는 학번을, 학과 테이블에서는 학과코드를 기본키로 지정할 것이다. 만약 학과 코드 외에 학과명과 담당교수도 사용하고 싶을 때 두 개의 테이블을 연결시킨다.

그럴 때는 다른 테이블에 들어있는 학과 코드를 연결시켜 외래키로 지정한다. 관계는 1 : N이 되어 학과 테이블에는 여러 명의 학생이 등록할 수 있다. 학생 테이블을 사용하고 있기에 이것이 기본 테이블이 되고, 학과 테이블은 참조 테이블이 된다. 학과 코드에 ENG가 있을 때 학과 테이블의 ENG를 삭제 혹은 갱신하고 싶다면, 학생 테이블의 학과 코드를 삭제 혹은 변경할지 선택하는 것이다.

 

여기서 지정하는 옵션은 같고 지정하는 내용만 다르다. CASCADE는 하나를 삭제 또는 변경할 때 모두 삭제하거나 변경할지 지정한다. NO ACTION은 참조 테이블에 변화가 있어도 기본 테이블에는 아무런 조치를 하지 않는 것이다. SET NULL은 ENG를 삭제하거나 변경할 때 기본 테이블의 ENG를 NULL도 바꾸는 것을 말한다. SET DEFAULT는 학과 테이블의 ENG를 기본값으로 되돌리는 것이다.

 


 

 

 

문자 형태로 입력 받을 것이므로 형식과 길이를 지정해준다. VARCHAR는 가변이고, CHAR는 고정이다. VARCHAR(5)와 CHAR(5)의 기억 장소는 다르다. CHAR(5)에서 홍이라고 첫 글자만 써도 기억 장소가 모두 사용된다. CHAR는 고정 크기이기 몇 글자를 써도 같은 공간으로 지정된다. VARCHAR(5)는 5개의 공간이 있어도 데이터를 입력한만큼 확보된다.

 

 

 

성별은 도메인 SEX를 사용하고 생년월일은 날짜 형태이니 DATE라고 쓴다. 학번은 기본키로 지정하고 전공은 외래키로 지정하는데 이때 참조하는 테이블은 학과 테이블의 학과코드 속성이다. 학과 테이블에서 삭제가 일어나면 NULL로 하니 SET NULL로 지정하고, 변경되면 같은 값으로 변경하라고 하니 CASCADE라고 쓰면 된다.

그리고 제약 조건도 생년월일로 걸고 조건도 만들어준다.

이 내용은 시험 문제에도 많이 등장하므로 꼭 기억하자.

 


 

 

 

학습을 마치고

SQL과 프로그래밍 파트는 각 Chapter별로 동영상 강의가 되어 있다. 짧은 분량도 아니고 이 한 세션을 공부하는데 2시간 정도 걸린 것 같다. 이제 암기하고 문제를 푸는 것까지 하면 정말 많은 시간을 투자해야 할 것 같다.

시험이 12일밖에 남지 않았는데 이 책을 전부 마치고 기출문제까지 과연 풀 수 있을지 의문이 든다. 그래도 할 수 있는데까지 최선을 다해볼 것이다.

 

실기는 합격률이 20% 안팎이다. 한번에 합격하는 사람이 많지 않은데 합격만이 전부가 아니라 공부를 하기 위함이니 공부가 부족하면 내년에 또 시험을 보면 된다. 이런 마음으로 시험에 임하려고 한다.