반응형

MS-SQL, ORACLE, MYSQL등 우리는 전부 RDBMS를 사용합니다.

RDBMS에서 R은 Relational을 의미하는데요, 모든 테이블이 그런것은 아니지만

몇몇의 테이블들은 서로 관계를 가지고 있습니다.

 

우리는 이렇게 관계를 가지고 있는 테이블들 사이에서 합집합, 교집합, 차집합을 구할 수 있는데요.

UNION 

두개의 SELECT결과를 합칠 수 있습니다.

합치는 과정에서 중복은 제거가 됩니다.

 

SQL문 

1
2
3
4
5
SELECT playerID
FROM players
UNION
SELECT playerID
FROM salary

이렇게 사용이 가능하며 2가지 주의사항이 있습니다.

 

1. 2개의 SELECT구문의 컬럼의 개수가 같아야 합니다.

2. 각 컬럼의 데이터 타입이 같아야 합니다.

 

 

 

각각의 구문의 교집합이 필요하거나 차집합이 필요하다면 UNION 자리에 대신

INTERSECT (교집합)

EXCEPT (차집합)

을 작성하여 SQL문을 실행시킬 수 있습니다.

반응형
반응형

데이터베이스 정규화?

데이터베이스에는 정규화 이론이라는 DB설계 이론이 있습니다.

정규화 이론은 RDB (Relational Database)를 효율적으로 잘 다루는데에 있어서 꼭 필요하며

관계형 모델을전제로 구축된 DB설계 이론입니다.

2020/08/27 - [DB] - [DBMS] RDBMS와 DBMS의 차이점 / SQL이란?

 

[DBMS] RDBMS와 DBMS의 차이점 / SQL이란?

DBMS와 RDBMS의 개념 우리는 DBMS가 무엇인지 알고있습니다. 그렇다면 RDBMS는 무엇일까요? Relational Database Managenent System으로 쉽게 생각해 테이블 기반의 DBMS라고 생각하면 됩니다. DBMS와 RDBMS의 차..

runcoding.tistory.com

 

예를들어 RPG게임을 바탕으로 설명을 드리도록 할게요.

PlayerID name class level inventory
321331 런코딩 암살자 132 부패의 물약*5 , 처형인의 대검 , 무한의 대검, 천갑옷, 신속의 장화
321332 런코딩 부캐 사제 77 불타는 향로, 미카엘의 도가니, 부패의 물약*3, 구원

RPG게임에 일부분이라고 가정해봅시다. 이렇게 인벤토리라는 컬럼을 만들고 그 안에 모든 아이템을 때려박는다면

어떨까요?

 

위 테이블처럼 인벤토리에 모든 보유 아이템을 1개의 컬럼에 때려박는다면, 그리고 그러한 플레이어들이 100만 명 가까이 있다면, 우리는 playerID를 통해 해당 ROW를 찾고 그 ROW안에서 Inventory컬럼안에 있는 내용들을 전부다 

스트링으로 받아온 뒤, ,(쉼표) 를 통하여 아이템들을 나누고  등등 해야할 일들이 정말 많을것 입니다.

상당히 비효율적이게 되는것이죠.

 

우리는 정규화를 기준으로 이를 어떻게 바꿀 수 있을까요?

1차원 적으로 생각해본다면

PlayerID name class level Itemcode itemname itemcount
321331 런코딩 암살자 132 13 부패의 물약 5
321331 런코딩 암살자 132 17 처형인의 대검  1
321331 런코딩 암살자 132 21 무한의 대검 1
321331 런코딩 암살자 132 24 천갑옷 1
321331 런코딩 암살자 132 26 신속의 장화 1
321332 런코딩 부캐 사제 77 31 불타는 향로 1
321332 런코딩 부캐 사제 77 11 미카엘의 도가니 1
321332 런코딩 부캐 사제 77 13 부패의 물약 3
321332 런코딩 부캐 사제 77 66 구원 1

이런식으로 바꿀 수 있습니다.

근데 이렇게 모든 아이템들을 따로 나누고 나니.. 중복된 데이터들이 상당히 많습니다.

PlayerID부터 level까지 여러개의 레코드들이 중복됩니다.

이를 해소하기 위해서는 테이블을 여러개로 나누고 각각 primary key와 foreign key를 활용해서 관계형 데이터베이스를 작성할 수 있습니다.

