728x90
SMALL

모델링이란? 

- 복잡한 현실세계를 단순화 시켜 표현하는 것

- 현실세계의 추상화된 반영

- 사물 또는 사건에 대한 양상(Aspect) 이나 관점(Prespective)을 연관된 사람이나 그룹을 위해 명확하게 하는 것 

- 데이터베이스를 구축하기 위한 분석/설계의 과정 


모델링의 특징

특징 설명
추상화
(Abstraction)
현실세계를 일정한 형식에 맞추어 표현, 다양한 현상을 일정한 양식인 표기법에 의해 표현
단순화
(Simplification)
복잡한 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 함
명확화
(Clarity)
누구나 이해하기 쉽게 하기 위해 대상에 대한 애매모호함을 제거하고 정확하게 현상을 기술

모델링의 세가지 관점

 

관점
데이터 관점 - 업무가 어떤 데이터와 관련이 있는지 또는 데이터간의 관계를 무었인지 대해서 모델링 하는 방법(What, Data)
- 구조 분석, 정적 분석
프로세스 관점  - 업무가 실제하고 있는 일은 무었인지 또는 무엇을 해야하는지를 모델링 하는 방법(How, Process)
- 시나리오 분석, 도메인분석, 동적 분석
데이터와 프로세스 -  업무가 처리하는 일의 방법에 따라 데이터틑 어떻게 영향을 받고 있는지 모델링 하는 방법(Interaction)으로 설명됨 
- CRUD(create, read, update, delete)분석

모델링이 중요한 이유

- 데이터베이스 소프트웨어 개발 오류 감소

- 데이터베이스 설계 및 생성 속도와 효율성 촉진

- 조직 전체에서 데이터 문서화 및 시스템 설계의 일관성 조성

- 데이터 엔지니어와 비지니스 인텔리전스팀 간의 커뮤니케이션 촉진

중요성 설명
파급효과
(Leverage)
파급효과가 크다
데이터 구조 변경으로 인한 일련의 변경작업 위험요소 해결
복잡한 정보요구사항의 간결한 표현
(Conciseness)
요구사항, 한계 명확하고 간결하게
데이터 품질
(Data Quality)
데이터 품질을 유지하고 오래된 데이터의 정확성, 신뢰성 해결

 

데이터 모델링의 유의점

유의 사항 설명
중복
(Duplication)
데이터 모델 같은 데이터를 사용하는 사람, 시간, 장소를 파악하는데 도움을 줌
데이터베이스가 여러 장소에서 같은 정보를 저장하는 잘못을 하지 않도록 함 
비유연성
(Inflexibility)
데이터의 정의를 데이터의 사용 프로세스와 분리함으로써 데이터 모델링은 데이터 혹은 프로세스의 
작은 변화가 애플리케이션과 데이터베이스에 중대한 변화를 일으킬 수 있는 가능성을 줄임
비일관성
(Inconsistency)
데이터 중복이 없더라도 비일관성은 발생
데이터 모델링을 할때 데이터와 데이커간 상호 연관 관계에 대한 명확한 정의는 이러한 위험을 사전에 예방
728x90
반응형
LIST
728x90
SMALL

데이터 무결성(Data Integrity) 란? 

- 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미 

- 정확성 : 중복이나 누락이 없는 상태

- 일관성 : 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태 

 


<데이터 무결성 제약조건의 종류와 개념>

 

1. 개체 무결성(Entity Intergrity)

기본키(Primary Key) 제약이라고도 하며, 테이블을 기본키를 지정하고 그에 따른 무결성 원칙을 지켜야 하는 조건

*기본키란? 

-테이블에서 데이터를 구별하기 위해 후뵠 중에서 선택된 고유한 식별자 키 

-기본키는 NULL 값이 올 수 없다. 

-테이블 내에 오직 하나의 기본키만을 가질 수 있다. 

 

2. 참조 무결성(Referential Intergrity)

외래키(Foreign Key) 제약이라고도 하며, 테이블 간의 참조 관계를 선언하는 제약조건

*외래키란?

