no image
[MYSQL]효율적인 트래픽 분산을 위한 Master/Slave 동적 라우팅
사용자가 지속적으로 증가하면 많은 양의 트래픽이 발생한다. 그러므로 하나의 DB서버로 쓰기와 읽기 작업이 모두 진행된다면 쉽게 DB서버에 부하가 발생할 수 있다. 이 문제에 대한 해결책으로 Master Server 이외에도 추가적으로 Replication된 Slave Server를 두고 읽기 작업(read_only)은 Slave Server로 향하게 함으로서 트래픽이 분산되어 DB서버의 부하를 막을수 있다. 또한 Master Server로 단일 서버일 때 부하로 인해 MYSQL서버가 죽어 서비스를 중단시키는 문제를 사전에 방지할 수 있다. 우선 MYSQL Replication에 대해서 먼저 알아보자 ➡️MYSQL Replication MYSQL Replication은 2대 이상의 MYSQL 서버가 동일한..
2021.10.24
no image
[DB]트랜잭션(transaction)
➡️트랜잭션 트랜잭션은 DBMS가 데이터베이스를 다룰 때 사용하는 작업의 단위이다. 트랜잭션은 데이터베이스의 무결성을 유지하기 위해 원자성, 고립성, 지속성의 성질을 갖는다.DBMS는 트랜잭션이 이러한 성질을 유지할 수 있도록 지원한다. 데이터베이스에서 데이터를 다룰 때 장애가 일어나는경우에 데이터를 복구하는 작업의 단위가 된다. 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때 서로 분리하는 단위가 된다. ➡️트랜잭션의 수행 과정 아래와 같은 트랜잭션의 수행 과정은 2가지 방법으로 나눠진다. 방법 1 : 1 - 2 - 3 - 4 - Commit - 5 - 6 방법 2 : 1 - 2 - 3 - 4 - 5 - 6 - Commit +@Commit은 트랜잭션의 수행이 완료가 된것을 트랜잭션 관리자에게..
2021.09.14
no image
[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency)
👉이상현상(Anomly) 삭제 이상 : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상이다. 삽입 이상 : 튜플 삽입 시 특정 속성에 해당하는 값어 Null값을 입력해야 하는 현상이다. 수정 이상 : 튜플 수정 시 중복된 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상이다. 아래 사진에서 장미란이라는 학생 정보를 지울결루 강의실 103도 같이 사라진다.이 현상이 삭제 이상이다. 박지성 학생과 김연아 학생 같은 수업을 110호에서 수강을 한다. 그런데 두 강의는 독립적으로 입력된 데이터이기 때문에 박지성 학생에서 강의실을 201호로 변경하여도 김연아 학생은 110호로 데이터가 그대로 유지되고, 같은 데이터베이스 수업임에도 불구하고 강의실이 달라지는 현상이 발생한다.이 현상이 수정 이..
2021.09.13
no image
[DB] 정규화(Normalization)
📁정규화(Normalization) 정규화는 테이블 간에 중복을 허용하지 않는다는 목표를 가지고 있다. 중복된 데이터를 허용하지 않으므로써 무결성을 유지할 수 있고, 데이터 베이스 용량 또한 줄일수 있다. 테이블이 어떻게 분리되는지에 따라 정규형 단계가 달라진다. 📁제 1 정규형 제 1 정규형은 릴레이션의 모든 속성 값이 원자값을 가지는 경우이다. 아래 그림처럼 추신수 선수의 취미가 (영화,음악)으로 원자값이 아니다.속성 값이 원자 값이 아닐 경우 원자 값을 갖도록 변환 해주어야한다. 고객취미들(이름,취미들) 릴레이션을 고객취미(이름,취미)릴레이션으로 바꾸어 저장하면 제 1 정규형에 만족한다. 📁제 2 정규형 제 2 정규형은 릴레이션이 제 1 정규형을 만족하고, 기본키가 아닌 속성이 키본키에 완전 함수 ..
2021.09.11
no image
[MYSQL]SQL_1
➡️SQL 기본 -SQL은 관계형 데이터 베이스에 표준 언어이다. -SQL은 기능에 따라 데이터 정의어(DDL),데이터 조작어(DML),데이터 제어어(DCL)로 나뉜다. 데이터 정의어 : 테이블이나 관계의 구조를 생성하는 데 사용하며 CREATE,ALTER,DROP 문 등이 있다. 데이터 조작어 : 테이블에 데이터를 검색,삽입,수정,삭제하는 데 사용하며 SELECT,INSERT,DELETE,UPDATE 문 등이 있다. 여기서 SELECT 문은 질의어라고 부른다. 데이터 제어어 : 데이터의 사용 권한을 관리하는 데 사용하며 GRANT,REVOKE 문 등이 있다. ➡️데이터 조작어 -검색 -SQL에서 SELETE 문은 데이터를 검색하는 기본 문장으로, 특별히 질의어라고 부른다. -SELECT 문은 검색한 결..
2021.08.21
no image
Redis란?
➡️Redis를 이해할려면 NOSQL에 대해서 알아야 한다. 👉NOSQL(Not Only SQL)이란? RDBMS를 관계형 데이터베이스라고 부르는 반면 NOSQL은 비관계형 데이터 베이스이다. 보통 NOSQL은 KEY-VALUE나 컬러,문서 형태의 데이터 모델을 이용한다. 관계형 데이터베이스가 아닌 다른 형태로 데이터를 저장하는 기술이라고 생각하면 좀 이해가 된다. 👉NOSQL을 언제 쓰는가? 아주 많은 양의 데이터를 효율적으로 처리가 필요할 때, 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성이 필요할 때 사용한다. 특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 형태의 구조이기 때문에 사용한다. 💻Redis란? REDIS(REmote Dictionary Server)는 메모리..
2021.08.16
no image
데이터 베이스 시스템 개념
데이터베이스 데이터베이스는 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것이다. 데이터베이스 시스템 데이터베이스 시스템은 데이터의 검색과 변경을 주로 한다. 변경이란 시간에 따라 변하는 데이터 값을 데이터베이스에 반영하기 위해 수행하는 삽입(insert),삭제(delete),수정(update) 등의 작업을 말한다. 검색과 변경의 빈도에 따라 시스템 구축의 난이도가 결정된다. 데이터 베이스 시스템 개념 및 특징 개념 1.통합된 데이터(integrated data) 여러 곳에서 사용하던 데이터를 통합하여 하나로 저장한 데이터를 의미한다. 통합 시 중요한 점은 각각 사용하던 데이터의 중복을 최소화함으로써 중복 저장으로 인한 데이터 불일치 현상을 없애는 것이다. 2. ..
2021.07.20
no image
DBMS란 무엇인가
📁데이터 베이스(DB) 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것이다. 자료의 중복을 없애고 구조화하여 처리를 효율적으로 하기 위해서 관련성을 가지며 기억 시켜 놓은 데이터의 집합이다. 📂DBMS DBMS는 database management system의 약자로 데이터베이스를 조작하는 소프트웨어이다. 데이터베이스를 관리하며 응용프로그램들이 데이터베이스를 공유하며 사용할 수 있는 환경을 제공한다. 데이터 베이스를 구축하는 틀을 제공하고 검색 및 저장하는 기능을 제공한다. 응용프로그램들이 데이터베이스에 접근할 수 있는 인터페이스를 제공하고 복구 기능과 보안성 기능을 제공한다. 📂DBMS의 기능 데이터 정의(Definition) : 데이터의 구조를 정의하고 데..
2021.07.11
728x90

