🤍 데이터베이스 설계 순서 5가지 = 요, 개, 논, 물, 구 [21년 1회, 23년 2회]
1️⃣ 요구 조건 분석
2️⃣ 개념적 설계 → 개념 스키마 모델링, 트랜잭션 모델링, E-R 다이어그램
- 현실 셰계에 대한 인식을 추상적 개념으로 표현하는 과정
- 개념 스키마 모델링과 트랜잭션 모델링을 수행
- 요구 조건 명세를 E-R 다이어그램으로 작성
3️⃣ 논리적 설계 → 목표 DBMS에 맞는 논리 스키마 설계, 트랜잭션 인터페이스 설계
- 현실의 자료를 특정 DBMS가 지원하는 자료구조로 변환하는 과정
- 트랜잭션의 인터페이스 설계
- 정규화를 통해 스키마를 평가 및 정제
4️⃣ 물리적 설계 → 목표 DBMS에 맞는 물리적 구조의 데이터로 변환
- 논리적 구조로 표현된 데이터를 디스크 등의 저장장치에 저장할 수 있는 데이터로 변환하는 과정
- 파일의 저장 구조 및 엑세스 경로를 결정하여, 테이블 정의서 및 명세서가 산출됨.
5️⃣ 구현
- 목표 DBMS의 DDL(데이터정의어)로 데이터베이스 생성, 트랜잭션 작성
🤍 정규화(Normalization) 과정 6단계= 도, 부, 이, 결, 다, 조 [21년 2회]
- 개념: 테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정
- 정규화 과정
- 비정규 릴레이션 ➡️ 1NF : 도메인인 원자값
- 1NF ➡️ 1NF : 부분적 함수 종속 제거
- 2NF ➡️ 3NF : 이행적 함수 종속 제거
- 3NF ➡️ BCNF(보이스코드정규형) : 결정자이면서 후보키가 아닌 것 제거
- BCNF ➡️ 4NF : 다치 종속 제거
- 4NF ➡️ 5NF : 조인 종속성 이용
🤍 반정규화(Denormalization) [21년 1회]
- 시스템의 성능을 향상시키고 개발 및 운영의 편의성 등을 높이기 위해 정규화된 데이터 모델을 의도적으로 통합, 중복, 분리하여 정규화 원칙을 위배하는 행위
🤍 데이터 모델의 구성 요소 3가지 = 연, 구, 제 [21년 1회]
- 연산(Operation)
- 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로서 데이터베이스를 조작하는 기본 도구에 해당
- 구조(Structure)
- 논리적으로 표현된 객체 타입들 간의 관계로서 데이터의 구성 및 정적 성질을 표현
- 제약 조건
- 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약 조건을 의미
🤍 DAC(임의 접근 통제, Discretionary Acess Control) [21년 1회]
- 접근 통제는 데이터가 저장된 객체와 이를 사용하려는 주체 사이의 정보 흐름을 제한하는 것임.
- 이러한 접근 통제에 관한 기술 중 DAC는 데이터에 접근하는 사용자의 신원에 따라 접근 권한을 부여하여 제어하는 방식으로, 데이터의 소유자가 접근 통제 권한을 지정하고 제어함.
- 객체를 생성한 사용자가 생성된 객체에 대한 모든 권한을 부여받고, 부여된 권한을 다른 사용자에게 허가할 수도 있음.
🤍 트랜잭션의 특성 4가지 = 원, 일, 격, 영 [20년 1회, 21년 2회]
- 원자성(Atomicity)
- 트랜잭션의 연산 전체가 성공 또는 실패(All or Nothing)되어야 하는 성질
- 일관성(Consistency)
- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 하는 성질
- 격리성=고립성(Isolation)
- 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질
- 영속성(Durability)
- 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질
🤍 DDL(정의), DML(조작), DCL(제어)
DDL(데이터 정의어)
💚 DDL 4가지 = CREATE, ALTER, DROP, TRUNCATE
1️⃣ CREATE(생성)
- 테이블 생성:
CREATE TABLE 테이블명 (컬럼명 데이터타입 (키) 제약조건);
CREATE TABLE 테이블명
(
컬럼명 데이터타입 PRIMARY KEY,
컬럼명 데이터타입 FOREIGN KEY REFERENCES 참조테이블(기본키),
컬럼명 데이터타입 UNIQUE,
컬럼명 데이터타입 NOT NULL,
컬럼명 데이터타입 CHECK(조건식)
컬럼명 데이터타입 DEFAULT 값
);
CREATE TABLE Employees
(
EmployeeID INT PRIMARY KEY,
DepartmentID INT FOREIGN KEY REFERENCES Departments(DepartmentID),
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Email VARCHAR(100) UNIQUE,
Salary DECIMAL(10,2) CHECK(Salary >= 0),
HireDate DATE DEFAULT GETDATE()
);
- 예시) 사람이라는 테이블 생성
- 사람이라는 테이블에는 이름, 성별이라는 컬럼이 있는데, 이름은 VARCHAR(10) 데이터 타입을 가지고, 성별은 CHAR(1) 데이터 타입을 가지고 있음.
- 성별은 추가로 ‘M’과 ‘F’ 값만 가질 수 있도록 제약 조건을 걸고자 함.
[답]
CREATE TABLE 사람
(
이름 VARCHAR(10)
성별 CHAR(1) CHECK(성별='M' OR 성별='F)
);
2️⃣ ALTER(수정) - ADD
- 테이블에 컬럼 추가 :
ALTER TABLE 테이블명 ADD 칼럼명 데이터 타입 (키) 제약조건;
ALTER TABLE Employees ADD BirthDate DATE NOT NULL;
ALTER TABLE 사원 ADD 전화번호 VARCHAR(11);
3️⃣ DROP(테이블 자체 삭제), TRUNCATE(내용만 삭제)
DML(데이터 조작어)
💚 DML 4가지 = SELECT, INSERT, UPDATE, DELETE
1️⃣ SELECT(조회) : 테이블 내 칼럼에 저장된 데이터 조회
- IN 연산자 사용법 = 칼럼 IN(값1, 값2, …) [20년 2회]
- DISTINCT(중복제거) [22년 3회]
- COUNT 연산자 = COUNT(칼럼명) | COUNT(*) [22년 2회]
- 복수 행의 줄 수를 구하는 집계 함수
COUNT(칼럼명)
: NULL 제외 카운트
COUNT(*)
: NULL 포함 전부 카운트
2️⃣ INSERT(삽입) : 테이블 내 칼럼에 데이터 추가
- 있는 칼럼에 데이터 추가 = INSERT INTO 테이블명(칼럼) VALUES(데이터);
INSERT INTO 테이블명(칼럼1, 칼럼2, …) VALUES(데이터1, 데이터2,…)
다음은 테이블 및 컬럼명에 대한 명세이다.
사원명이 홍길동, 나이가 24, 급여가 300인 직원을 직원 테이블에 삽입하는 쿼리
- 테이블명 : EMPLOYEE(직원 테이블)
- 칼럼명 : NAME(사원명), AGE(나이), SALARY(급여)
INSERT INTO EMPLOYEE(NAME, AGE, SALARY)
VALUES('홍길동', 24, 300);
🚨 **추가하는 경우 혼동 주의!**
- 칼럼 자체를 추가 한다면 → **ALTER TABLE** 테이블명 **ADD** 컬럼명 데이터타입 [제약조건];
- 있는 칼럼에 데이터를 추가 한다면 → **INSERT INTO** 테이블명(칼럼) **VALUES**(데이터);
3️⃣ UPDATE(갱신) - SET : 테이블 내 칼럼에 저장된 데이터 수정
- 데이터 내용을 변경(수정)할 때 사용하는 명령어
4️⃣ DELETE(삭제) : 테이블 내 칼럼에 저장된 데이터 삭제 [20년 3회]
🚨 주의점 : DELETE는 해당하는 행 자체를 삭제하기 때문에 FROM 앞에 *을 하지 않음!!!!
- 튜플을 삭제하는 경우 DELETE 명령어 사용
💚 JOIN 컬럼 ON 조건 [21년 2회]
💚 JOIN 종류 5가지 = 내, 왼외, 오외, 완외, 교, 셀 [21년 2회]
1️⃣ 내부조인 → JOIN 테이블 ON
- 같은 이름의 칼럼이 여러 테이블에 있을 경우 ‘별칭.컬럼명’ 형태로 명시
- INNER 키워드 : 생략해도 내부 조인은 가능
- 검색 조건 추가 시 ➡️ 조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
SELECT A.칼럼1, A.칼럼2, ..., B.칼럼1, B.칼럼2, ...
FROM 테이블1 A [INNER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건];
2️⃣ 왼쪽 외부조인 → LEFT JOIN 테이블 ON
- OUTER 키워드 : 생략해도 왼쪽 외부 조인 가능
- 검색 조건 추가 시 ➡️조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
SELECT A.칼럼1, A.칼럼2, ..., B.컬럼1, B.칼럼2, ...
FROM 테이블1 A LEFT [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건];
3️⃣ 오른쪽 외부조인 → RIGHT JOIN 테이블 ON
- OUTER 키워드 : 생략해도 오른쪽 외부 조인 가능
- 검색 조건 추가 시 ➡️조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
SELECT A.칼럼1, A.칼럼2, ..., B.컬럼1, B.칼럼2, ...
FROM 테이블1 A RIGHT [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건];
4️⃣ 완전 외부조인 → FULL JOIN 테이블 ON
- OUTER 키워드 : 생략해도 완전 외부 조인 가능
- 검색 조건 추가 시 ➡️조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
SELECT A.칼럼1, A.칼럼2, ..., B.컬럼1, B.칼럼2, ...
FROM 테이블1 A FULL [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건];
5️⃣ 교차조인 → CROSS JOIN 테이블 (ON 없음)
6️⃣ 셀프 조인
- 같은 테이블을 조인하는 경우임!
- 같은 테이블명을 쓰고 별칭만 A, B와 같이 다르게 함.
- 검색 조건 추가 시 ➡️조인된 값에서 ➡️ 해당 조건에 맞는 결과만 출력되도록 설정
SELECT A.칼럼1, A.칼럼2, ..., B.칼럼1, B.칼럼2, ...
FROM 테이블1 A [INNER] JOIN 테이블1 B
ON 조인조건
[WHERE 검색조건];
DCL(데이터 제어어)
💚 DCL(데이터 제어어) 2가지 = GRANT, REVOKE [21년 3회]
1️⃣ GRANT 권한 ON 테이블 TO 사용자;
2️⃣ REVOKE 권한 ON 테이블 FROM 사용자;
🤍 로킹 [21년 2회]
- 데이터베이스의 병행제어 기법 중 하나
- 접근한 데이터에 대한 연산을 모두 마칠 때까지 추가적인 접근은 제한함으로써 상호 배타적으로 접근하여 작업을 수행하도록 하는 기법
🤍 GRANT의 기능 [21년 3회]
- DCL의 하나로, 데이터베이스 관리자가 사용자에게 권한을 부여하는 데 사용하는 명령어
🤍 DB 트랜잭션 연산 = Redo, Undo [22년 1회]
- Redo → 시작(start) O, 종료(commit) O
- 데이터베이스가 비정상적으로 종료되었을 때, 디스크에 저장된 로그를 분석하여 트랜잭션의 시작(start)과 종료(commit)에 대한 기록이 있는 트랜잭션들의 작업을 재작업
- 즉, 로그를 이용해 해당 데이터 항목에 대해 이전 값을 이후 값으로 변경하는 연산임.
- Undo → 시작(start) O, 종료(commit) X
- 데이터베이스가 비정상적으로 종료되었을 때, 디스크에 저장된 로그를 분석하여 트랜잭션의 시작을 나타내는 ‘start’는 있지만 완료를 나타내는 ‘commit’ 기록이 없는 트랜잭션들이 작업한 내용들을 모두 취소
- 즉, 로그를 이용해 해당 데이터 항목에 대해 이후 값을 이전 값으로 변경하는 연산임.
🤍 정렬 = ORDER BY 칼럼 ASC | ORDER BY 칼럼 DESC [21년 2회, 22년 1회]
- 정렬 : 키워드 생략 시 오름차순
-
오름차순 : ORDER BY 컬럼 ASC
-
내림차순 : ORDER BY 컬럼 DESC
SELECT * FROM 학생
WHERE 이름 LIKE DESC ORDER BY 이름 "이%";
SELECT NAME, SCORE
FROM 성적
ORDER BY SCORE DESC;
SELECT * FROM 성적
ORDER BY 성적 DESC;
🤍 이상 종류 3가지 = 삽, 삭, 갱 [22년 1회]
- 이상이란?
- 데이터의 중복으로 인해 테이블 조작 시 문제가 발생하는 현상
- 삽입 이상
- 테이블에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들로 인해 삽입할 수 없게 되는 현상
- 삭제 이상(22년 1회 6번)
- 테이블에서 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 현상
- 갱신 이상
- 테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성에 생기는 현상
🤍 관계 해석 [22년 2회]
- 문제1) 데이터베이스에 대한 다음 설명에서 괄호에 공통으로 들어갈 알맞은 용어를 쓰시오.
- ( 관계 해석 )은 관계 데이터의 연산을 표현하는 방법으로, 관계 데이터 모델의 제안자인 코드(E. F. Codd)가 수학의 술어 해석(Predicate Calculus)에 기반을 두고 관계 데이터베이스를 위해 제안했다.
- 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지니며, 원하는 정보를 정의할 때 계산 수식을 사용한다.
- 튜플 해석식을 사용하는 튜플 ( 관계 해석 )과 도메인 해석식을 사용하는 도메인( 관계 해석 )으로 구분된다.
🤍 다중 행 비교 연산자 4가지 = IN, ANY(=SOME), ALL, EXISTE [22년 2회]
- 다중 행 비교 연산자는 단일 행 비교 연산자(<, >, =, <>)와 결합해 사용 가능
- IN : 리턴되는 값 중 조건에 해당하는 값이 있으면 참
- ANY(=SOME) : 서브쿼리에 의해 리턴되는 각각의 값과 조건을 비교해 하나 이상 만족하면 참
- ALL : 값을 서브쿼리에 의해 리턴되는 모든 값과 조건값을 비교하여 모든 값을 만족해야만 참
- EXISTS : 메인 쿼리의 비교 조건이 서브쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참
🤍 COUNT [22년 2회]
- COUNT(*) : NULL도 포함 가능
- COUNT(칼럼) : NULL은 포함 안됨.
🤍 관계 대수식 π [22년 2회]
πTTL(EMPLOYEE)
🤍 함수적 종속(Functional Dependency) [22년 2회]
🤍 관계 대수 U, -, X, π, ⋈ [22년 3회]
- 관계 대수의 개념
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어
- 연산
- 일반 집합 연산자 4가지 = U, ∩, - X
- Union(합집합) : U
- Intersection(교집합) : ∩
- Difference(차집합) : -
- Cartesian product(교차곱) : X
- 순수 관계 연산자 4가지 = σ π ⋈ ÷
- Select : σ
- Project : π
- 조인 : ⋈
- Division(나누기) : ÷
🤍 중복 제거 문제 풀이 시 주의 [22년 3회]
- 문제 7) 다음과 같이 테이블을 정의하고 튜플을 삽입하였을 때, 각 번호( ①, ② )의 SQL문을 실행한 결과를 쓰시오.
CREATE TABLE 부서 (
부서코드 INT PRIMARY KEY,
부서명 VARCHAR(20)
);
CREATE TABLE 직원 (
직원코드 INT PRIMARY KEY,
부서코드 INT,
직원명 VARCHAR(20),
FOREIGN KEY(부서코드) REFERENCEs 부서(부서코드) ON DELETE CASCADE
);
INSERT INTO 부서 VALUES(10, '영업부');
INSERT INTO 부서 VALUES(20, '기획부');
INSERT INTO 부서 VALUES(30, '개발부');
INSERT INTO 직원 VALUES(1001, 10, '이진수');
INSERT INTO 직원 VALUES(1002, 10, '곽연경');
INSERT INTO 직원 VALUES(1003, 20, '김선길');
INSERT INTO 직원 VALUES(1004, 20, '최민수');
INSERT INTO 직원 VALUES(1005, 20, '이용갑');
INSERT INTO 직원 VALUES(1006, 30, '박종일');
INSERT INTO 직원 VALUES(1007, 30, '박미경');
① SELECT DISTINCT COUNT(부서코드) FROM 직원 WHERE 부서코드 = 20;
② DELETE FROM 부서 WHERE 부서코드 = 20;
SELECT DISTINCT COUNT(부서코드) FROM 직원;
- 답
① 3
② 4
🤍 E-R 다이어그램 요소 6가지 = 개, 관, 속, 다속, 개관연, 관관속연 [22년 3회]
- ☐ (사각형) - 개체
- ◇ (마름모) - 관계 (개체들의 관계 집합)
- ○ (타원) - 속성
- ◎ (이중타원) - 다중값 속성
- ⎯ (실선) - 개체와 관계집합의 연결
- -- (점선) - 관계집합과 관계집합의 속성과의 연결
🤍 릴레이션 구성 용어 3가지 = 튜플, 릴레이션 인스턴스, 카디널리티 [23년 1회]
- 튜플
- 릴레이션을 구성하는 각각의 행을 의미하며, 파일 구조에서는 레코드에 해당함.
- 릴레이션 인스턴스
- 데이터 개체를 구성하고 있는 속성들에 데이터 타입이 정의되어 구체적인 데이터 값을 가진 것으로, 실제 값을 가진 튜플을 의미함.
- 카디널리티
🤍 스키마 3가지 = 외, 개, 내
- 외부 스키마 → 사용자, 개발자 관점 DB 논리적 구조
- 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조
- 사용자 뷰를 나타내고, 서브 스키마로 불림.
- 개념 스키마 → DB 전체 논리적 구조
- 데이터베이스의 전체적인 논리적 구조
- 전체적 뷰를 나타냄
- 개체 간 관계, 제약 조건, 접근 권한, 무결성, 보안에 대해 정의
- 내부 스키마 → 물리적 저장 장치 관점 DB 구조
- 물리적 저장 장치의 관점에서 보는 데이터베이스 구조
- 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등 표현
🤍 CASCADE [23년 2회]
- 뷰를 제거할 때, 뷰를 참조하는 모든 데이터도 연쇄적으로 제거하는 옵션!
🤍 RESTRICT
- 뷰를 제거할 때, 뷰 테이블을 다른 테이블이 참조 중이면 제거하지 않는 옵션!
🤍 UML 다이어그램 정적 모델링 6가지 = 정(=구) - 클, 객, 컴, 배, 복, 패 [23년 3회]
키워드 : 관계, 구조, 위치 등
- 정적 모델링(=구조적 다이어그램)
- 클래스 다이어그램
- 클래스 사이의 관계를 표현하는 UML을 이용한 정적 모델링의 대표 다이어그램
- 객체 다이어그램
- 클래스에 속한 사물(객체)들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현
- 컴포넌트 다이어그램
- 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현
- 배치 다이어그램
- 컴포넌트 사이의 종속성을 표현하고, 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현
- 복합체 구조 다이어그램
- 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현
- 패키지 다이어그램[23년3회]
- 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현
🤍 UML 다이어그램 동적 모델링 7가지 = 동(=행) - 유, 시, 커, 상, 활, 상, 타 [23년 3회]
키워드 : 요구 분석, 메시지, 상태 변화, 로직, 흐름, 제약 등
- 동적 모델링(행위 다이어그램)
- 유스케이스 다이어그램(Use Case Diagram)
- 사용자의 요구를 분석하는 것으로, 기능 모델링 작업에 사용
- 사용자(Actor)와 사용 사례(Use Case)로 구성됨
- 시퀀스 다이어그램(Sequence Diagram)
- 상호 작용하는 시스템이나 객체들이 주고받는 메시지를 표현함
- 커뮤니케이션 다이어그램(Communication Diagram)
- 동작에 참여하는 객체들이 주고받는 메시지와 객체들 간의 연관 관계를 표현함
- 상태 다이어그램(State Diagram)
- 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현함
- 럼바우 객체지향 분석 기법에서 동적 모델링에 활용됨
- 활동 다이어그램(Activity Diagram)
- 시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현함
- 상호작용 개요 다이어그램(Interaction Overview Diagram)
- 타이밍 다이어그램(Timing Diagram)
- 객체 상태 변화와 시간 제약을 명시적으로 표현함
🤍 무결성 제약조건 4가지 = 개, 도, 참, 사 [23년 3회]
- 개체 무결성 : 기본키는 null이 될 수 없고 중복이 일어날 수 없음(릴레이션 내에 오직 하나의 값만 존재해야 함), 기본키 제약이라고도 함.
- 도메인 무결성 : 주어진 속성이 도메인에 속해야 함
- 참조 무결성[23년 3회] : 외래키는 참조할 수 없는 값을 가질 수 없음
- 제한 : 참조무결성의 원칙을 위배하는 연산을 거절하는 옵션이다.
- 연쇄 : 참조되는 릴레이션에서 튜플을 삭제하고, 참조되는 릴레이션에서 이 튜플을 참조하는 튜플도 함께 삭제하는 옵션이다.
- 널 값 : 참조되는 릴레이션에서 튜플을 삭제하고, 참조하는 릴레이션에서 해상 튜플을 외래키에 NULL 값을 넣는 옵션이다.
- 사용자 정의 무결성 : 속성값들이 사용자가 정의한 제약조건에 만족해야 함
🤍 키(KEY) 3가지 = 대, 슈, 외
- 대체키 : 후보 키 중에서 기본 키로 선택되지 않은 키
- 슈퍼키 : 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족하지 못하는 키
- 외래키 : 테이블 간의 참조 무결성을 위한 제약 조건으로 한 릴레이션의 컬럼이 다른 릴레이션의 기본 키로 이용되는 키