-한 테이블의 키 중에서 다른 테이블의 기본키를 참조하여, 다른 테이블의 레코드를 유일하게 식별할 수 있는 키

-외래키의 값은 NULL 값이거나 참조하는 테이블의 기본키와 같은 값과 동일해야함

-외래키 속성은 참조할 수 없는 값을 지닐 수 없음

 

3. 도메인 무결성(Domain Intergrity)

테이블에 존재하는 필드의 무결성을 보장하기 위한 것

필드의 타입, Null값 허용 등에 대한 사항을 정의하고 올바른 데이터가 입력되었는지 확인하는 조건

*예 ) 속성값으로 Int(Number)값이 있는 필드에 문자열이 들어오는 경우 모데인의 무결성이 깨졌다고 볼 수 있다. 

 

4. Null무결성(Null Intergrity)

테이블의 특정 속성에 대한 각 레코드들이 갖는 값들이 서로 달라야하는 조건

 

5. 고유 무결성(Unique Intergrity)

테이블의 특정 속성에 대해 각 레코드들이 같는 값들이 서로 달라야하는 조건

 

6. 키무결성(Key Intergrity) 

하나의 테이블에는 적어도 하나의 키가 존재해야한다는 규정 

 


<무결정 제약조건의 장단점>

- 장점 : 스키마를 정의할때 일관성 조건을 한번만 명시하고, 데이터베이스가 갱신될때 응용프로그램들은 일관성 조건을 검사할 필요가 없다. 

 

- 단점 : 작업이 복잡해지고, 무결정 제약조건을 반복해서 구현해야하고, 무결성 제약조건들끼리 충돌이 일어날 수 있다.

728x90
반응형
LIST
728x90
SMALL

트랜잭션(Transaction)이란? 

-여러작업들을 하나로 묶은 단위

-한 덩어리의 작업들은 모두 실행되거나, 실행되지 않습니다. (all-or-nothing)


ACID란? 

-데이터의 유효성을 보장하기 위한, 트랜젝션의 특징들의 앞글자를 딴 단어

 

- Atomicity(원자성)

    중간 단계까지 실행되는 것이 아니라 처음부터 끝까지 완전하게 실행되며 중간에서 실패하는 일이 없도록 합니다.

    모든 작업이 반영되거나 모두 롤백되는 특성입니다.

- Consistency(일관성) 

    트랜잭션이 완료되면 언제나 일관된 DB 상태를 유지하는 것을 의미합니다.

    데이터는 미리 정의된 규칙에서만 수정이 가능하도록 합니다. 숫자 컬럼에 문자열값이 저장되는 것을 방지해줍니다.

- Isolation(고립성, 격리성) 

    다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미합니다.

    다시말해 다른 트랜잭션의 연산이 중간 단계의 데이터를 볼 수 없음을 의미합니다.

- Durability(영구성, 지속성)

    성공적인 트랜젝션은 영원히 반영(커밋, commit) 되어야 함을 의미합니다.


트랜잭션의 격리성(Transaction Isolation) 이란? 

- 실행중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근할 수 없다! 

 

<격리성으로 인해 나타날 수 있는 문제점>

 

Dirty Read

- 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것 

 

Non-Repeatable Read

- 한 트랜잭션 내에서 같은 Key를 가진 행을 두번 읽었는데 그 사이에 값이 변경되거나 삭제되어 결과가 다르게 나타나는 현상

 

Phantom Read

- 한 트랜잭션 내에서 같은 쿼리를 두번 수행했는데, 첫 번째 쿼리에서 없던 유령(Phantom) 레코드가 두번쨰 쿼리에서 나타나는 현상

Phatom Read  VS Non- Repeatable Read
여러개를 요청하는 것에 대해서 데이터 값이 변경되는 것   1개의 행의 데이터 값이 변경되는 것 

<격리성 수준(Transaction Isolation Level)>

병려 트랜잭션 시 특정 트랜잭션이 다른 트랜잭션에서 변경하는 데이터를 언제부터 볼 수 있는지 허용하는 수준을 의미한다. 

