2016. 9. 30. 00:17ㆍ자격증 공부/정보처리기사
1. DB 개념
1) DB 데이터 종류 4가지 - SOSI
Stored
Operational
Shared
Integrated
2) DB 특징 4가지 - 3C + R
Content Reference(값에 의한 참조)
Concurrent sharing(동시 공유)
Continuous Evolution(계속 진화)
RealTime Accessibility(실시간 접근)
3) DB 사용자 3종류
ㄱ. Data Architect(건축사): Data 영역 분류, Data 모델 생성
ㄴ. Data Administrator(관리자): Data 관리 총괄, 계획 수립
ㄷ. DB Administrator: 개념/물리 스키마 설계, Data 장애 복구
2. DBMS(DB 관리 시스템)
1) 이점: Data 중복성, 종속성 해결
2) 기능 3가지(DMC)
Define
Manipulate
Control => 4가지(보병무회: 보안, 병행 제어, 무결성, 회복)
*병행 제어 필요성 3가지
Lost Update: 동시 갱신시 하나가 Lost
Inconsistency(불일치): 동시 수정시 데이터 불일치
Cascading Rollback(연쇄 Rollback)
3. 스키마
1) 개념: EAR + C에 대한 명세
2) 구성 3가지(순서 중요)
|사용자|
외부
개념
내부
*데이터 사전의 다른 두 이름
-시스템 카탈로그
-메타 데이터(Data about Data)
-----------------------------------------------------------------
1. 관계형 데이터 모델
<릴레이션> => 스키마(구조) + 인스턴스(튜플) <-> 도메인(속성이 취할 수 있는 원자값 집합)
|
|
|
|
|
*Mapping Rule: 개념적 데이터 모델 => 논리적 데이터 모델(or 스키마)
**식별 VS 비식별
1) 식별의 경우(FK인 동시에 PK: 외교관인 동시에 왕)
<회원>
회원No |
ID PW Name |
<프로필>
회원No(FK) |
키 몸무게 |
2) 비식별의 경우(FK는 FK만)
<회원>
회원No |
ID PW Name |
<프로필>
이름 |
키 몸무게 회원No(FK) |
3. 무결성(=데이터의 정확성)
1) 종류
ㄱ. NULL
ㅂ. 개체: PK 속성은 NOT NULL
ㄴ. UNIQUE: "ID는 원자값이어야"
ㄷ. Domain: "ID가 10자 넘지 말아야"
ㄹ. Key: "적어도 하나의 키는 있어야"
ㅁ. 참조: FK는 NULL이거나 참조 R의 PK와 같아야
<관계대수>
1. 관계 연산자
[예제1]
<기본 테이블: 능력치>
이름 |
무력 |
지력 |
제갈량 |
32 |
99 |
관우 |
93 |
81 |
장비 |
96 |
42 |
<주소>
이름 |
주소 |
제갈량 |
신야 |
관우 |
양양 |
장비 |
형주 |
<SELECT: 지력 80 이상> 관우: "머리 좋은 놈만 PARTY에 와"
σ 지력>80(능력치)
SELECT 이름, 무력, 지력 FROM 능력치 WHERE 지력>80;
이름 |
무력 |
지력 |
제갈량 |
32 |
99 |
관우 |
93 |
81 |
<PROJECT: 이름, 무력 속성만 추출> 장비: "무슨 소리 남자는 힘이 중요하지"
π 이름, 무력(능력치)
SELECT 이름, 무력 FROM 능력치;
이름 |
무력 |
제갈량 |
32 |
관우 |
93 |
장비 |
96 |
<JOIN: 다 합침> 제갈량: PARTY 장소도 중요하죠. 그것도 보도록 하죠.
*JOIN: CARTESIAN PRODUCT한 후 SELECT한 것
능력치▷◁ 이름=이름 주소
*자연조인: 능력치 ▷◁ 주소
JOIN |
NATURAL JOIN(중복된 속성 제거) |
JOIN ... USING |
SELECT 능력치.이름, 무력, 지력, 주소 FROM 능력치, 주소 WHERE 능력치.이름 = 주소.이름; |
SELECT 능력치.이름, 무력, 지력, 주소 FROM 능력치 NATURAL JOIN 주소 |
SELECT 능력치.이름, 무력, 지력, 주소 FROM 능력치 JOIN 주소 USING(이름) |
*OUTER JOIN: JOIN 조건 맞지 않는 튜플도 출력(<->INNER JOIN)
능력치.이름 |
무력 |
지력 |
주소.이름 |
주소 |
제갈량 |
32 |
99 |
제갈량 |
신야 |
관우 |
93 |
81 |
관우 |
양양 |
장비 |
96 |
42 |
장비 |
형주 |
[예제2]
<주문자>
번호 |
이름 |
사는 술 |
1 |
관우 |
소주 |
1 |
관우 |
맥주 |
2 |
장비 |
소주 |
2 |
장비 |
맥주 |
2 |
장비 |
양주 |
4 |
제갈량 |
소주 |
<판매1>
파는 술 |
소주 |
맥주 |
<판매2>
이름 |
파는 술 |
장비 |
소주 |
장비 |
맥주 |
<DIVISION: 공통된 것 없앰>
<DIVISION: 소주, 맥주 주문하신 분!!!>
주문자[사는술÷파는술]판매1
번호 |
이름 |
1 |
관우 |
2 |
장비 |
<DIVISION: 소주, 맥주 주문한 장비의 (진동벨) 번호>
주문자[이름,사는술 ÷ 이름, 파는 술]판매2
번호 |
2 |
*연습 문제
1) 주문자 이름 중복되지 않게 검색
SELECT DISTINCT 이름 FROM 주문자
<결과>
이름 |
관우 |
장비 |
제갈량 |
2) 사는 술이 양주인 사람 검색
SELECT 이름 FROM 주문자 WHERE 사는술 IN('양주');
<결과>
이름 |
제갈량 |
3) 이름이 관으로 시작하는 사람 검색
SELECT 이름 FROM 주문자 WHERE 이름 LIKE'관%';
<결과>
이름 |
관우 |
*주소가 NULL인 튜플 검색 => WHERE 주소 IS NULL;
4) 이름을 기준으로 내림차순으로 '정렬'
SELECT 이름 FROM 주문자 ORDER BY 이름 DESC;
<결과>
이름 |
제갈량 |
장비 |
장비 |
장비 |
관우 |
관우 |
5) 사는 술 별로 주문한 사람 수 구하기(단 0 이상인 것만)
SELECT 사는술, COUNT(*) AS 주문자수
FROM 주문자
GROUP BY 사는술
HAVING COUNT(*)>0;
<결과>
사는술 |
주문자수 |
소주 |
3 |
맥주 |
2 |
양주 |
1 |
6) 주소가 '신야'인 사원에 대해 이름과 지력을 검색
SELECT 이름, 지력
FROM 능력치
WHERE 이름 IN(SELECT 이름 FROM 주소 WHERE 주소='신야');
이름 |
주소 |
제갈량 |
신야 |
[예제3]
<날짐승>
번호 |
이름 |
1 |
독수리 |
2 |
박쥐 |
<들짐승>
번호 | 이름 |
2 | 박쥐 |
3 | 사자 |
<합집합:모든 짐승들 명단>
π 이름(날짐승) U π 이름(들짐승)
SELECT 이름 FROM 날짐승 UNION SELECT 이름 FROM 들짐승;
이름 |
독수리 |
박쥐 |
사자 |
<CARTESIAN PRODUCT: 커플링 경우의 수>
π 이름(날짐승) X π 이름(들짐승)
날짐승.이름 |
들짐승.이름 |
독수리 |
박쥐 |
독수리 |
사자 |
박쥐 |
박쥐 |
박쥐 |
사자 |
'자격증 공부 > 정보처리기사' 카테고리의 다른 글
신기술 동향 (0) | 2016.09.30 |
---|---|
실기 SQL, 정규화 등 정리 (0) | 2016.09.30 |
실기 알고리즘 풀이법 정리 (0) | 2016.09.29 |
실기 DB 오답노트 (0) | 2016.09.26 |
16년 3회차 정보처리기사 필기 합격! (0) | 2016.08.21 |