Spring을 활용하여 어느 정도 기능 구현을 할 수 있게 되었다. 이제 mysql을 사용하여 데이터베이스를 생성하고 데이터들을 확인 및 관리하는 연습을 할 것이다.
다음은 테이블을 생성하는 코드이다. not null은 말 그대로 데이터가 누락되는것 없이 차있어야 한다는 것이고 primary key는 not null과 unique의 특징을 모두 가진다는 뜻이다.
CREATE TABLE IF NOT EXISTS MAJOR
(
major_code varchar(100) primary key comment '주특기코드',
major_name varchar(100) not null comment '주특기명',
tutor_name varchar(100) not null comment '튜터'
);
보통 이런식으로 생성된 각각의 테이블들중엔 같은 필드를 가지는 경우도 있다. 아래에 STUDENT 테이블을 보면 앞서 생성한 MAJOR테이블과 major_code라는 필드를 공통으로 가지는 것을 알 수 있다.
CREATE TABLE IF NOT EXISTS STUDENT
(
student_code varchar(100) primary key comment '수강생코드',
name varchar(100) not null comment '이름',
birth varchar(8) null comment '생년월일',
gender varchar(1) not null comment '성별',
phone varchar(11) null comment '전화번호',
major_code varchar(100) not null comment '주특기코드',
foreign key(major_code) references major(major_code)
);
이렇게 공통된 필드를 가지는 테이블의 경우 Java에서 자주 사용되는 개념인 상속과 비슷하게 의존을 시킬 수 있다. 이를 FOREIGN KEY라고 부르며 다음과 같이 사용할 수 있다.
ALTER TABLE MAJOR ADD CONSTRAINT exam_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code);
이런식으로 특정 필드를 기준으로 묶어두면 원하는 데이터를 확인할 때 서로의 필드값을 한번에 볼 수 있어서 편리하다.
하지만 FOREIGN KEY로 묶여 있으면 연결된 필드의 데이터 값을 삭제할 수가 없다. 이는 아래 코드와 같이 FOREIGN KEY를 생성할 때 on delete cascade를 추가해주어서 해결 가능하다.
ALTER TABLE MAJOR ADD CONSTRAINT manager_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;
이렇게 연결된 데이터는 한 곳에서 삭제 시키면 연결된 모든 곳의 데이터가 삭제된다.
점점 처음 배우는 것들이 늘어나면서 들어오는 정보량이 눈덩이처럼 불어나고 있다. 이것들을 내 것으로 만들기 위해서 강의 한번 듣고 넘기는 것이 아니라, 정리하는 시간을 가져보며 어떤 부분이 부족했는지 자가점검하고 그 부분을 중점적으로 복습하는 습관을 들여야 겠다.