격리 수준 Dirty Read Non-Repeatable Read Phantom Read
Read Uncommitted O O O
Read Committed X O O
Repeatable Read X X O
Serializable X X X

Read Uncommitted

- 모든 트랜잭션은 다른 트랜잭션의 커밋 여부와 상관없이 변경되는 데이터를 확인 가능하다. 

- 데이터 정합성이 좋지 않은 격리 수준이므로 사용하지 않는다. 

- Diry Read, Non-Repeatable Read, Phantom Read 현상이 발생한다. 

 

Read Committed

- 각 트랜잭션은 다른 트랜잭션의 커밋 완료된 데이터만 확인 가능하다. 

- 주로 사용되는 격리 수준이다. 

- Non-Repeatable Read, Phantonm Read 현상이 발생한다. 

 

Repeatable Read

- 한 트랜잭션이 시작되면 다른 트랜잭션에서 커밋 데이터가 있더라도 확인되지 않는다. 

- 트랜잭션 별로 식별자를 주고 Undo 영역의 데이터를 백업해둠으로써 트랜잭션의 일관성을 보장한다. 

- Phantom Read 현상이 발생한다. 

 

Serializabl Read

- 가장 높은 수준의 격리수준이다. 

- 한 트랜잭션에서 사용하는 데이터는 다른 트랜잭션에서 사용 불가능하다.

- 격리 수준에 따른 문제는 발생하지 않지만, 동시성이 저하되는 문제가 발생한다. 

- 레코드 조회 : Shared Lock 획득시에만 조회 가능

- 레코드 수정 : Exclusive Lock 획득시에만 조회 가능 

 

 

728x90
반응형
LIST
728x90
SMALL

만든이 : 이혜린(LYNN)
SQL문의 종류들

DDL(Data Definition Language : 데이터 정의어) 

- 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 삭제할때 사용하는 언어

- 논리적 데이터 구조와 물리적 데이터 구조의 사상을 정의 

- 데이터 베이스 관리자나 데이터 베이스 설계자가 사용함 

*DDL 설명 : https://reframeurmind.tistory.com/4

 

 

DML(Data Manipulation Language : 데이터 조작어)

- 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는데 사용하는 언어

- 데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스를 제공

 

<SELECT>

* SELECT 문 실행 순서 

FROM - WHERE - GROUP BY - HAVING -SELECT - ORDER BY

쿼리문 설명
SELECT 컬럼명 FROM 테이블명; 해당 테이블에 속하는 컬럼의 데이터들을 검색
컬럼명에 * 일 경우 모든 컬럼들의 데이터들을 출력
SELECT 컬럼명 FROM 테이블명 WHERE 조건; 해당 테이블에 속하는 컬럼중 조건에 맞는 데이터들을 검색
SELECT 컬럼명 FROM 테이블명 WHERE 조건
ORDER BY 컬럼명 ASC 또는 DESC;  
해당 테이블에 속하는 컬럼 중 조건에 맞는 데이터들을 검색한 결과를 오른차순(ASC) 또는 DESC(내림차순)으로 정리 

<INSERT>

쿼리문 설명
INSERT INTO 테이블명(컬럼명1, 컬럼명2 ....) VALUES(값1, 값2..); 선택한 컬럼명에 해당 값들을 추가하는다. 
*단 컬럼수와 값의 갯수는 같아야 한다. 
INSERT INTO 테이블명 VALUES(값1, 값2...); 컬럼명없이 값만 적을 경우 모든 컬럼에 값을 입력한다는 뜻이기에 컬럼의 순서에 맞게 값을 적어야 한다. 

<UPDATE>

쿼리문 설명
UPDATE 테이블명 SET 컬럼명 = 새로운 컬럼값; 해당 테이블의 컬럼값 변경

<DELETE>

쿼리문 설명
DELETE FROM 테이블명 해당 테이블의 모든 데이타를 삭제
DELETE FROM 테이블명 WHERE 조건; 조건에 해당하는 데이터만 삭제

DELETE (DML)와  TRUNCATE(DDL)

-DELETE 는 롤백(ROLLBACK)이 가능

-TRUNCATE 는 롤백이 불가능, 속도가 빠름 

 

 

 