PlayerID name class level
321331 런코딩  암살자 132
321332 런코딩 부캐 사제 77
PlayerID Itemcode itemcount
321331 13 5
321331 17 1
321331 21 1
321331 24 1
321331 26 1
321332 31 1
321332 11 1
321332 13 3
321332 66 1
itemcode itemname
13 부패의 물약
17 처형인의 대검 
21 무한의 대검
24 천갑옷
26 신속의장화
31 불타는향로
11 미카엘의 도가니
66 구원

이렇게 3개의 테이블로나누게되면 비로소 RDB를 효율적으로 잘 다룰 수 있게 되는것 입니다.

 

반응형
반응형

Constraint란?

테이블 생성 시에 Constraint, 즉 제약조건을 사용해서 입력하는 자료에 대해 제약을 정해줄 수 있습니다.

이때 정해진 제약에 따라서 데이터가 입력되는데 , 제약에 맞지 않다면 자료 입력이 거부되면서 오류가 납니다.

RDMBS에서는 데이터의 무결성을 위해 5가지 제약조건을 제공하고 있습니다.

NOT NULL 값이 NULL이 아닌값을 의미합니다.
UNIQUE 유일한 값으로 존재해야한다는 것을 의미합니다.
PRIMARY KEY NOT NULL과 UNIQUE를 합친것으로, 테이블에서 대표되는 컬럼을 의미합니다.
FOREIGN KEY '참조하는 테이블에서 존재하는 값만 사용 가능'을 의미합니다.
CHECK 주어진 조건에 해당하는 값만 입력가능을 의미합니다.

 

 

NOT NULL

특정 컬럼의 값이 반듯이 입력되어야 한다고 지정하는 것입니다.
NOT NULL은 테이블에 데이터를 INSERT 할 때 값이 없어서는 안 되는 부분입니다.
NOT NULL이기 때문에 NULL값도 들어갈 수 없습니다.

UNIQUE

특정 칼럼의 값이 중복되지 않도록 하는 것입니다.
UNIQUE는 해당 테이블에 있어서 존재하는 값이 유일해야 합니다.
만약 INSERT, UPDATE시에 동일한 데이터를 집어넣으려 한다면 오류가 납니다.
하지만 NULL값에 대해서는 제약이 적용되지 않기 때문에 여러 개의 NULL값을 넣을 수 있습니다.

PRIMARY KEY

NOT NULL과 UNIQUE 제약조건을 합친 제약조건입니다.
한 개의 테이블에 한 칼럼만 생성이 가능하며, NULL값이 있으면 안 되고 해당 칼럼의 데이터는 중복되면 안 됩니다.
PRIMARY KEY는 하나의 테이블에 있는 데이터들을 식별하기 위한 기준으로 인식되는 제약조건입니다.

FOREIGN KEY

해당 칼럼에 참조하는 테이블로부터 존재하는 값들만 사용한다는 의미의 제약조건입니다.
만약에 참조하는 테이블에 해당하는 값이 없을 때에는 INSERT, UPDATE시에 오류를 발생시킵니다.
외래 키(FOREIGN KEY)로 두 테이블이 부모 자식 테이블로 관계를 맺고 있을 시에는
자식 테이블이 참조하는 데이터는 부모 테이블에서 삭제가 불가능합니다.

CHECK

조건에 부합하는 데이터만 입력이 가능하도록 하는 제약 조건입니다.
조건에는 기본 연산자나 비교 연산자 등이 사용 가능합니다.

반응형
반응형

INDEX란?

RDBMS에서 검색 속도를 높이기 위한 데이터베이스 객체입니다.

INDEX는 색인입니다. 특정 TABLE의 칼럼을 색인화 하여 검색할 때 TABLE의 레코드를 전부 다 확인하는 것이 아니라

색인화 되어있는 INDEX파일을 검색하여 검색 속도를 빠르게 합니다.

 

 

INDEX 사용 이유는?

SQL 서버에서 테이블을 만들고 데이터를 추가, 수정 , 삭제할 때 데이터의 레코드는 내부적으로 아무런 순서 없이 저장이 됩니다. 데이터 저장 영역에서는 인덱스가 없는 테이블의 데이터를 찾을 때 무조건 전체 데이터 베이스를 처음부터 끝까지 다 읽어서 검색조건에 맞게 찾게됩니다. 이런 식의 검색 방법을 Full Scan이라고 하는데, 양이 엄청나게 많은 테이블에서 데이터를 불러올 때 Full Scan을 하게 되면 처리 성능이 떨어집니다. 

고로 Index는 데이터를 검색할 때 빠르게 찾기 위해 사용된다.

 

INDEX의 장단점

