본문 바로가기

반응형

CS/데이터베이스

(9)
트랜잭션 특징과 격리 수준 트랜잭션 트랜잭션(Transaction) 은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위이다. [트랜잭션이 필요한 예시] A 가 B 에게 계좌이치를 하는 상황을 생각해보자. 1. A 의 계좌에서 돈을 꺼낸다. 2. B 의 계좌에 돈을 넣는다. 위의 두 작업은 함께 이루어지거나 혹은 둘 다 이루어지면 안된다. 만약 A 계좌에서 돈을 꺼냈는데 시스템상 오류로 B 계좌에 돈이 들어오지 않는다는 큰 문제가 생겨서는 안된다. 이를 위해 트랜잭션은 Commit 과 Rollback 을 지원한다. commit : 모든 부분 작업이 정상적으로 완료되면 이 변경사항을 한번에 DB에 반영한다. rollback : 부분 작업에 실패하면 모든 부분 작업을 실행 전 상태로 되돌린다. 트랜잭션 ..
데이터베이스 튜닝과 확장 데이터베이스 튜닝 데이터베이스 튜닝은 시스템의 성능을 최적화하고 자원을 효율적으로 사용하기 위해 데이터베이스 관리 시스템 (DBMS) 의 설정을 조정하는 과정이다. 데이터베이스 튜닝은 크게 서버 튜닝, SQL 튜닝, 스키마 튜닝 등 으로 나눌 수 있다. SQL 튜닝 데이터 검색, 삽입, 갱신, 삭제 작업의 효율을 높이기 위해 SQL 쿼리를 최적화하는 방법이다. 1. 필요한 필드만 선택해서 가져온다. -- 나쁜 예: 모든 필드를 선택 SELECT * FROM employees WHERE department_id = 10; -- 좋은 예: 필요한 필드만 선택 SELECT employee_id, first_name, last_name FROM employees WHERE department_id = 10; 2..
데이터베이스 인덱스 인덱스 (Index) 인덱스란 데이터베이스 테이블에 대한 검색 성능의 속도를 향상시키기 위해 사용하는 자료구조이다. 마치 책에서 특정 부분을 찾을 때 목차를 활용하는 것과 비슷한 원리로 동작한다. 책에서 원하는 부분을 찾아 읽을 때, 처음부터 순서대로 읽는 것은 많은 시간이 걸릴 것이다. 그래서 목차를 확인하고 원하는 부분으로 직행하는 것이 더 빠르다. "인덱스"가 이런 방식으로 작동한다. 위 이미지는 PK 에 대한 인덱스를 생성한 모습이다. 인덱스는 Key 와 Pointer 쌍으로 구성된다. Key : 검색하려는 데이터의 값 Pointer : 실제 데이터 레코드를 가리키는 포인터 그림에서 보듯이 인덱스 엔트리는 모든 레코드에 대해 생성되는 것이 아닌, 일정한 크기의 블록 단위로 생성된다. 그렇기 때문에..
데이터베이스 설계와 정규화 데이터베이스를 설계하다 보면 어떻게 설계하는 것이 좋을지 고민해 본 적이 있을 것이다. 이번 시간에는 좋은 데이터베이스가 무엇인지 또 그것을 위한 가이드라인을 알아보고 정규화와 역정규화에 대해서도 알아보겠다. 글에 나오는 릴레이션은 테이블이라고 생각해도 된다. 좋은 데이터베이스 설계란? 좋은 데이터베이스를 설계하기 위해서는 아래 4가지 항목을 지키기 위해 노력해야 한다. 속성의 의미를 명확하게 표현하고 있어야 한다. 튜플의 중복값을 최소화하여야 한다. 튜플의 null 값도 최소화하여야 한다. 불필요한 튜플 생성 가능성을 허용해서는 안된다. 좋은 데이터베이스 스키마 설계를 위한 가이드라인 1) 하나의 엔티티 또는 릴레이션 타입에는 하나의 릴레이션 스키마를 설계해라! 하나의 스키마에 여러 개체나 관계 타임을..
SQL 집단함수와 GROUP BY 절, HAVING 절 정리 집단 함수 검색 결과의 합이나 개수 등 요약 정보를 제공하는 함수로 COUNT, SUM, MAX, MIN, AVG 가 있다. 집단 함수는 SELECT 절 만이 아닌 WHERE 절에도 올 수 있다. 일반적으로 집단 함수는 null 값은 제외하고 계산한다. 만약 전체가 null 이면 null 값을 돌려주지만 COUNT인 경우에는 0을 돌려준다. 사용 예시 1. 직원의 급여 합, 급여 최대값, 급여 최솟값, 급여 평균을 검색하라 SELECT SUM(Salary), Max(Salary), MIN(Salary), AVG(Salary) FROM EMPLOYEE; 2. 직원의 수를 검색하라 SELECT COUNT(*) FROM EMPLOYEE; 3. 급여 종류의 수를 검색하라 SELECT(DISTINCT Salary..
SQL 중첩 쿼리와 조인 쿼리 중첩 쿼리 SQL 문의 WHERE 절에 다른 SQL 문이 들어 간 질의문을 중첩 쿼리라고 한다. 외부 쿼리와 중첩 쿼리에 같은 이름의 애트리뷰트가 있다면 기본적으로 가장 가까운 애트리뷰트로 간주한다. 중첩 쿼리는 마치 루프를 도는 것 처럼 작동한다. 중첩 쿼리 안에서는 외부 쿼리의 필드는 마치 하나의 고정된 것 처럼 작동합니다. DELETE 문이나 UPDATE 문에 한 테이블이 아닌 여러 테이블에 대한 조건이 들어가야 하는 경우 중첩쿼리를 이용하면 된다. DELETE FROM EMPLOYEE WHERE Dno IN (SELECT Dnumber FROM DEPARTMENT WHERE Dname='Research'); 조인 쿼리 WHERE 절에 Join Condition을 넣는 대신에 FROM 절에 JOIN..
SQL 기본적인 질의어 정리 SELECT 문 테이블에서 특정 튜플들을 검색할 때 사용하는 질의어 입니다.. [기본 형태] SELECT FROM WHERE ; FROM -> WHERE -> SELECT 순서로 작동합니다. 대상 테이블을 찾고 특정 조건에 맞는 튜플들을 찾은 후 원하는 애트리뷰트를 추출합니다. WHERE 절을 생략하는 경우에는 FROM 절의 테이블들을 cartesian product한 결과를 보여줍니다. 테이블의 모든 애트리뷰트들을 검색하고 싶다면 * 을 사용하면 됩니다. SQL 에서 table은 꼭 집합이 필요가 없습니다. 중복을 허용합니다. 중복 제거를 위해 정렬이 필요한데 정렬 연산을 굉장히 비싼 연산이기 때문입니다. 유저가 중복을 원하는 경우도 있습니다. 집단 함수에소 중복을 제거해 버리면 결과가 달라져 버립니다..
SQL의 DDL문 정리 DDL 문 정리 DDL 이란 데이터 정의어로 간단히 말하면 테이블을 만들고 (CREATE) 삭제하고 (DROP) 수정하는 (ALTER) 역할을 하는 명령어를 말합니다. CREATE 명령어 테이블 또는 도메인을 생성하는 명령어입니다. CREATE TABLE EMPLOYEE -- 테이블 생성 CREATE DOMAIN SSN_TYPE AS CHAR(9) -- 도메인 생성 도메인을 정의하면 동일한 도메인을 갖는다는 것을 좀 더 명시적으로 표현해줄 수 있습니다. 하지만 시스템에 따라서 사용하지 못하는 경우도 있습니다. [CREATE 명령어 예시] CREATE TABLE EMPLOYEE ( FnameVARCHAR(15)NOT NULL, MinitCHAR, LnameVARCHAR(15)NOT NULL, SsnCHAR..
관계형 데이터 모델 정리 Relational Data Model 관계형 데이터 모델이란 릴레이션의 집합으로 된 데이터베이스를 말합니다. 여기서 릴레이션은 쉽게 말하면 표라고 할 수 있습니다. 릴레이션에는 행과 열이 있고 행을 구분하기 위한 식별자와 열을 구분하기 위한 애트리뷰트가 있습니다. 도메인 (Domain) : 도메인이란 애트리뷰트에 들어갈 수 있는 값의 범위를 말합니다. 릴레이션 스키마 (Relational Schema) : 릴레이션 구조를 간단히 보여주는 형식입니다. (테이블의 틀에 대한 정보) STUDENT(Name, Ssn, Home_phone, Addressm, Office_phone, Age, Gpa) 이런 형태를 하고 있습니다. 차수 (Degree) : 애트리튜트의 수를 말합니다. 위의 테이블은 7차 릴레이션입..

반응형