사용자가 지속적으로 증가하면 많은 양의 트래픽이 발생한다. 그러므로 하나의 DB서버로 쓰기와 읽기 작업이 모두 진행된다면 쉽게 DB서버에 부하가 발생할 수 있다.

이 문제에 대한 해결책으로 Master Server 이외에도 추가적으로 Replication된 Slave Server를 두고 읽기 작업(read_only)은 Slave Server로 향하게 함으로서 트래픽이 분산되어 DB서버의 부하를 막을수 있다.

또한 Master Server로 단일 서버일 때 부하로 인해 MYSQL서버가 죽어 서비스를 중단시키는 문제를 사전에 방지할 수 있다.

 

우선 MYSQL Replication에 대해서 먼저 알아보자 


➡️MYSQL Replication

  • MYSQL Replication은 2대 이상의 MYSQL 서버가 동일한 데이터를 담도록 실시간으로 동기화 하는 기술이다.
  • Replication은 INSERT나 DELETE와 같은 쿼리를 사용해 데이터를 변경할 수 있는 서버와 SELECT쿼리로 데이터를 읽기만 할 수 있는 서버로 나뉜다.
  • MYSQL에서는 쓰기와 읽기 역할로 구분해, 쓰기를 master server 읽기를 slave server라고 한다. 
  • MYSQL Replication에서 master server는 반드시 1개이고 slave server는 1개 이상으로 구성될 수 있다.

 

https://blog.seulgi.kim/2015/05/how-mysql-replication.html

 

📁master server

  • MYSQL의 바이너리 로그가 활성화되면 어떤 MYSQL 서버든지 master server가 될수 있다.
  • 애플리케이션 입장에서 보면 master서버는 데이터가 생성,변경,삭제되는 시작점이라고 볼 수 있다.
  • Replication에 참여하는 서버들중에 변경이 허용되는 서버는 Replication되는 데이터의 일관성을 보장하기 위해 master server로 한정되는 경우가 많다.
  • slave server에서 변경된 데이터를 요청하면 master server는 그 바이너리 로그를 읽어 slave server로 넘긴다. 
  • slave server에서 변경된 데이터를 요청하면 데이터를 slave server로 넘기는 역할은 master server 장비중에 dump thread가 전담한다.

📁slave server

  • master server가 바이너리 로그를 가지고 있다면 slave server는 릴레이 로그를 가지고 있다.slave server의 I/O 스레드는 master server에 접속해 변경 내역을 요청하고 받아 온 변경 내역을 릴레이 로그에 기록한다.
  • 데이터를 받아 올 마스터 장비의 정보(IP주소와 포트번호, 접속계정)를 가지고 있는 경우 slave server가 된다.
  • slave server의 SQL 스레드가 릴레이 로그에 기록된 변경 내역을 재실행함으로써 슬레이브의 데이터를 마스터와 동일한 상태로 유지한다.
  • I/O스레드와 SQL스레드는 master server에서는 가동되지 않으며, 복제가 설정된 slave server에서 자동으로 가동하는 스레드이다.

 

