SQL문 

sql문에서 자료형이 아닌것은? 

char, string, integer, DECIMAL  정답은 string이다. 

where && 안씀. 

create view as 

group by + having 

insert into 

update 테이블 set

delete from 

 

 

create table 시 

check절에는 update없다.

foreign key : no action / casecade / set null / set default (4개) 필요하다. 

 

조인의 이해 

 

INNER 조인 

=> " 조건에 부합하는 것만 뽑아준다 "

OUTER 조인

- LEFT JOIN

- RIGHT JOIN 

=> From  A테이블 left join B테이블

 

A테이블은 전부 다 보여준다.

 

그렇다면 장점이 뭐냐~? 우선, 가독성이 좋습니다. inner 조인으로도 select문을 두번써서 만들 수 있지만, 가독성이 떨어진다.

또 데이터베이스로 부터 받아온 데이터를 for문을 여러번 돌릴필요없이도 출력이 가능해지기 때문에 자바에서도 코드가 간결해지는 장점이 있습니다. 

 

제 경험에 의하면, 이미지 테이블 과 댓글 테이블 

이 둘을 ID로 left 조인을 하면 이미지를 포함한 댓글과 이미지를 포함하지 않은 댓글이 모두 출력이 됩니다. 

이미지를 포함하지 않은 칼럼은 ifnull을 통해서 0으로 바꿔주고 내보낼 수 있다.  

// ifnull(id, false) as X

 

 

 

파일시스템의 불편함이 데개논이터베이스를 만듬 ( 아래 4가지 특징이 생겨남)

ex) 응용 프로그램 = 전용 파일 ( DB이전) 이 있어야함. 데이터 종속성이 높다 : 파일구조 변경시 프로그램 구조를 바꿔야함. 

DBMS는 보조기억장치에 저장. 

1. 데이터베이스 특징=> 실시간 접근성, 동시 공용, 내용에 의한 참조(값), 계속 변화. 

1-1. DB정의 : 통합, 저장 , 운영( 조직에서 ) , 공용( 공동 소유) 


1-2. 데이터 베이스 설계 
요구 사항 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 ->구현 

(1) 개념적 설계 :개념스키마, 트랜잭션 모델링, E-R 다이어그램 모델 (개체-모델) //추상적인 단계 (모델링 ) 

*E-R 다이어그램 -개체(ㅁ) : 현실 세계의 대상체 / 속성( O ) : 개체를 구성하는 최초의 논리적 단위 / 

(2) 논리적 설계 :목표DBMS에 맞는 스키마 설계 (관계형, 그래프형, 트리형 등등 ) , 트랜잭션 인터페이스 설계. // 실제 DB 설계 단계 

(3) 물리적 설계 :물리적 구조의 데이터 변환(응답시간, 저장공간의 효율화, 트랜잭션 처리도,물리적인 CPU나 메모리의 활용) // 효율화, 모델화.

 

(4) 구현 : DDL로 DB생성. 

지연 갱신 vs 즉시 갱신 

지연 갱신 : commit 될 떄까지 갱신 내용을 디스크 저장 x . ( redo만 있으면 됨)

즉시 갱신 : commit 할 때 마다, Os에 디스크에 저장할 것을 요구한다. (undo, redo ) 

*checkpoint의 기점이 중요하다. : 옜날꺼를 redo하지 않기 위해서 쓴다. checkpoint 이후에 꺼만 처리하면 된다.

undo : commit 되지 않은 트랜잭션의 실행을 취소함. 

redo : commit 된 트랜잭션의 회복을 위해서 재실행 함( 회복) 

checkpoint 이전에 commit된건 No operation 

checkPoint 전에 시작해서  checkpoint 이후에 commit된거 redo. 

 

 

 

*스키마란? DB 구조의 정의, 제약 조건을 명세해놓은 메타데이터의 집합

외부, 개념, 내부 스키마가 있다.

외부 스키마 = 사용자 뷰 ( 여러개 존재, 각 개인의 입장에서 필요로 하는 부분 정의)

-> 저장된 데이터와 그들 간의 관계를 기술한다.
개념 스키마 = 전체적인 뷰 (논리적인 관점에서 전체 데이터 구조를 정의 , 외부를 통합한다. )