*DML 설명 : https://reframeurmind.tistory.com/5

 

DCL(Data Control Language : 데이터 제어어) 

- 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는데 사용되는 언어 

- 데이터베이스 관리자가 데이터관리를 목적으로 사용 

*DCL/TCL 설명 : https://reframeurmind.tistory.com/6

 

TCL(Transaction Control Language : 트랜잭션 제어어) 

- DCL 에서 트랜잭션을 제어하는 명령어


DUAL 테이블(Dual Table)

- DUAL 테이블은 데이터 딕셔너리와 함께 오라클에 의해 자동 생성되는 테이블

- DUAL 테이블은 사용자가 SYS의 스키마에 있지만 모든 사용자는 DUAL이라는 이름으로 엑세스 할 수 있다 

- DUAL 테이블 VARCHAR2(1)으로 정의된 DUMMY라는 하나의 열이 있으며 값을 가지는 하나의 행도 포함되어 있다. 

 

DUAL 테이블의 특성

- 사용자 SYS가 소유하며 모든 사용자가 엑세스 가능한 테이블 

- SELECT ~ FROM ~의 혀식을 갖추기 위한 일종의 DUMMY 테이블이다. 

- DUMMY 라는 문자열 유형의 칼럼에는 'X'라는 값이 들어있는 행을 1건 포함하고 있다. 

 

*함수나 현재 시간의 값 등 특정 테이블에서의 데이터가 아닌 사실데이터를 추출하기 위해서는 SELECT ~ FROM ~절에서 

FROM DUAL 의 형태로 구문을 작성해 사용한다. 

 


온리인에서 SQL 문을 시험해볼 수 있는 사이트 

: http://sqlfiddle.com/#!4/75ac2b

 

SQL Fiddle | A tool for easy online testing and sharing of database problems and their solutions.

Query Panel Use this panel to try to solve the problem with other SQL statements (SELECTs, etc...). Results will be displayed below. Share your queries by copying and pasting the URL that is generated after each run.

sqlfiddle.com

 

 

 

 

 

 

 

 

728x90
반응형
LIST
728x90
SMALL

<연산자> 

연산자는 주로 WHERE 절에 사용되며 연산자의 종류에 따라 우선순위가 발생한다. 

 

-산술 연산자 (+, -, * , /) : 0으로 나눌 수 없으며 '정수/정수 = 실수' 이다. 

 

- 비교 연산자

연산자 = <> > < >= <=
의미 같다 같지 않다 크다 작다 크거나 같다 작거나 같다

- 논리 연산자 : NOT, AND, OR

- LIKE 연산자 : 유사 문자열 검색

연산자 % _ #
의미 길이를 알 수 없는 문자 문자 한개 숫자 한개

<예시>

LIKE 'A%' -> A로 시작하는 모든 문자열

LIKE '%A' ->A로 끝나는 모든 문자열 

LIKE'%A%' ->A가 포함된 모든 문자열

 

LIKE '___A%' -> 3번째 글자가 A인 모든 문자열 ->결과 : BLAKE, CLARK, ADAMS

LIKE '__O__' -> 총 5글자이며 그 중 3번째 글자가 O인 문자열 ->결과 : SCOTT

 

- 연산자 우선순위 

종류 연산자 우선순위
산술 연산자 * , / ,+ , - *부터 우선 -이 제일 마지막
관계 연산자  = , <>, > ,< ,>= ,<= 모두 같음
논리 연산자 NOT, AND, OR NOT이 우선 OR 이 마지막

* 산술 > 관계 > 논리 연산자 순으로 연산자 우선순위가 정해짐

 

+ 플러스 !

-IN : 포함된 데이터를 가지고 올때 

WHERE DEPTNO = 10 OR DEPTNO =20 OR DEPTNO =30; 

아래와 위의 값은 같다. 

WHERE DEPTNO IN (10, 20, 30)

OR 가 여러개일때 IN 을 사용하면 유용하다. 

 

- BETWEEN ~ AND : 범위, 기간

SELECT * FROM EMP WHERE EMPNO BETWEEN 7000 AND 8000; 

