1. 데이터 베이스 특징 4가지
ㄱ. 실시간 접근성 - 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 함
ㄴ. 지속적인 변화 - 데이터베이스의 상태는 !동적!이다. 즉, 새로운 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update)로 데이터베이스는 항상 최신 상태로 유지해야 함
ㄷ. 동시 공용 - 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것으로, 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 함 (사용자마다 다른 내용의 데이터를 제공받으면 클나)
ㄹ. 내용에 의한 참조 - 데이터베이스에 있는 데이터를 참조할 때, 데이터 레코드의 주소, 위치에 의해서가 아니라 사용자가 요구하는 데이터의 내용으로 찾아야 함
2. 데이터베이스 언어 읊어라
DDL : 정의어, Data Definition Language, 정의어는 무엇이냐하면 데이터베이스 구조를 정의, 수정, 삭제하는 언어
그 안에 있는 자료를 컨트롤한다기보다, 데이터베이스 구조 자체를..명명하는 쪽에 가까움
alter : 수정
create : 정의
drop : 삭제
DML : 조작어 Data Manipulation Language, 조작어는 데이터베이스 안에 있는 자료(테이블) 검색, 삽입, 갱신, 삭제를 위한 언어 == sql 쿼리문에서 자주 쓰이는 언어라고 보면 됨
select : 검색
insert : 삽입
update : 갱신
delete : 삭제
DCL : 제어어, Data Control Language, 제어어는 데이터의 무결성 유지, 병행 수행 제어, 보호 및 관리 즉 트랜잭션을 위한 언어 == 쉽게 말해서 데이터베이스에 저장된 데이터를 안전하게 관리하고, 사용하기 위한 규칙과 명령어를 정의하는 언어
commit : 데이터베이스의 트랜잭션을 완료함
rollback : 데이터베이스의 트랜잭션을 취소함
grant : 사용자에게 특정 데이터베이스 객체에 대한 권한 부여
reboke : 사용자에게 부여된 권한을 취소함
3. select 쿼리의 수행 순서
1순위 - from, on, join
from : 각 테이블을 훑어 확인함 /
on : join의 조건 확인 /
join : join이 실행되어 데이터가 set으로 모아짐, 서브쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와줌
2순위 - where, group by, having
where : where 뒤로 붙은 조건이 from절로 가져온 테이블에 적용됨 /
group by : where 절의 조건 적용 후, 나머지 행은 group by 절에 지정된 열의 공통값 기준으로 묶여짐, 쿼리에 집계 기능이 있는 경우에만 group by를 사용해야함 /
having : group by - having 단짝 관계임, group by 썼으면 그 뒤에 having 절 써줘야 함
3순위 - select
select : select가 가장 마지막으로 적용됨 (검색 버튼도 가장 마지막에 누르듯이, 검색의 role을 맡은 select도 가장 마지막에 작동하는 것임)
4순위 - distinct
distinct : SQL 쿼리문에서 중복된 행을 제거하고 고유한 값만 선택하는 데 사용, 같은 데이터가 여러 번 나타나는 것을 방지하여 결과를 명확하게 만들어줌
5순위 - order by
order by : 지정된 데이터를 기준으로 오름차순, 내림차순 지정
오름차순 : 작은 수부터 정렬하는 것 1 2 5 8 10
내림차순 : 큰 수부터 정렬하는 것 10 8 5 2 1
6순위 - limit
limit : limit에서 벗어나는 행들은 제외되어 출력됨
3. 트리거에 대해 설명하셈
트리거 : 특정 테이블에서 특정 조건이 만족될 때 자동으로 실행되는 sql 쿼리
DB에 변화가 생겼을 때 자동적으로 (딸..깍..!) 특정 작업을 수행하도록 설정하는 기능이라고 보면 됨
특징 : 사용자가 직접 호출하는 것이 아닌, 데이터베이스에서 자동적으로 호출함
장점 : 데이터베이스의 무결성을 유지하고 작업을 자동화하며 비즈니스 규칙을 적용할 수 있어서 데이터베이스 관리에 매우 유용함
CREATE TRIGGER employee_salary_check
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < 100000 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '급여는 10만원 이상이어야 합니다.';
END IF;
END;
4. Index란 ? 무엇임?
Index : 종이사전에서 색인(가, 나, 다 이렇게 찾아보기 쉽도록 일정한 순서로 나열한 목록)과 비슷한 역할을 함
사전에서 색인을 통해 원하는 낱말을 비교적 빠르게 찾을 수 있듯이, 데이터베이스에서 인덱스는 데이터베이스 테이블에서 특정 데이터를 빠르게 찾을 수 있도록 돕는 역할을 함
ex. DB - 사전 비유
데이터 = = 사전 속 많은 언어들의 내용
데이터가 저장된 레코드의 주소(좌표) = = index 목록에 있는 페이지 번호
인덱스 장점 : 항상 정렬된 상태를 유지하기 때문에 원하는 값을 빠르게 검색할 수 있다
인덱스 단점 : 새로운 값을 추가하거나, 삭제 및 수정하는 경우에 쿼리문 실행 속도가 느려짐
요약 : 인덱스는 데이터의 저장 성능을 희생하는 대신에, 데이터 검색 속도를 높이는 기능이라 할 수 있음
5. 정규화 도대체 뭔데요? 정규직은 아는데요

