공장통운
상암 DMC
정조제
데이터 사전(Data Dictionary)에 저장
외부스키마1 외부스키마2 ...
| <-- 논리적 독립성
개념스키마
| <-- 물리적 독립성
내부스키마
(1) 기능
(2) 종류
개논물
(1) 개념
현실세계의 요소를 인간과 컴퓨터가 이해할 수 있는 정보로 표현한 것
(2) 종류
(3) 구분
(4) 구조
(5) 데이터모델 표시해야할 요소
구연제
데이터베이스에 대한 요구사항을 그래픽적으로 표현하는 방법
(1) E-R 다이어그램 기호
기호 (생략) | 기호 이름 | 설명 |
---|---|---|
사각형 | 개체 (Entity) | |
마름모 | 관계 (Relationship) | |
타원 | 속성 (Attribute) | |
밑줄 타원 | 기본키 속성 | |
이중 타원 | 복합 속성, 다중값 | |
선 링크 | 개체와 속성 연결 |
(2) 개체 간 대응 관계 표현
(3) 세발 표기법
종류 (기호생략) | 설명 |
---|---|
1:1 관계 | |
1:N 관계 | |
N:M 관계 | |
관계가 있을 수도 없을 수도 있음 |
정완준최일활 : 정완이가 준 강아지가 제일 활발해!
(1) 목적
(2) 장/단점
장점
단점
데이터 중복으로 인해 예상하지 못한 곤란한 현상이 발생하는 것
삽삭갱
X → Y : X를 알면 Y를 알 수 있다.
도부이결다조
비정규 릴레이션
| 도메인이 원자값
1NF
| 부분 함수적 종속 제거
3NF
| 결정자이면서 후보키가 아닌 것 제거
BCNF
| 다치 종속 제거
4NF
| 조인 종속 이용
5NF
시스템의 성능향상을 위해 정규화에 위배되는 중복을 허용하는 기법
장애발생 시 데이터베이스를 보호하기 위한 방법
동일한 데이터베이스를 중복시켜 동시에 갱신하여 관리하는 방법
(1) 목적
고가용성을 위해서!
(2) 분류
(3) 종류
Hot Standby
: 장비가 가동되었을 때 즉시 사용가능Warm Standby
: 장비가 가동되었을 때 설정에 대한 준비가 필요함Cold Standby
: 장비를 평소에는 정지시켜두며 필요에 따라서 직접 켜서 구성을 함(1) 백업방식
(2) 복구 시간 목표/복구 시점 목표
데이터베이스를 여러 부분으로 분할하는 것
(1) 샤딩 (Sharding)
하나의 거대한 데이터베이스나 네트워크 시스템을 여러 개의 작은 조각으로 나누어 분산 저장하여 관리하는 것
(2) 장점
(3) 분할 기준
```sql
CREATE TABLE TB_USER(
id INT,
year INT
)
PARTITION BY RANGE (year) (
PARTITIONU1 VALUES LESSTHAN (2000)
);
```
```sql
CREATE TABLE TB_USER(
id INT,
year INT
)
PARTITION BY LIST (year) (
PARTITIONU1 VALUES LESSTHAN (2000)
);
```
추가적인 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
(1) 종류
실제로 데이터를 저장하지 않고 논리적으로만 존재하는 가상 테이블
데이터의 논리적 독립성을 제공 (외부스키마가 뷰와 연관있음)
데이터베이스에 저장되어 있는 모든 데이터 개체들에 대한 정보가 수록되어 있는 시스템
(1) 내용
(2) 특징
아차
절차적 : 원하는 데이터를 찾기 위한 처리과정을 명시
(1) 순수 관계 연산자
σ<조건>(테이블)
σ 성적=90 (학생)
π <리스트>(테이블)
π 학번,이름,성적 (σ 성적=90 (학생))
R⋈<조건>S
(학생)⋈학번=학번(수강과목)
(2) 일반 집합 연산자
(중복허용X)
비절차적 : 원하는 정보가 무엇이라는 것만 정의
데이터의 정확성, 일관성, 유효성이 유지되는 것
(1) 종류
제한 (Restrict)
: 문제가 되는 연산을 거절연쇄 (Cascade)
: 부모 튜플 삭제하면 자식 튜플도 함께 삭제널값 (Nullify)
: 부모 튜플 삭제하면 자식 릴레이션에서 참조하는 튜플들의 외래키에 NULL 등록기본값 (Default)
: Null을 넣는 대신에 디폴트 값을 등록Create, Read, Update, Delete를 묶어서 표현한 말
사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 역할을 수행
(1) SQL 처리 흐름 중 옵티마이저 단계
(2) 구분
SQL을 최적화하여 빠른 시간 내에 원하는 결과값을 얻기 위한 작업
(1) 구성요소
(2) 분산 데이터베이스의 적용 기법 中
같은구조
: 각각 존재하는 요약정보를 마스터에 통합하여 다시 전체에 대해서 요약정보를 산출다른구조
: 각각 존재하는 다른 내용의 정보를 마스터에 통합하여 다시 전체에 대해서 요약정보를 산출(3) 투명성 조건
어디에 뭐가 저장되어있는지 난 몰라도 된다~
(4) CAP 이론
어떤 분산 환경에서도 C, A, P 세 가지 속성 중 2가지만 가질 수 있다는 것
데이터베이스의 상태를 변환시키는 하나의 논리적인 기능을 수행하는 작업 단위
(1) 특성
ACID
(2) 상태
데이터를 담는 그릇을 정의하는 언어
제약조건
-- 생성 문법
CREATE TABLE 테이블명 (컬럼명 데이터타입 [제약조건], ...);
-- 상세문법
CREATE TABLE 테이블명
(
컬럼명 데이터타입 PRIMARY KEY,
컬럼명 데이터타입 FOREIGN KEY REFERENCES 참조테이블(기본키),
컬럼명 데이터타입 UNIQUE,
컬럼명 데이터타입 NOT NULL,
컬럼명 데이터타입 CHECK(조건식),
컬럼명 데이터타입 DEFAULT 값
);
-- 예시
CREATE TABLE 사원
(
사번 VARCHAR(10) PRIMARY KEY,
업무 VARCHAR(20) FOREIGN KEY REFERENCES 부서(부서코드),
이름 VARCHAR(10) UNIQUE,
생년월일 CHAR(8) NOT NULL,
성별 CHAR(1) CHECK (성별 = 'M' OR 성별 = 'F'),
입사일 DATE DEFAULT SYSDATE
);
-- 추가 문법
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [제약조건];
ALTER TABLE 사원 ADD 전화번호 VARCHAR(11) UNIQUE;
-- 수정 문법
ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입 [제약조건];
ALTER TABLE 사원 MODIFY 이름 VARCHAR(30) NOT NULL;
-- 삭제 문법
ALTER TABLE 테이블명 DROP 컬럼명;
명령어 옵션
-- 삭제 문법
DROP TABLE 테이블명 [CASCADE | RESTRICT];
DROP TABLE 사원;
VIEW는 ALTER(수정)이 없다!
-- 생성 문법
CREATE VIEW 뷰이름 **AS**
조회쿼리;
-- 예시
CREATE VIEW 사원뷰 **AS**
SELECT 사번, 이름
FROM 사원
WHERE 성별 = 'M';
-- 주의) VIEW 테이블의 SELECT 문에는 UNION이나 ORDER BY 절을 사용할 수 없다.
-- 뷰를 교체하는 명령
CREATE OR REPLACE VIEW 뷰이름 AS
조회쿼리;
-- 삭제 문법
DROP VIEW 뷰이름;
-- 생성 문법
CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
-- 예시
CREATE INDEX 사번인덱스 ON 사원(사번);
-- 수정 문법
ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
-- 예시
ALTER INDEX 사번인덱스 ON 사원(사번);
-- 삭제 문법
DROP INDEX 인덱스명;
데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회(CRUD)하는 언어이다.
-- 기본 문법
SELECT [ALL | DISTINCT] 속성명1, 속성명2...
FROM 테이블명1, ...
[WHERE 조건]
[GROUP BY 속성명1, ...]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC | DESC] ]
SELECT 과목 FROM 성적;
SELECT DISTINCT 과목 FROM 성적;
SELECT 과목 FROM 성적 WHERE 학점 = 'A';
-- 성적 테이블에서 과목 중에 중복된 값을 제거한 튜플의 갯수를 출력
SELECT COUNT(DISTINCT 과목) FROM 성적;
-- 성적 테이블에서 과목 튜플의 갯수를 출력
SELECT COUNT(과목) FROM 성적;
SELECT 학번, COUNT(과목), SUM(총점) FROM 성적;
-- 성적 테이블에서 과목, 학점 두 칼럼이 모두 같은 값이면 제거
SELECT 과목, 학점 FROM 성적;
= : 값이 같은 경우 조회
<>, != 값이 다른 경우 조회
<, <=, >, >= 비교 연산에 해당하는 데이터 조회
WHERE 학점 = 'A';
WHERE 학점 != 'A';
BETWEEN AND
-- 값1보다 크거나 같고, 값2보다 작거나 같은 데이터를 조회
WHERE 칼럼 BETWEEN 값1 AND 값2;
WHERE 학점 BETWEEN 'A' AND 'B';
WHERE PRICE BETWEEN 1000 AND 2000;
IN
NOT IN
-- 학점이 A또는 B또는 C인 튜플을 조회
WHERE 컬럼 IN (값1, 값2, ...);
WHERE 학점 IN ('A', 'B', 'C');
-- 가격이 1000 또는 2000이 아닌 튜플을 조회
WHERE 컬럼 NOT IN (값1, 값2, ...);
WHERE 가격 NOT IN (1000, 2000);
% : 0개 이상의 문자열과 일치
: 1개의 문자와 일치
[^] : 1개의 문자와 불일치
_ : 특정 위치의 1개의 문자와 일치
-- %는 글자수가 정해져 있지 않음
WHERE 이름 LIKE '마%'; -- '이'로 시작하는 사람 검색
WHERE 이름 LIKE '%크'; -- '크'로 끝나는 사람 검색
WHERE 이름 LIKE '%이%'; -- '이'가 들어가는 사람 검색
-- 대괄호 안의 글자를 한개씩 끊어서 보고 '또는'의 의미로 생각함
WHERE 이름 LIKE '[이마]%'; -- 첫번째 문자가 '이' 또는 '마' 인 문자열과 일치하는 문자열 검색
-- 언더바는 글자 수 정해져있음
WHERE 이름 LIKE '이_'; -- '이'로 시작되고 '이' 뒤에 1글자만 있는 사람 검색
WHERE 이름 LIKE '이__'; -- '이'로 시작되고 '이' 뒤어 2글자만 있는 사람 검색
WHERE 이름 LIKE '이_크'; -- '이*크'이라는 사람 검색
IS NULL : 컬럼이 NULL인 데이터 조회
IS NOT NULL : 칼럼이 NULL이 아닌 데이터 조회
-- 가격이 NULL인 튜플 조회
WHERE PRICE IS NULL;
-- 가격이 NULL이 아닌 튜플 조회
WHERE PRICE IS NOT NULL;
AND
OR
NOT, !
SELECT 이름 FROM 고객
WHERE 나이 BETWEEN 50 AND 59
OR 성별 = '남';
속성값을 그룹으로 분류하고자 할 때 사용
-- 직책을 기준으로 그룹을 묶었을 때,
SELECT 직책, COUNT(직책), SUM(급여)
FROM 급여
GROUP BY 직책;
-- 직책과 부서 기준으로 그룹을 묶었을 때,
SELECT 직책, 부서, SUM(급여) AS 급여합계
FROM 급여
GROUP BY 직책, 부서;
GROUP BY에 의해 분류한 후 그룹에 대한 조건을 지정할 때 사용
SELECT 직책, 부서, SUM(급여) AS 급여합계
FROM 급여
GROUP BY 직책, 부서
HAVING 급여합계 >= 5000;
-- 이름에 대해 오름차순으로 정렬, 문자열은 가나다순으로 정렬
SELECT *
FROM 성적
ORDER BY 이름;
-- 먼저 선언된 속성으로 정렬 후, 같은 값일 때 다음 속성으로 정렬
SELECT *
FROM 성적
ORDER BY 과목, 이름;
-- 학점은 내림차순으로 정렬한 후 값은 값일 때 이름을 오름차순으로 정렬
SELECT *
FROM 성적
ORDER BY 학점 DESC, 이름 ASC;
두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법
[도서]
[도서가격]
책번호 | 책명 |
---|---|
111 | 운영체제 |
222 | 자료구조 |
555 | 컴퓨터구조 |
책번호 | 가격 |
---|---|
111 | 20,000 |
222 | 25,000 |
555 | 10,000 |
444 | 15,000 |
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2, ...
FROM 테이블1 A **[INNER] JOIN** 테이블2 B
ON 조인조건
[WHERE 검색조건];
-- '도서' 테이블은 A라는 별칭으로,
-- '도서가격' 테이블은 B라는 명칭으로 설정 후 책번호가 같은 것끼리 조인
SELECT A.책번호, A.책명, B.가격
FROM 도서 A JOIN 도서가격 B
ON A.책번호 = B.책번호;
```sql
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2, ...
FROM 테이블1 A **LEFT [OUTER] JOIN** 테이블2 B
ON 조인조건
[WHERE 검색조건];
-- '도서' 테이블은 A라는 별칭으로, '도서가격' 테이블은 B라는 명칭으로 설정 후
-- 왼쪽에 위치한 '도서' 테이블 기준으로 왼쪽 외부 조인
SELECT A.책번호, A.책명, B.책번호, B.가격
FROM 도서 A LEFT JOIN 도서가격 B
ON A.책번호 = B.책번호;
```
```sql
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2, ...
FROM 테이블1 A **RIGHT [OUTER] JOIN** 테이블2 B
ON 조인조건
[WHERE 검색조건];
```
```sql
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2, ...
FROM 테이블1 A **FULL [OUTER] JOIN** 테이블2 B
ON 조인조건
[WHERE 검색조건];
```
경우의 수 모두 가져온다. (왼쪽 데이터 n개 X 오른쪽 데이터 m개 = nm개)
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2, ...
FROM 테이블1 **CROSS JOIN** 테이블2
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2, ...
FROM 테이블1 A **[INNER] JOIN** 테이블1 B
ON 조인조건
[WHERE 검색조건];
-- 예시1
SELECT (SELECT MAX(가격)
FROM 도서 A
WHERE A.책번호 = B.책번호
AND 책명='자료구조')
FROM 도서가격 B;
-- 예시2
SELECT MAX(가격)
FROM 도서가격 A,
(SELECT 책번호
FROM 도서
WHERE 책명='자료구조') B
WHERE A.책번호 = B.책번호
-- 예시3
SELECT MAX(가격)
FROM 도서가격
WHERE 책번호 IN (SELECT 책번호
FROM 도서
WHERE 책명='자료구조');
SELECT 칼럼명
FROM 테이블명
WHERE 검색조건
**UNION -- 위치 기억**
SELECT 칼럼명
FROM 테이블명
WHERE 검색조건
속성과 데이터 개수, 데이터 타입이 일치해야 함
속성명은 생략 가능
**INSERT INTO** 테이블명(속성명1, ...)
**VALUES** (데이터1, ...);
-- 예) [학생]테이블에 학번이 6677, 성명 '장길산' 학년이 3학년, 수강과목은 '수학'인 학생을 삽입
INSERT INTO 학생(학번, 성명, 학년, 수강과목)
VALUES (6677, '장길산', 3, '수학');
WHERE 절의 조건이 만족할 경우에만 특정 컬럼 값을 수정하는 용도
UPDATE 테이블명
SET 속성명 = 데이터, ...
WHERE 조건;
-- 예) [학생]테이블에 장길산의 주소를 인천으로 수정
UPDATE 학생
SET 주소 = '인천';
WHERE 이름 = '장길산';
**DELETE FROM** 테이블명
WHERE 조건;
-- 예) [학생]테이블에 장길산에 대한 튜플을 삭제
DELETE FROM 학생
WHERE 이름 = '장길산';
-- * 모든 레코드를 삭제할 때 (삭제해도 테이블 구조는 남아있어서 DROP 명령어와 다르다.)
DELETE FROM 테이블명
데이터 보안, 무결성 유지, 병행제어, 회복을 위해 관리자가 사용하는 제어용 언어이다.
**GRANT 권한 ON 테이블 TO 사용자;**
-- 예) 관리자가 사용자 장길산에게 '학생' 테이블에 대해 UPDATE 할 수 있는 권한 부여
GRANT UPDATE ON 학생 TO 장길산;
**REVOKE 권한 ON 테이블 FROM 사용자;**
-- 예) 관리자가 사용자 장길산에게 '학생' 테이블에 대해 UPDATE 할 수 있는 권한 회수
REVOKE UPDATE ON 학생 FROM 장길산;
일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
CREATE OR REPLACE PROCEDURE 프로시저명
( 변수1 IN 변수타입, 변수2 OUT 변수타입, 변수3 IN OUT 변수타입.... )
IS
변수 처리부
BEGIN
처리내용
EXCEPTION
예외처리부
END;
테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업
(1) 유형
FOR EACH ROW
옵션 사용// INSERT가 된 이후 TB_GOODS의 nStock 개수와 새롭게 등록된 nStock의 개수를 더해서 업데이트 해준다
CREATE TRIGGER TRIGGER_GOODS_STOCK
AFTER INSERT ON TB_GOODS_STOCK FOR EACH ROW
BEGIN
UPDATE TB_GOODS
SET
nStock = nStock + NEW.nStock
WHERE idx = NEW.p_idx;
END
CREATE OR REPLACE FUNCTION 함수명
( 매개변수1, 매개변수2, 매개변수3,... )
RETURN 데이터 타입
IS
변수 처리부
BEGIN
처리내용
RETURN 반환값
EXCEPTION
예외처리부
END
여러 트랜잭션들이 동시에 실행되면서도 데이터베이스의 일관성을 유지할 수 있게 하는 기법
갱현모연
로낙타다
로킹 단위에 따른 구분 ex) 화장실
구분 | 로크 수 | 병행성 | 오버헤드 |
---|---|---|---|
로킹 단위가 크면 | 적어짐 | 낮아짐 | 감소 |
로킹 단위가 작으면 | 많아짐 | 높아짐 | 증가 |
2단계 로킹 규약 (Two-Phase Locking Protocol)
Lock과 Unlock이 동시에 이루어지면 일관성이 보장되지 않으므로 Lock만 가능한 단계와 Unlock만 가능한 단계를 구분한다.
- 확장단계
: 새로운 Lock은 가능하고 Unlock은 불가능하다.
- 축소단계
: Unlock은 가능하고 새로운 Lock은 불가능하다.
트랜잭션들을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업
분석단계
REDO 단계
: 재실행UNDO 단계
: 취소기존의 원천 시스템에서 데이터를 추출(Extraction)하여 목적 시스템의 데이터베이스에 적합한 형식과 내용으
로 변환(Transformation)한 후, 목적 시스템에 적재(Loading)하는 일련의 과정
(1) 기능