장점 - 

  • 무조건은 아니지만 검색 속도를 향상할 수 있습니다.
    • 인덱스를 생성 시에는 where절과 join, order by 등과 관련된 칼럼 중 사용빈도가 높고 키값의 선별도가 좋은 칼럼에 사용해야 합니다. 반대로 사용빈도가 낮고 칼럼의 선별도가 좋지 않은 (값이 True /False 같은 것들) 칼럼의 경우에는 인덱스를 사용하지 않는 것이 좋습니다
    • 테이블이 작거나 자주 갱신이 필요한 칼럼들에도 사용하지 않는 것이 좋습니다.

단점 - 

  • DB의 10% 정도의 공간이 요구됩니다.
  • 인덱스를 생성하는 시간이 크게 요구됩니다.
  • DB의 변경 작업이 잦으면 성능이 저하됩니다.
반응형
반응형

데이터베이스 트리거

트리거 ( Trigger )는 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미합니다.

트리거는 DML의 데이터 상태 관리를 자동화하는 데 사용됩니다.

EX ) 데이터의 입력, 수정, 삭제 되었을때의 로그를 기록하기 위한 처리, 데이터의 무결성을 검사 등등

 

간단하게 야구선수에 관련된 정보를 담는 Table이 있다고 가정했을 때

A라는 선수는 AA라는 팀에 소속되어 있다가 BB라는 팀으로 이전을 하게 되었습니다.

우리는 A라는 선수의 팀을 BB로 바꿔야 하는데 AA라는 팀에 있었다는 이력도 가지고 있어야 한다면,

A가 BB팀으로 이전했다는 것을 UPDATE 해야 하고 또 기존에 AA라는 팀에 있었다는 것을 INSERT 해야 하는데

이걸 TABLE에 트리거를 걸어둔다면 INSERT부분이 자동으로 실행되는 것입니다.

 

 

 

트리거의 장점

  • 데이터 무결성의 강화 (참조 무결성)
  • 업무처리 자동화
    • 트리거를 사용하면 트랜잭션에 의해 자동으로 다른 명령을 일으킴으로써 업무처리를 자동화할 수 있습니다.
    • 중간에 사용자가 개입하지 않고 구현된 규칙대로 알아서 실행된다는 것입니다.

트리거의 단점

  • 트리거를 과도하게 사용한다면 복잡한 상호 의존성을 야기할 수 있습니다. 
    • 예를 들어 하나의 트리거가 활성화되어 이 트리거 내의 SQL문이 수행되고, 그 결과로 인하여 다른 트리거가 활성화되어 그 트리거의 SQL문이 수행될 수 있습니다.( 트리거의 연쇄 )
반응형

'DB' 카테고리의 다른 글

[DB] SQL Constraint란?  (0) 2020.09.02
[DB] Index의 의미와 장단점  (0) 2020.09.02
[DB] Procedure 프로시저 개요 및 장단점  (1) 2020.09.01
[DB] DBMS란 무엇일까요?  (0) 2020.08.27
[DBMS] RDBMS와 DBMS의 차이점 / SQL이란?  (0) 2020.08.27
반응형

저장 프로시저 (Stored Procedure)

프로시저란 SQL Server에서 제공하는 프로그래밍 기능입니다.

쿼리문을 마치 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도로 사용됩니다.

여러 개의 칼럼을 조회하고 여러 개의 테이블을 조인하고 거기에 조건까지 넣어줌으로써 하나의 쿼리를 만드는데

엄청나게 긴 쿼리문이 생기게 됩니다.

이러한 여러개의 쿼리를 사용할 때마다 긴 쿼리문을 써야 한다면 엄청나게 불편할 텐데 이를 프로시저에 저장하고

저장된 프로시저를 호출하여 프로그래밍을 하는것이 훨씬 효율적입니다.

 

 

 

저장 프로시저의 장점

저장 프로시저를 사용하게되면 여러 가지 장점들이 있습니다.

  1.  하나의 요청으로 여러 SQL문을 실행 할 수 있습니다.
  2. 네트워크 소요 시간을 줄일 수 있습니다.
    • 만약 동일한 쿼리를 1000번 2000번 호출하는 것보다 SP를 이용해서 구현한다면 SP를 호출할 때 한 번만 네트워크를 경유하기 때문에 네트워크 소요시간을 줄이고 성능을 개선할 수 있습니다.
  3. 개발 업무를 구분해 개발 할 수 있습니다.
    • 순수한 애플리케이션만 개발하는 조직과 DBMS 관련 코드를 개발하는 조직이 따로 있다면, DBMS 개발하는 조직에서는 데이터베이스 관련 처리하는 SP를 만들어 API처럼 제공하고 애플리케이션 개발자는 SP를 호출해서 사용하는 형식으로 역할을 구분하여 개발이 가능합니다.

 