💡Replication할때 주의할 점 

  • slave server는 하나의 master server만 설정이 가능하다.
  • 마스터와 Slave Server의 데이터 동기화를 위해 Slave Server는 읽기 전용으로 설정한다.
  • Slave Server용 장비와 마스터와 동일한 사양이 좋다.
    • 여러 개의 스레드로 실행된 쿼리가 Slave Server에서 지연되지 않고 하나의 스레드로 처리될 수 있다.
    • 데이터 변경은 데이터 조회보다는 10프로 수준으로 유지되는것이 일반적이기 때문에 master server와 Slave Server를 같은 사양으로 유지할 때가 많다.
    • Slave Server는  master server가 다운된 경우 그에 대한 복구 대안으로 사용될 때도 많기 때문에 사양을 동일하게 맞추는 경우가 대부분이다.
  • Replication이 불필요한 경우 바이너리 로그를 중지한다.
    • 바이너리 로그를 안정적으로 기록하기 위해 갭 락(Gap lock)을 유지하고, 매번 트랜잭션 이 커밋될 때 마다 데이터를 변경시킨 쿼리 문장을 바이너리 로그에 기록해야 한다. 바이너리 로그를 기록하는 작업은 AutoCommit이 활성화 된 MySQL 서버에서 심각한 부하로 나타날 때가 많다.
  • 바이너이 로그와 트랜잭션 격리 수준 
    • 바이너리 로그 파일릉 어떤 내용이 기록되느냐에 따라 statement 포맷 방식과 row포맷 방식이 있다. row포맷 방식은 master server에서 실행된 쿼리에 의해 코드 값을 기록하는 방식이고, statement 포맷 방식은 바이너리 로그 파일에 master server에서 실행되는 쿼리 문장을 기록하는 방식이다.

 

바이너리 로그 파일에 SQL 문장을 기록하는 방식을 문장 기반 복제 라고 하며, 변경된 레코드를 바이너리 로그에 기록하는 방식을 레코드 기반의 복제라고 한다.

 

문장 기반 복제에는 Mysql Replication시 주의해야할 점이 있다. master server에 쓰기 작업이 일어나고 Slave Server에 복제가 되기 전에 Slave Server에 읽기 요청이 일어난다면, 일관되지 않는 값을 얻게된다. 따라서, SQL 기반의 복제가 정상적으로 작동하려면 REPEATABLE-READ 이상의 트랜잭션 격리 수준을 사용해야 하며, 그로 인해 InnoDB 테이블에서는 레코드 간의 간격을 잠그는 갭락이나 넥스트 키 락이 필요해진다.

 

반면 레코드 기반의 복제는 master  Slave MySQL 서버 간의 네티워크 트레픽을 많이 발생시킬 수 있지만 READ-COMMITTED 트랜잭션 격리 수준에서도 작동할 수 있으며 InnoDB 테이블에서 잠금의 경합은 줄어들게 된다.

REFERENCE

https://junghyungil.tistory.com/177

728x90
728x90

➡️트랜잭션

  • 트랜잭션은 DBMS가 데이터베이스를 다룰 때 사용하는 작업의 단위이다.
  • 트랜잭션은 데이터베이스의 무결성을 유지하기 위해 원자성, 고립성, 지속성의 성질을 갖는다.DBMS는 트랜잭션이 이러한 성질을 유지할 수 있도록 지원한다.
  • 데이터베이스에서 데이터를 다룰 때  장애가 일어나는경우에 데이터를 복구하는 작업의 단위가 된다.
  • 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때 서로 분리하는 단위가 된다.

➡️트랜잭션의 수행 과정

 

아래와 같은 트랜잭션의 수행 과정은 2가지 방법으로 나눠진다.

방법 1 : 1 - 2 - 3 - 4 - Commit - 5 - 6 

방법 2 : 1 - 2 - 3 - 4 - 5 - 6 - Commit

+@Commit은 트랜잭션의 수행이 완료가 된것을 트랜잭션 관리자에게 알려주는 연산이다.Commit을 사용하는 이유는 DBMS가 일괄적으로 하드디스크에 접근하여 처리함으로써 개별 접근하는 것을 피하고  사용자에게 빠른 응답성을 보장하기 위해서 이다.

이 두가지 방법중에서 DBMS는 클라이언트에세 빠른 응답성을 보장하기 위해 방법 1을 선택한다.

이유는 수행결과를 데이터베이스에 기록하는 5,6의 과정이 시간이 많이 소요되고,다른 트랜잭션이 또 사용중인 테이블이 필요할 수 있기 때문이다.즉 트랜잭션은 임시로 종료선언하고 실제 데이터 베이스에 기록하는 것은 DBMS가 수행한다.

  1. 1.A계좌의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다.
  2. B계좌의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다.
  3. A 계좌에서 10000원을 인출한 값을 저장한다
  4. B 계좌에서 10000원을 입금한 값을 저장한다.
  5. A 계좌의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다.
  6. B 계좌의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다.

 

 