사원 번호(EMPNO가 7000에서 8000사이에 있는 직원들의 정보를 전부 조회 

 

상기 두개의 연산자는 'NOT'과도 같이 쓰인다. 

 

- Null의 연산 

Null값을 가진 필드의 연산은 무조건 Null 값이 된다. 

예) SELECT CAL1 + CAL2 FROM TABLE1;  

CAL1 CAL2
30 20
null 40
50 null

이라면은 값은 50, null, null 이 된다. 첫번째 행은 숫자끼리의 연산이기에 그대로 더하기를 해주면 되지만, 나머지 행의 경우 Null값이 포함되어있기에 결과값은 null이다. 

다만, SUM()같은 집계함수에서는 Null은 값이 없는 것으로 처리되어서 영향을 주지 않는다. 


내장함수(Stored Function) 란? 

* SQL 함수라고도 한다. 

장함수란 DBMS에서 제공하는 함수로 특정 값이나 열의 값을 입력 받아서 계산하여 결과값을 보여준다. 

- 단일 행 함수(Single Row Function): 문자형, 숫자형, 날짜형, 변환형

- 다중 행 함수(Multi Row Function): 그룹 함수

- 사용될 수 있는 위치 : SELECT 절, WHERE 절, START WITH 절, HAVING 절, INSERT문의 INTO절, UPDATE문의 SET 절

- 1:M 의  조인이라 하더라도 M쪽에서 출력된 행이 하나의 단일행 함수의 입력값으로 사용 가능

- 다중행 함수도 단일행 함수와 동일하게 단일 값만 반환함

 

*여러 함수를 겹쳐서 사용 가능