저장 프로시저의 단점

저장 프로시저의 장점에 대해 알아보았다면 이제 단점에 대해서도 알아볼 필요가 있습니다.

  1. 처리 성능이 낮습니다.
    • 문자나 숫자 연산에 저장 프로시저를 사용한다면 오히려 C나 JAVA보다 느린 성능을 보여줍니다.
  2. 디버깅이 어렵습니다.
  3. DB 확장이 매우 힘듭니다.
    • 서비스 사용자가 많아져 서버수를 늘려야할 때, DB 수를 늘리는 것이 더 어렵습니다.
      • 서비스 확장을 위해 서버수를 늘릴경우 DB 수를 늘리는 것보다 WAS의 수를 늘리는 것이 더 효율적이기 때문에 대부분의 개발에서 DB에는 최소의 부담만 주고 대부분의 로직은 WAS에서 처리할 수 있게 합니다.

 

반응형

'DB' 카테고리의 다른 글

[DB] SQL Constraint란?  (0) 2020.09.02
[DB] Index의 의미와 장단점  (0) 2020.09.02
[DB] Trigger 트리거 개요 및 장단점  (0) 2020.09.01
[DB] DBMS란 무엇일까요?  (0) 2020.08.27
[DBMS] RDBMS와 DBMS의 차이점 / SQL이란?  (0) 2020.08.27
반응형

 

1. DBMS?

DBMS를 알기 전에 우리는 DB가 무엇인지 정확히 알아야 할 필요가 있습니다.

DB - DataBase

데이터베이스는 여러 응용 시스템들의 통합된 정보를 저장하여 운영할 수 있는 공용 데이터들의 묶음입니다.
서로 연관된 여러 가지의 자료의 모음으로 그 내용을 구조화하여 검색과 갱신에 효율성을 높인 것입니다.


더보기

DB특징

데이터베이스의 특징은 다음과 같습니다.

  • 실시간으로 접근이 가능합니다. 정적인 데이터에 대하여 실시간으로 응답이 가능해야 합니다.
  • 지속적인 변화가 가능합니다. 데이터를 CRUD(create, read,update, delete)를 통해 항상 최신의 데이터를 유지할 수 있습니다.
  • 동시에 공유할 수 있습니다. 다수의 사용자가 동시에 같은 내용의 데이터를 확인할 수 있어야합니다.
  • 내용에 의해 참조할 수 있습니다. 데이터들을 주소나 위치에 의해서가 아닌, 사용자가 필요로하는 데이터의 내용으로 찾을 수 있습니다.

 

그렇다면 DBMS는 무엇일까요?

DBMS - Database Management System, 즉 다수의 사용자들이 데이터베이스 내의 데이터에게 접근, 사용할 수 있도록 해주는 소프트웨어를 말합니다.

 

 

DBMS의 장점 / 단점

DBMS의 장점

1. 데이터 베이스 내 중복을 최소화할 수 있습니다. 다만 데이터 중복을 최소화할 수 있지 완전히 허용하지 않는 것은 아닙니다.
2. 같은 내용의 데이터를 여러 가지 구조로 지원해 줄 수 있는 DBMS의 정교한 기법 덕분에 데이터베이스의 공용이 가능합니다.
3. 데이터베이스가 접근 처리될 때마다 제어 기능을 통해 그 유효성을 검사하기 때문에 데이터 무결성을 유지할 수 있습니다.
4. DBMS는 정당한 사용자, 허용된 데이터와 연산 등을 확인하고 검사하기 때문에 모든 데이터에 대해 철저한 보안 유지를 보장해 줄 수 있습니다.

DBMS의 단점

1. DBMS는 고가의 제품이고 컴퓨터 시스템의 자원을 많이 사용합니다. 메모리 용량이 더 필요하게 되고, 더 빠른 CPU를 요구합니다.
2. 특정한 목적을 가지는 응용 시스템은 설계 시간이 길어지고 보다 전문적인 인원이 필요합니다.
3. DBMS는 통합된 시스템이기 때문에 일부가 장애를 일으킨다면 전체 시스템을 정지시켜 시스템 신뢰성과 가용성을 저해할 수 있습니다.

 

 

DBMS의 종류