➡️트랜잭션 성질(ACID 성질)

  • 원자성(Atomicity)
    • 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 않아야 한다.
    • 트랜잭션이 중간에 끊기면 이후에 해당 트랜잭션의 어디서부터 이어 수행해야되어야 하는지 모르기 때문에 작업이 잘못되면 회복 알고리즘을 이용하여 변경한 내용을 취소한다.
  • 일관성(Consistency)
    • 트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야 한다.
  • 고립성(Isolation)
    • 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경중인 데이터 값을 훼손하지 않아야한다.
    • 고립성을 유지하기 위해서는 여러 트랜잭션이 동시에 접근하는 데이터에 대한 제어가 필요하다.
  • 지속성(Durability)
    • 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 한다.
    • 트랜잭션의 성공 결과 값은 장애발생 후에도 변함없이 보관되어야 한다는 것으로 트랜잭션이 정상적으로 완료(Commit)된 경우에는 버퍼의 내용을 하드디스크에 확실히 기록하여야 하며, 부분 완료(Partial Commit)된 경우에는 작업을 취소(Aborted)하여야  한다.

 

➡️트랜잭션과 DBMS

  • DBMS는 원자성을 유지하기 위해 회복관리자 프로그램을 작동시킨다.회복 관리자 프로그램은 데이터베이스가 변경한 내용을 로그로 기록하고 있다가 트랜잭션에 문제가 생겼을 때 원래 상태로 되돌린다.
  • DBMS는 일관성을 유지하기 위해 무결성 제약조건을 활용한다.트랜잭션 수행 시 데이터에 변경이 가해지면 미리 정의해 둔 무결성 제약조건을 검사하여 일관성이 깨지는 것을 막는다.
  • DBMS는 고립성을 유지하기 위해 일관성을 유지하는 것과 마찬가지로 동시성 제어 알고리즘을 작동시킨다.동시성 제어 알고리즘을 작동시켜 여러 트랜잭션이 동시에 같은데이터를 접근할 때 마치 한 트랜잭션씩 순서대로 접근하는 것처럼 제어한다.
  • DBMS는 지속성을 유지하지 위해 회복관리자 프로그램을 이용한다. 회복관리자 프로그램은 데이터베이스가 변경한 내용을 로그로 기록하고 있다가 트랜잭션에 문제가 있을 때 원래 상태로 되돌린다.

 


Reference

  • Mysql로 배우는 데이터베이스 개론과 실습 

 

 

 

 

  •  

 

728x90
728x90

👉이상현상(Anomly)

  • 삭제 이상 : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상이다.
  • 삽입 이상 : 튜플 삽입 시 특정 속성에 해당하는 값어 Null값을 입력해야 하는 현상이다.
  • 수정 이상 : 튜플 수정 시 중복된 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상이다.

아래 사진에서 장미란이라는 학생 정보를 지울결루 강의실 103도 같이 사라진다.이 현상이 삭제 이상이다.

박지성 학생과 김연아 학생 같은 수업을  110호에서 수강을 한다. 그런데 두 강의는 독립적으로 입력된 데이터이기 때문에 박지성 학생에서 강의실을 201호로 변경하여도 김연아 학생은 110호로 데이터가 그대로 유지되고, 같은 데이터베이스 수업임에도 불구하고 강의실이 달라지는 현상이 발생한다.이 현상이 수정 이상이다.

이러한 이상현상은 튜플에 독립적으로 존재하기 때문에 발생한다. 그러므로 테이블을 분리하여 강의실을 참고하게끔 하면 이상 현상을 해결할 수 있다.


👉함수 종속성(Functional Dependency)

  • 데이터베이스의 릴레이션에서 두 개의 애트리뷰트 집합 간 제약의 일종이다.
  • 어떤 릴레이션 R에서 X와 Y를 각각 R의 애트리뷰트 집합의 부분 집합이라고 하면, 애트리뷰트 X의 값 각각에 대해 시간에 관계없이 항상 애트리뷰트 Y값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라고 한다.
  • 튜플이 주어지고 ,X 애트리뷰트의 값이 주어지면 ,Y 애트리뷰트의 값을 구할 수 있다.X와 Y가 릴레이션 R의 애트리뷰트집합의 부분 집합이면,X->Y라는 표기는, X가 각각의 Y멤버를 함수적으로 결정한다는 뜻이다.
  • 정리하면 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존관계이다.
  • EX)학번 -> 학생 , 강좌이름 -> 강의실 

👉함수 종속 다이어 그램

  • 릴레이션 간의 속성 : 직사각형 
  • 속성 간의 함수 종속성 : 화살표 
  • 복합 속성 : 직사각형으로 묶어서 표기 


Reference

728x90

'Dev > Database' 카테고리의 다른 글

[MYSQL]효율적인 트래픽 분산을 위한 Master/Slave 동적 라우팅  (0) 2021.10.24
[DB]트랜잭션(transaction)  (0) 2021.09.14
[DB] 정규화(Normalization)  (0) 2021.09.11
[MYSQL]SQL_1  (0) 2021.08.21
Redis란?  (1) 2021.08.16
728x90

📁정규화(Normalization)

정규화는 테이블 간에 중복을 허용하지 않는다는 목표를 가지고 있다. 중복된 데이터를 허용하지 않으므로써 무결성을 유지할 수 있고, 데이터 베이스 용량 또한 줄일수 있다.

테이블이 어떻게 분리되는지에 따라 정규형 단계가 달라진다.

