관계형 데이터베이스 RDBMS를 위해 설계된 프로그래밍 언어
| 유형 | 설명 |
|---|---|
| 정의어 DDL | CREATE / DROP / ALTER / TRUNCATE |
| 조작의 DML | INSERT / UPDATE / DELETE / SELECT |
| 데이터 제어어 DCL | GRANT / REVOKE |
| 트랜잭션 제어어 TCL | COMMIT / ROLLBACK / SAVEPOINT |
// 예제 1 테이블 생성
CREATE TABLE 테이블명
컬럼명 데이터타입 [제약조건]
name varchar(30) [제약조건]
NOT NULL : null 입력 불가
UNIQUE : 중복값 불가
PRIMARY KEY : 기본키 설정
CHECK : 검증 CHECK IN ('M, 'F')
DEFAULT : 기본값 지정
// 예제 2 가상 테이블 생성
CREATE VIEW 뷰명
AS
SELECT 컬럼1, 컬럼2 FROM 테이블명;
// 예제 3 인덱스 생성
CREATE INDEX 인덱스명 ON 테이블명(컬럼명);
// 예제 1 컬럼 추가
ALTER TABLE 테이블명
ADD (컬럼명 데이터타입 [제약조건]);
// 예제 2 컬럼 수정
ALTER TABLE 테이블명
MODIFY (컬럼명 데이터타입 [제약조건]);
// 예제 3 컬럼 삭제
ALTER TABLE 테이블명
DROP COLUMN 컬럼명;
// 예제 4 컬럼명 수정
ALTER TABLE 테이블명
RENAME 기존 컬럼명 TO 새컬럼명;
DROP TABLE 테이블명;
TRUNCATE TABLE 테이블명;
// 컬럼명을 지정하여 INSERT
INSERT INTO student(name, major, age)
VALUES('Kim', '컴퓨터공학', 25);
// 다른 테이블 조회 후 그 결과를 INSERT
INSERT INTO student_backup(name, major, age)
SELECT name, major, age
FROM student
WHERE major = '컴퓨터공학';
// UPDATE
UPDATE 테이블명
SET 컬럼명
WHERE 조건;
// DELETE
DELETE FROM 테이블명
WHERE 조건;
// UNION, UNION ALL, INTERSECT, EXCEPT
// userA에게 Student 테이블의 조회 권한 부여
GRANT SELECT ON Student
TO userA;
// userA에게 Student 테이블의 조회, 삽입 권한 부여
GRANT SELECT, INSERT ON Student
TO userA;
// 다른 사용자에게 권한을 재부여
마지막에 WITH GRANT OPTION;
// userA의 조회 권한 회수
REVOKE SELECT ON Student FROM userA;
COUNT(컬럼명) : NULL 제외
DISTINCT : NULL 포함
집계함수 : 무시하고 계산에서 제외
GROUP BY : NULL 끼리 그룹핑 가능
WHERE 절 : NULL 비교 불가라서 제외
// INNER JOIN
교집합
// NATURAL JOIN
자연스럽게 JOIN, 공통 컬럼 1개
// FULL OUTER JOIN
먼저 INNER JOIN 후 교집합 없는 컬럼은 NULL로 채움
// LEFT OUTER JOIN, RIGHT OUTER JOIN
먼저 INNER JOIN 후 왼쪽만, 오른쪽만
// CROSS JOIN
테이블 X 테이블
원자성 Atomicity : 트랜잭션 연산 모두 실행 or 하나도 실행 X
일관성 Consistency : 트랜잭션 실행 후 일관된 데이터베이스 유지
고립성 Isolation : 하나 트랜잭션 실행중 끼어들 수 없음
지속성 Durability : 성공된 트랜잭션은 영구적으로 데이터베이스에 저장
Relation : 행과 열로 구성된 2차원 테이블
Tupple : 행, 레코드
Attibute : 열, 데이터 필드
Cardinality : 튜플의 수
Degree : 속성의 수
Schema : 데이터베이스의 구조와 제약조건 명세
Instance : 릴레이션에 들어있는 데이터 집합
Domain : 속성들이 가질 수 있는 값의 범위
외부 스키마
개념 스키마
내부 스키마
데이터 독립성
- 논리적 독립성 : 테이블 구조(개념 스키마)가 바뀌어도, 기존 사용자 뷰(외부 스키마)는 그대로 유지
- 물리적 독립성 : 저장 방식(내부 스키마)이 바뀌어도, 개념 스키마는 영향 받지 않음
구조 : 데이터베이스에 표현될 객체 타입, 데이터 타입, 객체들 간의 관계 정의
연산 : 데이터를 조작하고 검색하는 방법에 대한 명세
제약조건 : 일관성 있는 데이터를 유지하기 위한 논리적인 제약사항
| 단계 | 핵심활동 | 산출물 |
|---|---|---|
| 요구사항 분석 | 사용자의 요구사항 수집하고 분석 | 요구사항 명세서 |
| 개념적 설계 | 현실세계를 추상적인 개념 모델로 표현 | 개념적 스키마 / E-R 다이어그램 |
| 논리적 설계 | DBMS가 지원하는 논리적 모델로 변환 | 논리적 스키마 / 테이블 명세서 |
| 물리적 설계 | 실제 저장장치에 맞는 물리적 구조 설계 | 물리적 스키마 / 테이블 정의서 |
삽입이상 : 새로운 튜플 추가 시 불필요한 데이터 발생 + 무결성 위반
삭제이상 : 기존 튜플 삭제 시 연쇄 삭제 발생
갱신이상 : 속성값 변경 시 정보 모순 발생
| 유형 | 설명 |
|---|---|
| 완전 함수 종속(Full Functional Dependency) | 기본키 전체에 대해서만 종속 |
| 부분 함수 종속(Partial Functional Dependency) | 기본키 일부 속성에 종속되는 경우 |
| 이행 함수 종속(Transitive Functional Dependency) | A->B / B->C / A->C가 성립하는 관계 |
같은 의미
한 릴레이션에서 속성A값이 속성B값을 유일하게 결정
속성B은 속성A에 함수적으로 종속된다
A -> B
제1정규형(1NF) : 모든 속성 값이 원자값
제2정규형(2NF) : 부분 함수 종속 제거
제3정규형(3NF) : 이행적 함수 종속 제거
BCNF : 결정자 / 후보키
제4정규형(4NF) : 다치 종속 제거
제5정규형(5NF) : 조인 종속 제거
- 반정규화
성능향상이나 개발의 편의성을 위해 의도적으로 중복을 허용
슈퍼키 : 튜플을 유일하게 식별할 수 있는 속성 집합
후보키 : 튜플을 유일하게 식별하면서 최소한의 속성으로 구성된 키
대체키 : 기본키로 선택되지 못한 나머지 후보키
기본키 : 후보키 중 선택된 단 하나의 키
외래키 : 다른 테이블 기본키를 참조
| 구분 | 설명 |
|---|---|
| 개체 무결성 | 기본키는 NULL값을 가질 수 없으며, 릴레이션에서 유일해야 한다 |
| 참조 무결성 | 외래키 값은 참조 릴레이션의 기본키 값이거나 NULL이어야 한다 |
| 도메인(속성) 무결성 | 속성값은 정해진 도메인 범위에 속해야 한다 |
여러개의 물리적인 디스크를 하나의 논리적인 디스크처럼 사용하는 기술
주요 목적 : 성능 향상, 안전성 확보
스트라이핑 : 데이터를 여러 디스크에 분산 저장하여 동시에 읽고 쓸 수 있게 함. 성능 향상
미러링 : 동일한 데이터를 두 개 이상의 디스크에 복제 저장. 안전성 향상
패리티 : 데이터의 오류를 검출하고 복구하기 위한 추가 정보.
| RAID 레벨 | 기술 | 패리티 최소 디스크 | 장애 허용 | 저장 효율 |
|---|---|---|---|---|
| 0 | 스트라이핑 | 2 | 불가 | 100% |
| 1 | 미러링 | 2 | 1개 | 50% |
| 5 | 스트라이핑 + 분산 패리티 | 3 | 1개 | (n-1)/n |
| 6 | 스트라이핑 + 이중 패리티 | 4 | 2개 | (n-2)/n |
| 10 | 미러링 + 스트라이핑 | 4 | 쌍 당 1개 | 50% |