종류 내용 함수의 예
문자형 함수 문자를 입력하면 문자나 숫자 값을 반환한다. LOWER, UPPER, SUBSTR, LENGTH, LTRIM,RTRIM,TRIM,ASCII
숫자형 함수 숫자를 입력하면 숫자값을 반환한다.  ABS, MOD, ROUND, TRUNC, SIGN, CHR, CEIL, FLOOR, EXP, LOG, LN, POWER, SIN, COS, TAN
날짜형 함수 DATE 타입의 값을 연산한다. SYSDATE, EXTRACT, TO_NUMBER(TO_CHAR(d,"YYYY"|"MM"|"DD")
변환형 함수 문자, 숫자, 날짜형 값의 데이터 타임을 변환한다.  TO_NUMBER, TO_CHAR, TO_DATE
Null관련 함수 Null을 처리하기 위한 함수 NVL, NULLIF, COALESCE

 

 

<그룹함수(GROUP FUNCTION)> 

하나 이상의 행을 그룹으로 묶어 연산하여 총합, 평균 등 하나의 결과로 나타낸다. 

NULL을 제외하고 계산한다. 

 

종류 설명 예시
SUM 해당 컬럼 값들에 대한 총합을 구한다.  SELECT SUM (칼럼명) FROM 테이블명;
AVG 해당 컬럼 값들에 대한 평균을 구한다.  SELECT AVG (칼럼명) FROM 테이블명;
MAX / MIN MAX 는 해당 컬럼 값들에 대한 최대값
MIN 은 최솟값을 구한다. 
SELECT MAX (칼럼명), MIN (칼럼명)
FROM 테이블명 ;
COUNT 테이블에서 조건을 만족하는 행(ROW)의 개수를 반환한다.  SELECT COUNT(*), COUNT(컬럼명) FROM 테이블명;
->* 은 해당 테이블의 모든 행의 수를 반환
-> 칼럼명을 넣으면 칼럼에 값이 있는 행의 수를 반환

SELECT COUNT(DISTINCT 칼럼명) FROM 테이블명;
-> 해당 칼럼에서 중복을 제거한 갯수를 구한다. 
GROUP BY 어떤 컬럼 값을 기준으로 그룹 함수를 적용한다.  GROUP BY (칼럼명)
-> 해당 칼럼에 해당하는 값에 따라 그룹화 된다.
HAVING SELECT 문에서 조건을 구할때 WHERE절을 사용하는데 그룹 함수를 이용할때의 조건문으로 HAVING 을 사용한다. 
*그룹함수에 대한 조건이므로 GROUP BY 와 함께 사용한다. 
HAVING 조건절

 

GROUP BY 예시! 
SELECT DEPTNO(부서번호), MAX(SAL), MIN(SAL)

FROM EMP(테이블명)

GROUP BY DEPTNO; 

->부서별 최대/최소 월급을 구하기 위해서는 위와 같이 GROUP BY 를 통해 그룹별로 묶어서 사용 할 수 있다. 

 

HAVING 예시!

SELECT DEPTNO(부서번호), MAX(SAL), MIN(SAL)

FROM EMP(테이블명)

GROUP BY DEPTNO;

HAVING MAX(SAL) > 2000; 

->부서별 월급의 최소값과 최대값을 구하는데 최대 월급이 2000보다 클 경우에만 표시한다. 


 

<윈도우함수(WINDOW FUNCTION)>

분석함수 또는 순위 함수로도 알려져있으며 GROUP BY 절을 사용하지 않고 속성의 값을 집계할 수 있는 함수를 말한다. 

다른 함수들 처럼 중첩해 사용할 수 없지만 서브쿼리에서 사용이 가능하다. 

구분 함수 비고
순위 함수 RANK, DENSE_RANK, ROW_NUMBER  
일반 집계 함수 SUM, MAX, MIN, AVG, COUNT SQL서버에서는 OVER 절 내에서 
ORDER BY 지원하지 않음
그룹 내 행 순서 함수 FIRST_VALUE, LAST_VALUE, LAG, LEAD SQL서버에서는 지원하지 않음
그룹 내 비율 함수 RATIO_TO_REPROT, PERCENT_RANK, CUME_DIST, NTILE NTLIE 제외 SQL 서버에서는 지원하지 않음

출처 : https://for-my-wealthy-life.tistory.com/48

728x90
반응형
LIST
728x90
SMALL

 DCL(데이터 제어어 : Data Control Language) 란? 

- 데이터베이스에 권한을 부여하는 언어 

* 데이터베이스 테이블에 직접적인 영향을 미치기 때문에 DCL 을 입력하는 순간 명령어에 해당하는 작업이 즉시 (AUTO COMMIT)된다. 

 

종류 설명
GRANT 데이터베이스에 대한 사용자의 액세스(접근)권한을 제공
(특정 사용자만 특정작업을 할 수 있도록 지정 가능)
REVOKE GRANT명령으로 주어진 접근 권한을 철회

<예시>

GRANT 

GRANT 권한 종류 ON 대상 TO 계정명 IDENTIFIED BY 암호 [WITH GRANT OPTION];

 

-- 모든 권한을 가진 계정 생성

GRANT ALL ON *.* to root2 IDENTIFIED by 1234; 

--특정 데이터베이스에 조회권한을 가진 계정 생성

GRANT SELECT ON test.*(권한 종류) TO root3 IDENTIFIED BY 12345; 

-- GRANT로 계정생성 후 아래의 명령어를 실행해야 적용된다. 

FLUSH privileges;

 

REVOKE

-- 권한 해제 명령어

REVOKE insert, update, create ON [DB명.테이블명] TO [계정명];

--전체 권한 해제 명렁어

REVOKE ALL ON [DB명.테이블명] TO [계정명];


 

TCL(트랜젝션 제어어 : Transaction Control Language)란? 

- 데이터의 보안, 무결성, 회복, 병행, 수행제어 등을 정의하는데 사용 

 

종류  설명
COMMIT 트랜젝션의 작업 결과를 저장 및 반영
ROLLBACK 마지막 COMMIT된 시점의 상태로 복원
SAVEPOINT 저장점(SAVEPOINT)를 지정하면 롤백할때 트랜젝션이 포함된 전제 작업을 롤백하는 것이 아닌 현 시점에서 저장점까지의 일부 트랜젝션만 롤백
SET 
TRANSACTION
TRANSACTION 지정

 

728x90
반응형
LIST

+ Recent posts