📁제 1 정규형

  • 제 1 정규형은 릴레이션의 모든 속성 값이 원자값을 가지는 경우이다.
  • 아래 그림처럼 추신수 선수의 취미가 (영화,음악)으로 원자값이 아니다.속성 값이 원자 값이 아닐 경우 원자 값을 갖도록 변환 해주어야한다.
  • 고객취미들(이름,취미들) 릴레이션을 고객취미(이름,취미)릴레이션으로 바꾸어 저장하면 제 1 정규형에 만족한다.

📁제 2 정규형 

  • 제 2 정규형은 릴레이션이 제 1 정규형을 만족하고, 기본키가 아닌 속성이 키본키에 완전 함수 종속일 때를 의미한다.
  • 완전 함수 종속은 A와 B가 릴레이션 R속성이고 A -> B 종속성이 성립할 때,B가 A의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우 완전 함수 종속이다.
  • 반면 A->B 종속성에서 A의 속성 일부를 제거해도 종속성이 여전히 성립하는 경우 불완전 함수 종속이다. 예를 들어(A1,A2) -> B 종속성에서 A2를 제거했는데도 A1 -> B 가 여전히 성립한다면 불완전 함수 종속이다.

위 사진에서 (학생번호,강좌이름)의 복합키를 가지고 가정을 하면 (학생번호,강좌이름)이 모여서 성적이라는 값을 결정하지만, 강의실의 경우 강좌이름이 없어도 강의실을 결정할 수 있다. 그러므로 이러한 관계를 부분 함수 종속이라고 하고 제2정규형은 완전 함수 종속을 만족 시켜야 하므로 강좌이름과 강의실을 분리하면 제 2 정규형이 성립된다.

 

📁제 3 정규형

  • 제 3 정규형은 릴레이션 R이 제 2 정규형을 만족하고 기본키가 아닌 속성이 기본키에 비이행적으로 종속할 때를 의미한다.
  • 이행적 종속이란 A->B,B->C 가 성립할 때  A->C가 성립되는 함수의 종속성을 의미한다.

아래 그림을 보면 학생번호의 강좌이름이 변경되면 수강료도 변경되어야 한다.속성들을 독립적으로 만드는 것이 아니라 학생 번호로 학생이 수강하는 강좌이름을 찾게 하고 그 학생번호가 참조하는 강좌이름을 참조하여 수강료를 찾게하여 학생 번호로 수강료를 참조할 수 있게 만들면 제 3 정규형이 성립된다.

📁BCNF  정규형

  • BCNF 정규형은 릴레이션 R에서 함수 종속성 X-> Y가 성립할 때 모든 결정자 X가 후보키인 정규형이다.

그림에서 기본키는(학생번호, 특강이름) 이고 교수는 (학생번호, 특강이름)에 완전하게 함수적으로 종속하고 있고 교수 역시도 특강 이름을 결정하며 결정자의 역할을 하고 있다. 다음은 모든 결정자 X가 후보키인지를 확인해야 합니다. (학생번호, 특강이름)은 기본키이므로 당연히 결정자이며 후보키이다. 하지만 교수는 결정자이면서 후보키가 아니므로 아래의 왼쪽 테이블은 BCNF정규형이 아닙니다. BCNF정규형을 만족하기 위해서 왼쪽의 테이블을 오른쪽과 같이 분리해야 한다.

 

📁무손실 분해(Loseless-join decomposition)

이상현상을 해결하기 위해서 릴레이션을 분해해야 한다. 하지만 릴레이션 R을 분해할 때 분해 후의 결과와 달라지만 문제가 발생하므로 우리는 손실 없이 릴레이션을 분해 해야한다. 릴레이션 R을 R1과 R2로 분해할 때 , R1> <R2을 만족하는 경우 무손실분해라고한다.

 

 


REFERENCE

-MYSQL로 배우는 데이터 베이스 개론과 실습 

728x90

'Dev > Database' 카테고리의 다른 글

[DB]트랜잭션(transaction)  (0) 2021.09.14
[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency)  (0) 2021.09.13
[MYSQL]SQL_1  (0) 2021.08.21
Redis란?  (1) 2021.08.16
데이터 베이스 시스템 개념  (0) 2021.07.20

[MYSQL]SQL_1

ryudjae
|2021. 8. 21. 00:14
728x90

 

➡️SQL 기본

-SQL은 관계형 데이터 베이스에 표준 언어이다.

-SQL은 기능에 따라 데이터 정의어(DDL),데이터 조작어(DML),데이터 제어어(DCL)로 나뉜다.

  • 데이터 정의어 : 테이블이나 관계의 구조를 생성하는 데 사용하며 CREATE,ALTER,DROP 문 등이 있다.
  • 데이터 조작어 : 테이블에 데이터를 검색,삽입,수정,삭제하는 데 사용하며 SELECT,INSERT,DELETE,UPDATE 문 등이 있다. 여기서 SELECT 문은 질의어라고 부른다.
  • 데이터 제어어 : 데이터의 사용 권한을 관리하는 데 사용하며 GRANT,REVOKE 문 등이 있다.

 

➡️데이터 조작어 -검색

-SQL에서 SELETE 문은 데이터를 검색하는 기본 문장으로, 특별히 질의어라고 부른다.

