DataBase
[MySQL] 뷰(view) 정리
데이터베이스 뷰(View)란? DB에서 뷰는 하나 또는 그 이상의 테이블을 조인하여 만든 새로운 가상 테이블을 의미한다. 실제로 테이블을 생성한 건 아니지만, 사용자에게는 실존 테이블과 동일하게 사용된다. (뷰를 가지고 새로운 뷰를 만들 수도 있다.) 이는 주로 특정 정보만 제공하고 싶은 경우나 복잡한 쿼리를 가상 테이블로 만들어 간편하게 활용할 수 있어 업무에서도 자주 이용하는 기능이다. 예를 들어 자세히 설명하자면, 두 개의 테이블이 있다고 가정하자. memberInfo, PaymentHist. 개발자가 회원 별 결제 이력을 조회하고 싶은데, DBA가 회사 규정상 민감한 개인정보는 제공하고 싶지 않은 경우 뷰를 만들어서 제공하면 된다. 테이블 memberInfo에 있는 민감한 개인정보가 담긴 컬럼을 ..
[MySQL] 내장함수 종류 정리
집계 함수 COUNT(필드명) --NULL 값이 아닌 레코드 수를 구한다. SUM(필드명) - 필드명의 합계를 구한다. AVG(필드명) - 각각의 그룹 안에서 필드명의 평균값을 구한다. MAX(필드명) - 최대값을 구한다. MIN(필드명) - 최소값을 구한다. select userId, sum(amount) as 'SUM' # as안쓰면 sum(amount)이 컬럼 이름이 되니까 깔끔하게 별칭 사용 from buyTbl group by userid; #그룹핑을 안해주면 sum이 전체를 더해버린다. 그룹을 해줘야 그룹된 id에 맞게 sum을 해준다 select name, height from userTbl where height = (select max(height) from usertbl) or heig..
[DB] ORM이란?
영속성(Persistence)이란? 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터 특성을 말한다. 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 된다. Object Persistence(영구적인 객체) 메모리 상의 데이터를 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 영구적으로 저장하여 영속성을 부여한 객체를 말한다. 데이터를 데이터베이스에 저장하는 3가지 방법 JDBC (Java에서 사용) Spring JDBC (Ex. JdbcTemplate) Persistence Framework (Ex. Hibernate, MyBatis) Persistence Layer 프로그램의 아키텍처에서, 데이터에 영속성을 부여해주는..
[MySQL] 인덱스(index)란?
개요 DB를 사용하면서 데이터의 양(row)에 따라 실행 결과의 속도가 차이가 나는 것을 알고 있었다. 특히 데이터의 양이 증가할수록 실행 속도는 느려지고, JOIN이나 서브 쿼리 사용 시 곱 연산이 일어나 데이터 양이 증가하기 때문에 WHERE 조건에서 필요한 데이터만 추출 후 사용하는 것이 좋다고 알고 있었는데, 보다 쿼리의 성능을 높이는 데 중요한 것은 인덱스를 적재적소로 활용하는 것이었다. 그렇다면 인덱스의 개념과 구조, 그리고 왜 사용하는지?, 사용했을 때 장점과 단점들에 대해 학습하고자 한다. 인덱스(Index)란? 인덱스란 데이터의 저장(INSERT, UPDATE, DELETE) 의 성능을 희생하고 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색(읽기) 속도를 향상시키기..
[DB] 동시성 문제와 제어 기법(Concurrency Control )
동시성 제어(Concurrency Control) 동시에 실행되는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하는 기법이다 다중 사용자 환경을 지원하는 DB 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능으로 DB의 일관성을 해치지 않도록하는 트랜잭션의 데이터 접근기술이다. 다중 사용자 환경을 지원하는 DBMS의 경우 필수적으로 지원해야 하는 기능으로 병행제어라고도 한다. 트랜잭션의 직렬화 수행 보장 ACID의 중 하나인 고립성은 상호 간의 트랜잭션을 독립적으로 만들어준다. 그런데 2개 이상의 트랜잭션이 하나의 값에 접근하는 경우에는 어떻게 될까? 2개의 트랜잭션이 모두 읽는 경우에는 문제가 발생하지 않지만, 1개의 트랜잭션은 쓰고 1..
[DB] Join 이란, join의 종류, inner join과 outer join의 차이점
조인이란? 두개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법이다. 자신이 검색하고 싶은 컬럼이 다른 테이블에 있을 경우 주로 사용하며 여러 개의 테이블을 마치 하나의 테이블인 것처럼 활용하는 방법이다. 보통 Primary key혹은 Foreign key로 두 테이블을 연결한다. 테이블을 연결하려면 적어도 하나의 컬럼은 서로 공유되고 있어야 한다. 조인의 종류 INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN CROSS JOIN SELF JOIN SQL 조인 쉽게 이해하기 위한 다이어그램 그렇다면, 이제 다음과 같은 테이블 두 개를 가지고 각각의 조인에 대해 알아보자. [Star 테이블] ID Name DepNo 1 강호동 10 ..
[DB] 정규화(Normalization) & 역정규화 기법
정규화(Normalization) 정규화(Normalization)의 기본 목표는 테이블 간에 중복된 데이터를 최소화시키는 것이다. 즉, 중복요소를 찾아 제거해 나가는 과정이라고 할 수 있다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 또한 삽입/갱신/삭제 시 발생할 수 있는 각종 이상현상(Anamolies)들을 방지할 수 있다. 데이터베이스 정규화의 목적은 주로 두 가지이다. 1. 불필요하고 중복된 데이터(data redundancy)를 제거한다. 2. 데이터 저장을 "논리적으로" 한다. 여기서 2번 데이터 저장을 논리적으로 한다는 것은 데이터 테이블의 구성이 논리적이고 직관적이어야한다는 것이다. 우선 정규화를 안 했을 때..
[DB] 데이터베이스 관계(Relationship)
데이터베이스 관계(Relationship) 관계형 데이터베이스(Oracle, MySQL, MS-SQL, SQLite 등등)는 엔티티(Entity)끼리 관계를 맺을 수 있어서 관계형 DB라는 이름이 붙었다. 이때 관계는 두 엔티티가 서로 관련이 있을 때를 말하는데, 1:1, 1:N, N:M 관계를 맺을 수 있다. 엔티티간의 관계를 알기 전에 알아야할 지식에 대해 먼저 살펴보자. 스키마(Schema) & 쿼리 디자인(Query Design) 스키마(Schema)란? 스키마란 데이터베이스를 구성하는 레코드의 크기, 키(key)의 정의, 레코드와 레코드의 관계, 검색 방법 등을 정의한 것을 말한다. 즉, 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명을 말한다. 데이터베이스의 ..