정규화 : 하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정, 데이터의 일관성, 데이터 중복 MIN, 데이터 유연성 MAX을 위한 방법
제1 정규형 : 테이블의 컬럼이 원자 값(하나의 값, one자 값이라고 엮어서 암기)
제2 정규형 : 제1 정규형을 만족하고, 기본키가 아닌 속성(X)이 기본키(Y)에 완전 함수 종속이도록 분해
제3 정규형 : 제2 정규형을 만족하고, 이행적 함수 종속을 없애도록 분해
BCNF 정규형 : 제3 정규형을 만족하고, 함수 종속성 X -> Y가 성립할 때, 모든 결정자 X가 후보키가 되도록 분해함
장점 : 1. 데이터베이스 변경할 때 이상현상 발생하는 문제점 해결 가능(이로서 속도가 빨라질 수도 있다) 2. 데이터베이스 구조 확장시 정규화된 데이터베이스는 그 구조 전체를 뒤집어 엎지 않아도 되거나, 일부만 바꿔도 된다
단점 : 1. 릴레이션의 분해로 인해 릴레이션 간의 연산(join 연산)이 많아짐, 이로서 응답 시간이 길어지고 성능이 저하될 수도 있다
즉, 정규화를 어떻게 하느냐에 따라 속도가 빨라질 수도, 오히려 느려질 수도 있다.
약간 수련회 교관 재질? 여러분이 어떻게 하느냐에 따라 교관은 악마가 될수도.. 천사가 될수도 있읍니다 푸하학
- 완전 함수 종속
어떤 속성 X(기본키가 아닌 속성) 가 다른 속성 Y(기본키)를 결정할 때, X(기본키가 아닌 속성)의 일부가 아니라 X(기본키가 아닌 속성) 전체가 Y(기본키)를 결정하는 경우를 말함
즉, X(기본키가 아닌 속성)의 모든 값이 Y(기본키) 의 모든 값을 결정하고 X(기본키가 아닌 속성)의 일부만으로는 Y (기본키)의 모든 값을 결정할 수 없는 경우를 뜻함 = X와 X끼리도 이 문항이 적용됨
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(255),
major VARCHAR(255),
gpa DECIMAL(3,2)
);
위의 테이블에서
X : major, gpa, 기본키가 아닌 속성
Y : student_id, 기본키
설명 :
* major는 student_id에 완전 함수 종속됨. 즉, student_id를 알면 major를 알 수 있지만,
반대로 major 만으로는 student_id를 알 수 없다.
* gpa는 student_id와 major에 완전 함수 종속됨. 즉, student_id와 major를 알면, gpa를 알 수 있지만
student_id 혹은 major만으로는 gpa를 알 수 없다!
질문 : gpa는 major와 같은 X에 속하는데도, 왜 major에도 완전 함수 종속이 되어있는 것임?
-- students 테이블
major : 전공
gpa : 학점 평점 / 4.5 4.3 뭐 이런거
student_id | name | major | gpa
------- | -------- | -------- | --------
1 | 홍길동 | 컴퓨터공학 | 4.0
2 | 이순신 | 경영학 | 3.5
3 | 김유신 | 역사학 | 3.0
4 | 박지성 | 축구학 | 2.5
5 | 이이 | 컴퓨터공학 | 4.0
이 예시를 보면 더 이해가 쉬울 거 같은데~~
major과 student_id가 함께 gpa를 명확히 결정하기 때문임.
if) student_id에만 gpa가 종속된다고 할 때 (절망편)
student_id만 가지고 이 학생이 어디 전공자인지도 모르고, 그러기때문에 전공에 따른 total 평점도 알 수가 없음.
student_id와 major를 완전히 알아야지만, gpa도 명확히 알 수 있음
그래서 gpa가 student_id와 major에 완전 함수 종속된다고 하는 것임
- 이행적 함수 종속
A → B, B → C가 성립할 때 A → C가 성립되는 것을 의미
- 이상 현상
뜻 : 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 생기는 논리적 오류
1. 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어서 인위적으로 null을 입력해야 하는 현상 (내 전문임)
2. 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
3. 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상
이와 같은 이상 현상을 미연에 방지하고, 효율적으로 연산하기 위해 데이터 정규화를 하는 것임
'CS 지식 > 데이터베이스' 카테고리의 다른 글
2. cs 지식 - 데이터 베이스 (0) | 2024.03.09 |
---|---|
[에러 해결] ORA-28001: the password has expired (Oracle DB 비밀번호 만료 해결법) (0) | 2024.01.16 |
[CS지식] side effect와 CQRS원칙 (0) | 2023.12.10 |