-SELECT 문은 검색한 결과를 테이블 형태로 출력한다.

-SELECT 문의 문장 프레임 워크는 다음과 같다.

SELECT : 질의 결과 추출되는 속성 리스트를 열거한다.
FROM : 질의에 어느 테이블이 사용되는지 열거한다.

WHERE : 질의의 조건을 작성한다.

-예로 다음과 같이 작성할 수 있다.(ex_ "10000원 이상인 도서의 이름과 출판사를 보이시오.")

SELECT bookname,publisher (속성 이름)

FROM Book                               (테이블 이름)

WHERE price >= 10000;         (검색 조건)

 

SELECT 문의 기본 문법은 다음과 같다.

SELECT [ALL | DISTINCT]속성이름(들)
FROM      테이블이름
WHERE     검색조건(들)
GROUP BY     속성이름
HAVING       검색조건(들)
ORDER BY      속성이름[ASC | DESC]

SELECT와 FROM을 제외하고 나머지 문법들은 선택적으로 사용할 수 있다.
| : 는 선택 가능한 문법들 중 한 개를 사용할 수 있다.

예제에 사용할 테이블 3개

👉WHERE

(ex_ "가격이 10000원 이상 20000원 이하인 도서를 검색하세요.")
SELECT * 

FROM Book
WHERE price >= 10000 AND price <= 20000

;



(ex_ "출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하세요.")
SELECT * 
FROM Book
WHERE publisher IN('굿스포츠','대한미디어')





(ex_ "도서이름에 '축구'가  포함된 출판사를 검색하세요.")
SELECT bookname,publisher
FROM Book
WHERE bookname LIKE '%축구%';



👉ORDER BY

(ex_ "도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색하세요.")
SELECT *
FROM Book
ORDER BY price,bookname;




(ex_ "도서의 가격을 내림차순으로 검색하고, 만약 가격이 같다면 출판사의 오름차순으로 출력하세요.")

SELECT *
FROM Book
ORDER BY price DESC,publisher ASC;  (DESC: 내림차순 ASC: 오름차순)

👉GROUP BY (+집계 함수)

(ex_ "고객이 주문한 도서의 총 판매액을 구하시오")
SELECT SUM(saleprice) AS 총매출              ||(AS: 의미있는 열 이름을 출력하려고 할때 별칭을 사용한다.)
FROM  Orders;


(ex_ "2번 김연아 고객의 주문한 도서의 총 판매액을 구하시오")

SELECT SUM(saleprice) 
FROM  Orders
WHERE custid =2;


(ex_ "고객별로 주문한 도서의 총 수량과 총 판매액을 구하시오.")
SELECT custid,COUNT(*),SUM(saleprice)
FROM Orders
GROUP BY custid;


👉HAVING (+ HAVING 절은  GROUP BY절의 결과 나타나는 그룹을 제어하는 역할을 한다.)

(ex_"가격이 8000원이상인 도서를 구매한 고객에 대하여 고객별로 주문 도서의 총 수량을 수하시오. 단 , 두권 이상 구매한 고객만 구하시오")
SELECT custid,COUNT(*)
FROM  Orders
WHERE saleprice >= 8000
GROUP BY custid
HAVING count(*) >=2 ; 

 

➕두 개 이상 테이블에서 SQL 질의 ➕

(ex_"고객별로 주문한 모든 도서의 총 판매액을 구하고 ,고객별로 정렬하세요.")
SELECT name,SUM(saleprice)
FROM Customer,Orders
WHERE Customer.custid=Orders.custid
GROUP BY Customer.name
ORDER BY Customer.name;


(ex_"고객의 이름과 고객이 주문한 도서의 이름을 구하시오.")

SELECT Customer.name,Book.bookname
FROM Customer,Orders,Book
WHERE Customer.custid = Orders.custid AND Orders.bookid = Book.bookid;


(ex_"가격이 20000원인 도서를 주문한 고객의 이름과 도서의 이름을 구하시오.")

SELECT Customer.name, Book.bookname
FROM Customer,Orders,Book
WHERE Customer.custid=Orders.custid AND Orders.bookid=Book.bookid AND Book.price=20000;


(ex_"가장 비싼 도서의 이름을 보이시오.")

SELECT bookname
FROM Book
WHERE price = (SELECT MAX(price)FROM Book);


(ex_"도서를 구매한 적이 있는 고객의 이름을 검색하세요.")

SELECT name
FROM Customer
WHERE custid IN(SELECT custid
                               FROM Orders);


(ex_"대한민국에서 거주하는 고객의 이름과 도서의 주문한 고객의 이름을 보이시오.")

SELECT name 
FROM Customer 
WHERE address LIKE"%대한민국%"
UNION
SELECT name
FROM Customer
WHERE custid IN(SELECT custid FROM Orders);


 

728x90

'Dev > Database' 카테고리의 다른 글

[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency)  (0) 2021.09.13
[DB] 정규화(Normalization)  (0) 2021.09.11
Redis란?  (1) 2021.08.16
데이터 베이스 시스템 개념  (0) 2021.07.20
DBMS란 무엇인가  (0) 2021.07.11

Redis란?

ryudjae
|2021. 8. 16. 02:06
728x90

 

 

