오늘의 요약
[ PART 5 - PL-SQL ]
1. Procedure : "작업처리순서"
(1) 설명
일련의 "작업처리순서"를 정의해 놓은 것으로 미리 DBMS에 컴파일되어져있어,
'프로그램 or 사용자로부터 호출'되면 실행되는 알고리즘
(2) 예
pro.sql
2. Trigger : "DML방아쇠"
(1) 설명
일련의 "작업처리순서"를 정의해 놓은 것으로 미리 DBMS에 컴파일되어져있어,
어떤 조건이 만족되어지는 상황('DML수행')이 발생되면, '자동'호출되는 알고리즘
(2) 예
tri.sql
[ PART 6 - Modeling ]
1. DB 모델링이란 ?
현실세계의 업무프로세스를 분석해서 '실체(entity)'를 도출하고,
소프트웨어로 구현해내기 위한 '데이터' 구조의 뼈대를 작성하는 업무
2. 관계( relation )
(1) 관계에 대한 이해
1) 예 - 고객 table
이름 아이디 핸드폰 주소 차넘버 차종 차명 년식
홍길동 aa 1234 서울 a1234 승용차 소나타 1995
임꺽정 bb 2345 부산 NULL NULL NULL NULL
이승엽 cc 3456 대전 NULL NULL NULL NULL
한예슬 dd 4567 대구 d1234 승합차 갤로퍼 2001
장동건 ee 5678 대구 NULL NULL NULL NULL
한예슬 ff 6789 광주 f1234 미니벤 카렌스 1998
2) 예 - 고객 table 보기 변경
이름 아이디 핸드폰 주소 차넘버 차종 차명 년식
임꺽정 bb 2345 부산 NULL NULL NULL NULL
이승엽 cc 3456 대전 NULL NULL NULL NULL
장동건 ee 5678 대구 NULL NULL NULL NULL
한예슬 dd 4567 대구 d1234 승합차 갤로퍼 2001
홍길동 aa 1234 서울 a1234 승용차 소나타 1995
한예슬 ff 6789 광주 f1234 미니벤 카렌스 1998
3) 분리
<1> 레코드(ROW)를 기준
1> 테이블1(자동차를 소유하지 않은 고객)
이름 아이디 핸드폰 주소
임꺽정 bb 2345 부산
이승엽 cc 3456 대전
장동건 ee 5678 대구
2> 테이블2(자동차를 소유한 고객)
이름 아이디 핸드폰 주소 차넘버 차종 차명 년식
한예슬 dd 4567 대구 d1234 승합차 갤로퍼 2001
홍길동 aa 1234 서울 a1234 승용차 소나타 1995
한예슬 ff 6789 광주 f1234 미니벤 카렌스 1998
<2> 컬럼(COLUMN)을 기준
1> 테이블1(개인신상)
이름 아이디 핸드폰 주소
임꺽정 bb 2345 부산
이승엽 cc 3456 대전
장동건 ee 5678 대구
한예슬 dd 4567 대구
홍길동 aa 1234 서울
한예슬 ff 6789 광주
2> 테이블2(자동차)
차넘버 차종 차명 년식
d1234 승합차 갤로퍼 2001
a1234 승용차 소나타 1995
f1234 미니벤 카렌스 1998
4) 관계 (능동적으로 표현)
<1> 부모 / 자식 테이블의 결정
1> 부서(dept)는 사원(emp)을 소유한다. (능동형)
-> 부모('부서' 테이블), 자식('사원' 테이블)
-> '사원'이 정의되기위해서는, '부서'가 먼저 정의되어야 한다.
2> 개인은 자동차를 소유한다. (능동형)
-> 부모('개인신상' 테이블) , 자식('자동차' 테이블)
-> '자동차'가 정의되기위해서는, '개인신상'이 먼저 정의되어야 한다.
<2> 공통컬럼의 요구 ( 2개의 테이블의 관계 형성 )
1> '개인신상' 테이블의 아이디(PK)
2> '자동차' 테이블의 아이디(FK)
<3> 공통 컬럼이 삽입된 테이블의 정의 1 - (옳음)
1> 테이블1(개인신상) - 부모
이름 아이디(PK) 핸드폰 주소
임꺽정 bb 2345 부산
이승엽 cc 3456 대전
장동건 ee 5678 대구
한예슬 dd 4567 대구
홍길동 aa 1234 서울
한예슬 ff 6789 광주
2> 테이블2(자동차) - 자식
차넘버(PK) 차종 차명 년식 아이디(FK)
d1234 승합차 갤로퍼 2001 dd
a1234 승용차 소나타 1995 aa
f1234 미니벤 카렌스 1998 ff
Q1> 이름이 '홍길동'인 자동차의 차넘버를 SELECT 하라
SUB> select ID from MEMBER where NAME='홍길동';
SQL> select m.NAME, c.NUM from MEMBER m, CAR c
where c.ID=(select ID from MEMBER where NAME='홍길동');
<4> 공통 컬럼이 삽입된 테이블의 정의 2 - (잘못됨)
1> 테이블2(자동차) - 부모
차넘버(PK) 차종 차명 년식
d1234 승합차 갤로퍼 2001
a1234 승용차 소나타 1995
f1234 미니벤 카렌스 1998
2> 테이블1(개인신상) - 자식
이름 아이디(PK) 핸드폰 주소 차넘버(FK)
임꺽정 bb 2345 부산 NULL
이승엽 cc 3456 대전 NULL
장동건 ee 5678 대구 NULL
한예슬 dd 4567 대구 d1234
홍길동 aa 1234 서울 a1234
한예슬 ff 6789 광주 f1234
(2) 관계의 종류
1) Cardinality 관점
<1> 일대일( 1 : 1 ) : 모델링 가능
ex) 부서 / 부서장
<2> 일대다( 1 : N ) : 모델링 가능
ex) 부서 / 사원
<3> 다대다( N : N ) : 모델링 불가능
ex) 고객 / 상품
-> N:N는 1:N으로 변경(중간테이블)해서 모델링해야 함
ex1) 고객 / 상품
1> 테이블1(고객) - 부모
이름 아이디(PK) 핸드폰
홍길동 hong 011-123-1234
이순신 lee 019-456-4567
2> 테이블2(상품) - 부모
상품ID(PK) 이름 회사번호 가격
P0001 새우깡 농심 1200
P0002 맛동산 해태 700
3> 테이블3(구매) - 자식
구매번호(PK) 고객아이디(FK) 상품이름(FK) 구매일자
001 hong P0001 2008/04
002 hong P0002 2007/10
003 lee P0001 2006/12
ex2) 공장 / 제품
ex3) 학생 / 동아리
ex4) 학생 / 과목
2) Relationship Type 관점
<1> 식별관계 ( Identifying )
1> 정의: 부모의 PK컬럼이 자식의 'PK컬럼'으로 전이 되는 것
2> 무조건 No nulls
ex) alter table EMP2 drop constraint PK_EMP2;
alter table EMP2 add constraint PK_EMP22 primary key(EMPNO, DEPTNO);
<2> 비식별관계 ( Non-Identifying )
1> 정의: 부모의 PK컬럼이 자식의 '일반컬럼'이 전이 되는 것
2> 2개중 택일
- Null Allowed
- No nulls
ex) insert into EMP2(EMPNO, DEPTNO) values(8000, 30);
insert into EMP2(EMPNO, DEPTNO) values(8000, 40);
cf) 모델링툴 다운로드 URL
http:
알게된 개념
- ㄴ자 테이블은 설계가 잘못됐다는 증거다. ㄴ자테이블로 나오거나, 데이터의 중복이 발생해버린다고 하면 테이블의 분리를 생각해야 한다.
- 중복도가
낮으면
카디널리티가 높다
고 표현한다. 중복도가 높으면
카디널리티가 낮다
고 표현한다. 즉, 카디널리티는 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표
이다.