//전체적인 논리 구조로 접근 권한이나 보안 및 무결성 규칙에 관한 명세를 정의

내부 스키마 = 물리적인 저장장치. (실제 데이터베이스를 저장하기 위한 스키마)

 

 

2. 정규화 ( 이상을 제거하고 중복을 최소화 하기 위해서 테이블을 분해하는 과정이라고 한다)
1정규형은 도메인 원자값이라는 조건을 충족시키기 위해서
반복을 제거하고 식별자(키)로 구분 가능하도록 테이블을 분해한다.

( 비정규형 -> 1정규형 : 도메인 원자값 )

2정규화는 1정규화를 수행하고 나서 식별자인 기본키가 복합키로 이루어질 수 있는데, 
그 중 하나의 키로 부분적으로 함수 종속이 있을 수 있고, 이때 이상현상이 발생하는 것을 막기 위해서 
완전 함수 종속만 이루어지도록 테이블을 분해하는 것을 말합니다. 
( 1정규형 -> 2정규형 : 부분적 함수종속 제거 ) 


3정규화에서는 기본키에서 발생하는 것이 아닌 그 외의 키가 이행적으로 함수 종속이 일어날 때, 발생하는 것으로 
이를 제거해주는 것을 의미합니다. 
( 2정규형 -> 3정규형 : 이행적 함수 종속 제거 )

Y가 X에 함수종속일 때는 X->Y 이렇게 써준다. 

 

0->1 도

1->2 부 

2->3 이

3->B 결

B->4 다

4->5 조


3. 옵티마이저란? SQL을 가장 빠르고 효율적으로 수행할 수 있게 하는 DBMS의 내부 핵심 엔진이다. 

4. 프로세스와 쓰레드 차이? 
프로세스는 연속적으로 실행되고 있는 컴퓨터 프로그램을 말함. 
쓰레드는 프로세스 내의 실행되는 '흐름의 단위'(하나의 프로세스에 하나 이상의 쓰레드를 가질 수 있음.)

 

5. 관계 대수 vs 관계 해석 

ㅇ 관계 대수 : 셀렉션( 수평) , 프로젝션 (수직) , 절차적 !!!! 

피연산자, 결과 모두 릴레이션  
일반 집합 연산 + 순수 관계 연산
시그마 = 수평적 부분집합 = Selection '

 

ㅇ 관계 해석
수학의 프레디킷 해석에 기반  , 비절차적 !!!
sql 문 
튜플 관계 해석 + 도메인 관계 해석
릴레이션 정의
* 관계 해석과 대수는 관계 디비를 처리하는 기능과 능력면에서 동등하다.

 

트랜잭션이란? 논리적 기능을 수행하기 위한 하나의 작업 단위이다. 

트랜잭션이란 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우,
처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단위를 의미합니다.
즉, 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업수행의 논리적 단위

트랜잭션 (4가지) //원자성(회복) ,지속성(회복), 격리성(병행제어 ) ,일관성(병행제어 )
- Atomicity는 트랜잭션의 연산이 DB에 모두 반영되던지 전혀 반영이되지 않던지 둘중에 하나만 수행해야한다.(원자성) - yes or no // commit, rollback이 일어남 
Consistency는 트랜잭션이 성공적으로 완료된 후에는 언제나 일관성 있는 DB상태로 변환되어야한다.(일관성: 처리 후에 구조나 형식의 변경이 없다.)

Isolation은 수행중인 트랜잭션이 완전히 완료되기 전에는 다른 트랙잭션에서 수행 결과를 참조할 수 없다.(독립성 : 동시에 작업을 수행하는 경우가 없어야한다. )

Durablility는 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.(영속성)

병행 제어 기법 ( 특징 : 공유 최대화 / 일관성 유지 / 응답시간 최소화 / 활용도 최대화 ) 
로킹: 하나의 트랜잭션이 데이터를 엑세스하는 동안 다른 트랜잭션이 그 데이터 항목을 엑세스 할 수 없도록 잠궈두는 기법이다. 

로킹 단위가 작다( 잠궈두는 시간이 작다) -> 일정시간에 여러 애들이 접근이 많아져서 오버헤드 발생가능함, 하지만 병행 수준 높아짐!