➡️Redis를 이해할려면 NOSQL에 대해서 알아야 한다. 

👉NOSQL(Not  Only SQL)이란?

  • RDBMS를 관계형 데이터베이스라고 부르는 반면 NOSQL은 비관계형 데이터 베이스이다.
  • 보통 NOSQL은 KEY-VALUE나 컬러,문서 형태의 데이터 모델을 이용한다.
  • 관계형 데이터베이스가 아닌 다른 형태로 데이터를 저장하는 기술이라고 생각하면 좀 이해가 된다.

👉NOSQL을 언제 쓰는가?

아주 많은 양의 데이터를 효율적으로 처리가 필요할 때, 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성이 필요할 때 사용한다.

특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 형태의 구조이기 때문에 사용한다.

 

💻Redis란?

  • REDIS(REmote Dictionary Server)는 메모리 기반의 “키-값” 구조 데이터 관리 시스템이며, 모든 데이터를 메모리에 저장하고 조회하기에 빠른 Read, Write 속도를 보장하는 비 관계형 데이터베이스이다.
  • 레디스는 크게 5가지< String, Set, Sorted Set, Hash, List >의 데이터 형식을 지원한다.
  • Redis는 빠른 오픈 소스 인 메모리 키-값 데이터 구조 스토어이며, 다양한 인 메모리 데이터 구조 집합을 제공하므로 사용자 정의 애플리케이션을 손쉽게 생성할 수 있다.
  • 아래 그림은 레디스 구조를 이미지화 한 것이다.

https://bcho.tistory.com/654

 

💻Redis특징

  • 영속성을 지원하는 인메모리 데이터 저장소이다.
  • 읽기 성능 증대를 위한 서버 측 복제를 지원한다.
    • Redis가 실행중인 서버가 충돌하는 경우 장애 조치 처리와 함께 더 높은 읽기 성능을 지원하기 위해 슬레이브가 마스터에 연결하고 전체 데이터베이스의 초기 복사본을 받는 마스터 / 슬레이브 복제를 지원한다. 마스터에서 쓰기가 수행되면 슬레이브 데이터 세트를 실시간으로 업데이트하기 위해 연결된 모든 슬레이브로 전송된다.
  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩을 지원한다.
  • String, Set, Sorted Set, Hash, List와 같은 다양한 데이터형식을 지원한다.

💻Redis장점 

  • 리스트,배열과 같은 데이터를 처리하는데 용이하다.
    • Value값으로 String,List,Set,Set Sorted,Hash등 여러 데이터 형식을 지원하기에 , 다양한 방식으로 데이터를 활용 할 수 있다.
  • 리스트형 데이터 입력과 삭제가 NOSQL에 비해서 10배정도 빠르다.
    • 여러 프로세스에서 동시에 같은 키값에 대한 갱신을 요청할 경우,Atomic처리로 데이터 부정합 방지 Atomic처리 함수를 제공한다.
  • 메모리를 활용하면서 영속적인 데이터 보존이 가능하다.
    • 명령어로 명시적으로 삭제,expires를 설정하지 않으면 데이터가 삭제되지 않는다.
    • 스냅샷 기능을 제공하여 메모리 내용을 .rdb파일로 저장하여 해당시점으로 복구 할 수 있다.
  • Redis Server는 1개의 싱글 스레드로 수행되며, 따라서 서버 하나에 여러개의 서버로 띄우는 것이 가능하다.

 

728x90

'Dev > Database' 카테고리의 다른 글

[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency)  (0) 2021.09.13
[DB] 정규화(Normalization)  (0) 2021.09.11
[MYSQL]SQL_1  (0) 2021.08.21
데이터 베이스 시스템 개념  (0) 2021.07.20
DBMS란 무엇인가  (0) 2021.07.11
728x90

데이터베이스

  • 데이터베이스는 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것이다.

 

데이터베이스 시스템

  • 데이터베이스 시스템은  데이터의 검색변경을 주로 한다.
  • 변경이란 시간에 따라 변하는 데이터 값을 데이터베이스에 반영하기 위해 수행하는 삽입(insert),삭제(delete),수정(update) 등의 작업을 말한다.
  • 검색과 변경의 빈도에 따라 시스템 구축의 난이도가 결정된다.

 

데이터 베이스 시스템 개념 및 특징

개념

1.통합된 데이터(integrated data)

  • 여러 곳에서 사용하던 데이터를 통합하여 하나로 저장한 데이터를 의미한다.
  • 통합 시 중요한 점은 각각 사용하던 데이터의 중복을 최소화함으로써 중복 저장으로 인한 데이터 불일치 현상을 없애는 것이다.

2. 저장된데이터(store data)

  • 문서로 보관된 데이터가 아니라 디스크,테이프 같은 컴퓨터 저장장치에 저장된 데이터를 의미한다.

3.운영 데이터(operational data)

  • 조직의 목적을 위해 사용되는 데이터를 의미한다.

4.공용 데이터(shared data)

  • 한 사람 또는 한 업무를 위해 사용되는 데이터가 아니라 공동으로 사용되는 데이터를 의미한다.

특징

1. 실시간 접근성

  • 실시간이란 사용자가 요청하는 순간에 실제 데이터를 서비스 하는 것을 말한다.