대표적인 RDBMS는 Oracle, MySQL, MS-SQL 등이 있습니다.

오라클에서 만들어 판매 중인 상업용 RDBMS입니다. 주로 대기업에서 사용하며 글로벌 DB 시장에서 점유율 1위를 하고 있습니다.

2020/08/24 - [데이타베이스] - [데이터베이스] RDBMS와 DBMS의 차이점 그리고 SQL

 

현재는 오라클에 흡수 합병되어있습니다. 

몇 년 전만 해도 오픈소스로 이루어져 있던 무료 프로그램이지만 합병 이후 

판매 중인 상업용 데이터베이스가 되었습니다.

 

마이크로소프트사에서 개발한 상업용 RDBMS입니다. 

다른 운영체제에서 사용이 불가능한 것은 아니지만 Windows에 특화되어있습니다.

 

 

반응형
반응형

DBMS와 RDBMS의 개념

우리는 DBMS가 무엇인지 알고있습니다. 

그렇다면 RDBMS는 무엇일까요?

Relational Database Managenent System으로 쉽게 생각해 테이블 기반의 DBMS라고 생각하면 됩니다.

 

 

 

DBMS와 RDBMS의 차이점

DBMS RDBMS
DBMS는 데이터를 파일로 저장합니다. RDBMS는 데이터를 테이블형식으로 저장합니다.
DBMS에서 데이터는 일반적으로 계층적 형식 또는 탐색 형식으로 저장됩니다. RDBMS에서 테이블들은 primary key라는 식별자가 있으며
데이터의 값들은 테이블 형식으로 저장됩니다.
DBMS에는 표준화라는것이 없습니다. RDBMS는 표준화 되어있습니다.
DBMS는 데이터보관에 있어 어떠한 보안도 제공하지 않습니다. RDBMS는 ACID를위한 무결성 제약을 정의합니다.
( A - Atomocity 원자성
  C - Consistency 일관성
   I - Isolation 고립성
  D - Durability  지속성 )
ACID에 관련해서는 테이블 밑에 더보기를 눌러주세요.
DBMS는 데이터를 저장하기 위해 파일 시스템을 사용하고, 그렇기때문에 테이블간의 관계가 없습니다. RDBMS시스템은 저장된 데이터에 접근하기 위해 데이터의 테이블 형식 구조를 지원합니다.
DBMS는 적은 데이터를 처리하기에 좋습니다. RDBMS는 많은 데이터를 처리하기 좋습니다.
DBMS를 예로들면 XML등이 있습니다. RDBMS를 예로들면 mysql, oracle, sql server등이 있습니다.

 

더보기

ACID

ACID는 데이터베이스관리시스템, 또는 유사한 시스템에서 상호작용이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어입니다.


 

 

SQL이란?

SQL은 Structured Query Language 의 약자로 관계형 데이터베이스 관리시스템의 데이터를 관리하기 위해 설계된 프로그래밍 언어입니다.

많은 수의 RDMBS들이 SQL을 표준으로 채택하고 있어, 각각의 RDBMS마다 조금씩의 문법만 다르고 

유사한 부분이 상당히 많습니다.

 

SQL구문은 크게 3가지로 나뉩니다.

 

  • DDL (데이터 정의 언어)
  • DML (데이터 조작 언어)
  • DCL (데이터 제어 언어)

 

 

Data Definition Language (데이터 정의 언어) 

SQL의 DDL문장은 관계형 데이터베이스의 구조를 정의합니다.

DDL의 구문으로는 
● Create
● Drop
● Alter
● Truncate  등이 있습니다.


Data Manipulation Language (데이터 조작 언어) 

SQL의 DML문장은 관계형 데이터베이스에 대해 검색, 업데이트 등 데이터 조작을 위해 사용됩니다.

DML의 종류로써는 
● Select
● Insert
● Update
● Delete  등이 있습니다.


Data Control Language (데이터 제어 언어) 

SQL의 DCL문장은 데이터베이스에서 데이터에 대한 접근을 제어하기위한 데이터베이스 언어입니다.

DCL의 구문으로는 
● Grant
● revoke 등이 있습니다.

반응형

'DB' 카테고리의 다른 글

[DB] SQL Constraint란?  (0) 2020.09.02
[DB] Index의 의미와 장단점  (0) 2020.09.02
[DB] Trigger 트리거 개요 및 장단점  (0) 2020.09.01
[DB] Procedure 프로시저 개요 및 장단점  (1) 2020.09.01
[DB] DBMS란 무엇일까요?  (0) 2020.08.27

+ Recent posts