로킹 단위가 크면 로크 수가 적어서 관리는 쉽지만, 병행 수준이 낮아짐!

DDL : Drop , Alter, Creat으로 이루어짐. (정의어) 
DML : insert, update, delete, select. (조작어)
DCL : Grant, Revoke. // 데이터 무결성/ 보안(가용성) // 데이터 회복 및 병행제어가 이루어짐. 

 

UML엔 use case , sequence, class 가 있음. 

무결성이란 데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한다. 데이터의 무결성을 유지하기 위해 DBMS에서는 크게 4가지 종류로 구분한다.

후보키 : 유일성 o , 최소성 o , 부분집합. 

대체키 : 기본키를 제외한 기본키가 되는 놈들

슈퍼키 : 유일성 o, 최소x

개체 무결성 : 기본키로 선택된 필드는 빈 값을 허용하지 않는다. ( NULL,중복값 X ) 
참조 무결성 : 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지한다. (외래키, 동일)
도메인 무결성 : 테이블에 존재하는 필드의 무결성을 보장하기 위한 것으로 올바른 데이터가 입력됬는지를 체크하는 것이다.
고유 무결성 : 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성값은 모두 고유한 값을 가진다. 같으면 안된는 것
NULL 무결성 : 특정 속성값에 NULL이 올 수 없다는 조건이 주어진 경우 그 속성값은 NULL이 될 수 없다는 제약조건
키 무결성 : 한 릴레이션에는 최소한 하나의 키가 존재해야하는 제약조건

Q. 무결성을 유지하려는 이유가 무엇인가요?
A. 무결성이 유지가 되어야 DB에 저장된 데이터 값과 거기에 해당하는 현실 세계의 실제값이 일치하는지 신뢰할 수 있기 때문이다.



 인덱스란?
- 데이터에 빠르게 접근하기 위해서 목차를 만들어 놓은 것을 인덱스로 알고있습니다. 
목차의 역할처럼 항상 정렬된 상태를 유지합니다. 인덱스에서 데이터를 찾은 다음에 그 테이블로 맵핑된 곳을 가서 꺼내오는 형식,. 
- 인덱스를 마구잡이로 쓰면 안됨! select는 빨라져도insert나 update는 느려진다. 
정렬이 된 상태로 저장이 되어야 하기 때문에 !
여러 가지 인덱스가 있는 흔히  B-tree ( balance –tree ) logN으로 복잡도를 줄여서 
효율성을 높인 것으로 알고 있습니다. 

뷰 ( 독자적 인덱스 x

- 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로 부터 유도된 가상 테이블. 

- 물리적으로 존재하지는 않지만, 사용자에게는 있는 것처럼 간주됨. 

특징

- 가상 테이블이기 때문에 물리적으로 구현되지 않는다. 

- 데이터 접근 제어로 보안을 제공 

- 데이터의 논리적 독립성 을 제공 

- 뷰는 삽입, 삭제, 갱신에 제약이 따름. (create, drop가능, alter 불가능) ,  order by 못씀~ group by 사용가능  

- 독릭접인 익덱스를 가질 수 없다. 

- 뷰의 정의를 변경할 수 없다. 

 

시스템 카탈로그  

- DBMS 내에 특별한 테이블 집합체 

- 내용 검색 용이 ( 누구나) 

- 자료사전, 메타 데이터라고 함. 

 

분산DB

- 위치투명성

- 중복 투명성 : 중복의 여부를 모르고도 처리가능 (= 복제 투명성)  

- 장애 투명성 : 장애가 발생해도 영향 x

- 병행 투명성 : 다수의 트랜잭션이 발생해도 영향 x

 

 

select에서 isnotnull 쓰는거 

 

교착상태 

점유대기 부정 

- 모든 자원 할당하여 프로세스 대기를 없애거나, 점유되지 않은 상태에서 지원요구

비선점 부정 

- 점유하고 있는 프로세스가 다른 자원 요구시 점유하고 있는 자원 반납. 

환형대기 부정 

-한 방향으로만!! 

상호배제는 부정할 수 없다. 

 

 

+ Recent posts