2. 계속적인 변화

  • 데이터베이스에 저장된 내용은 어느 한 순간의 상태를 나타내지만, 데이터 값은 시간에 따라 항상 바뀐다.

3. 동시 공유

  • 데이터베이스는 서로 다른 업무 또는 여러 사용자에게 동시에 공유된다.

4. 내용에 따른 참조

  • 데이터베이스에 저장된 데이터는 데이터의 물리적인 위치가 아니라 데이터 값에 따라 참조된다.
728x90

'Dev > Database' 카테고리의 다른 글

[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency)  (0) 2021.09.13
[DB] 정규화(Normalization)  (0) 2021.09.11
[MYSQL]SQL_1  (0) 2021.08.21
Redis란?  (1) 2021.08.16
DBMS란 무엇인가  (0) 2021.07.11

DBMS란 무엇인가

ryudjae
|2021. 7. 11. 00:37
728x90

 

📁데이터 베이스(DB)

  • 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것이다.
  • 자료의 중복을 없애고 구조화하여 처리를 효율적으로 하기 위해서 관련성을 가지며 기억 시켜 놓은 데이터의 집합이다.

 

📂DBMS

  • DBMS database management system의 약자로 데이터베이스를 조작하는 소프트웨어이다.
  • 데이터베이스를 관리하며 응용프로그램들이 데이터베이스를 공유하며 사용할 수 있는 환경을 제공한다.
  • 데이터 베이스를 구축하는 틀을 제공하고 검색 및 저장하는 기능을 제공한다.
  • 응용프로그램들이 데이터베이스에 접근할 수 있는 인터페이스를 제공하고 복구 기능과 보안성 기능을 제공한다.

https://coding-factory.tistory.com/215

📂DBMS의 기능

  • 데이터 정의(Definition) : 데이터의 구조를 정의하고 데이터 구조에 대한 삭제 및 변경 기능을 수행한다.
  • 데이터 조작(Manipulation) : 데이터를 조작하는 프로그램이 요청하는 데이터의 삽입,수정,삭제 작업을 지원한다.
  • 데이터 추출(Retrieval) : 사용자가 조회하는 데이터 혹은 응용 프로그램의 데이터를 추출한다.
  • 데이터 제어(Control) : 데이터 베이스 사용자를 생성하고 모니터링하며 접근을 제어한다.백업과 회복 동시성 제어들을 지원한다.
  • 데이터 정의와 데이터 조작의 차이가 있다. 데이터 정의는 테이블 구조에 대해서 작업을 하는 것이고 데이터 조작은 테이블에 들어있는 혹은 테이블에 삽입할 데이터에 대해서 작업한다.

📂DBMS의 장단점

장점

  • 데이터 중복을 통제할 수 있다.
  • 데이터 독립성이 확보된다.
  • 데이터를 동시 공유할 수 있다.
  • 데이터 보안이 향상된다.
  • 데이터 무결성을 유지할 수 있다.
  • 표준화할 수 있다.
  • 장애 발생 시 회복이 가능하다.
  • 응용 프로그램 개발 비용이 줄어든다.

단점

  • 비용이 많이 든다.
  • 백업과 회복 방법이 복잡하다.
  • 중앙 집중 관리로 인한 취약점이 존재한다.

 

📁DBMS종류

Oracle

  • 오라클에서 만들어 판매중인 상업용 데이터베이스
  • 윈도우, 리눅스, 유닉스 등 다양한 운영체제(OS)에서 설치 가능
  • MySQL, MSSQL보다 대량의 데이터 처리 용이
  • 대기업에서 주로 사용하며, 글로벌 DB 시장 점유율 1위
  • 비공개 소스, 폐쇄적인 운영
  • 가장 널리 사용되는 RDBMS

MySQL

  • MySQL사에서 개발, 썬마이크로시스템즈를 거쳐 현재 오라클에 인수합병
  • 윈도우, 리눅스, 유닉스 등 다양한 운영체제(OS)에서 설치 가능
  • 오픈소스로 이루어져있는 무료 프로그램(상업적 사용 시 비용 발생)
  • 가격 등의 장점을 앞세워 다수의 중소기업에서 사용중
  • RDBMS

MSSQL

  • 마이크로소프트(MS)사에서 개발한 상업용 데이터베이스
  • 다른 운영체제에서도 사용가능하지만 윈도우에 특화됨
  • 비공개 소스로 폐쇄적인 운영(리눅스 버전은 오픈소스)
  • 중소기업에서 주로 사용중
  • RDBMS

MariaDB

  • MySQL이 오라클에 인수합병된 후 불확실한 라이선스 문제를 해결하려고 나온 오픈소스 RDBMS
  • 구현언어 : C++
  • MySQL과 동일한 소스 코드 기반
  • MySQL과 비교해 애플리케이션 부분 속도가 약 4~5천배 정도 빠름

 

 

 

 

 

 

728x90

'Dev > Database' 카테고리의 다른 글

[DB]이상현상(Anomly), 함수 종속성 (Functional Dependency)  (0) 2021.09.13
[DB] 정규화(Normalization)  (0) 2021.09.11
[MYSQL]SQL_1  (0) 2021.08.21
Redis란?  (1) 2021.08.16
데이터 베이스 시스템 개념  (0) 2021.07.20