You are using an outdated browser. Please upgrade your browser to improve your experience.

11/2 37-b -> 37-c 바꾸는 과정

- SQL 구분 분석(Parsing)

- 문법의 유효성 검사(Syntax Check)

- 문법의 규칙을 준수하는지 검사한다.

- 예) select * form pms_board

- form 은 잘못된 SQL 문법이다.

- SQL 문의 의미 검사(Semantic Check)

- SQL 문에서 지정하는 컬럼이나 테이블, 뷰 등이 유효한지 검사한다.

- 예) select * from pms_okok

- pms_okok 테이블이 없다면, semantic 오류 이다.

- SQL 공유 풀 검사(Shared Pool Check)

- 공유 풀 은 SQL 문에 대해 생성된 *실행 계획(execution plan)* 등을 보관한다.

- 먼저 SQL 문에 대해 해시(hash) 연산을 수행하여 SQL ID를 생성한다.

- 공유 풀 에 저장된 값 중에서 SQL ID와 일치하는 값이 있는지 조사한다.

- 만약 있다면, 즉시 해당 값을 꺼내 *실행 계획* 에 따라 SQL 문을 실행한다.

- 없다면, *하드 파싱(hard parsing)* 이라는 과정을 수행한다.

- 하드 파싱

- SQL 최적화(Optimization)

- SQL 문을 가장 효율적으로 실행할 수 있게 재구성한다.

- 각 문장 별로 *실행 계획(execution plan)* 이라는 명령 코드를 생성한다.

- 여러 개의 실행 계획 을 검토한 후 실행 비용을 계산하여 최적의 실행 계획을 생성한다.

- SQL 컴파일(Row Source Generation)

- 최적화 단계에서 생성된 실행 계획 을 입력으로 받는다.

- 각 실행 단계 별로 결과 데이터(result set) 를 리턴할 바이너리 명령을 생성한다.

- 이 바이너리 명령을 *Row Source* 라고 부른다.

- Row Source 는 테이블이나 뷰, 조인 또는 그룹 연산을 가리킨다.

- *Row Source Generator* 는 실행 순서에 따라 Row Source Tree 를 생성한다.

- SQL 실행

- SQL 엔진은 Row Source Tree 에 따라가면서 Row Source 바이너리 명령을 실행한다.

- 각 Row Source 바이너리 명령은 테이블이나 뷰, 조인 또는 그룹 연산 결과를 생성한다.

- 최종 실행 결과는 애플리케이션에게 리턴할 *결과 데이터(Result Set)* 이다.


create table pms_project(

no int not null,

title varchar(255) not null,

content text not null,

sdt date not null,

edt date not null,

owner int not null, /* pms_member테이블의 no PK컬럼 값을 저장해야 한다.*/

members varchar(255) not null

);

FK설정하는 sql

alter table pms_project

add constraint pms_project_fk foreign key(owner) references pms_member(no);

create table pms_member_project(
member_no int not null,
project_no int not null
);

/*다대다 관계를 저장할 컬럼에 대해 FK를 설정한다.*/
alter table pms_member_project 
 add constraint pms_member_project_fk1 foreign key(member_no) references pms_member(no),
 add constraint pms_member_project_fk2 foreign key(project_no) references pms_project(no);
 
 /*프로젝트 멤버 정보가 중복 저장되지 않도록 PK로 설정한다.*/
 alter table pms_member_project
 add constraint pms_member_project_pk primary key(member_no, project_no);

alter table pms_task

add constraint pms_task_fk foreign key(owner) references pms_member(no);

UML실전에선 이것만 쓴다.(책)

FK와 PK를 join해야하는데 일치하지 않는다면 설계를 잘못한거임.

members.append(memberRs.getString(“name”));

m.name하면 안됀다! 컬럼명으로 꺼내야한다!