프로그래밍/DB 7

정규화에 대해서

정규화의 배경 한 릴레이션(테이블)에 여러 엔티티(정보를 저장하고 관리하기 위한 집합적인 것)의 애트리뷰트(칼럼)들이 혼합하게 되면 정보가 중복 저장되며, 저장공간이 낭비하게 된다. 중복된 정보로 인해 이상 현상(Anomaly)이 발생하게 된다 갱신 이상 - 삽입 이상 : 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는것이 불가능하다 - 삭제 이상 : 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능하다 - 갱신 이상 : 반복된 데이터 중에 일부를 갱실 할 시 데이터의 불일치가 발생한다 정규화 작업 정규화 작업이란 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업이다 - 제 1 정규화 : 속성의 도메인이 오직 원자값만을 포함 - 제 2 정규화 : 부..

프로그래밍/DB 2021.10.08

관계

관계의 정의 관계(Relationship)를 사전적으로 정의하면 상호 연관성이 있는 상태로 말할 수 있다. 이것을 데이터 모델에 대입하여 정의해 보면, “엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태”라고 할 수 있다. 관계는 엔터티와 엔터티 간 연관성을 표현하기 때문에 엔터티의 정의에 따라 영향을 받기도 하고, 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있다. 엔티티 엔터티란 “업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것(Thing)”으로 설명 인스턴스 인스턴스라는 것은 엔터티의 하나의 값에 해당한다고 정의 관계의 패어링 각각의 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 관계..

프로그래밍/DB 2021.09.15

DDL과 DML, DCL, TCL

DDL(DATA DEFINITION LANGUAGE) 데이터 정의 언어 테이블을 생성하고 생성된 테이블의 구조를 변경하는 명령어 CREATE TABLE : 테이블 생성 CREATE TABLE `practicedb`.`member_tb` ( `member_id` INT NOT NULL, `member_nm` VARCHAR(100) NULL, PRIMARY KEY (`member_id`)); DROP TABLE : 테이블 삭제 DROP TABLE `practicedb`.`member_tb`; ALTER TABLE : 테이블 변경 ALTER TABLE `practicedb`.`member_tb` ADD COLUMN `member_age` INT NULL AFTER `member_nm`; TRUNCATE : 테..

프로그래밍/DB 2021.09.14

인덱스(Index)

인덱스(Index) 인덱스(영어: index)는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다. 인덱스는 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있다. 고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다. 인덱스를 저장하는 데 필요한 디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다. 일반적으로 BTree 인덱스 구조를 사용한다 전체 테이블 스캔과 인덱스 스캔 1. 전체 테이블 스캔(Full Table Scan) : 전체 테이블 스캔 방식으로 데이터를 검색한다는 것은 테이블에 존재하는 모든 데이터를 읽어 가면서 조건에 맞으면 결과로서 추출하고 조건에 맞지 않으면 버리는 방..

프로그래밍/DB 2021.09.14

정규화(Normalization)와 반정규화(De-Normalization)

정규화(Normalization) - 기본적으로 데이터에 대한 중복성을 제거하여 준다 - 데이터를 분해하는 과정이다 - 데이터가 관심사별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징이다 1NF(First Normal Form) 1NF를 만족하려면 도메인이 원자값이어야 한다. 2NF(Second Normal Form) 2NF를 만족하려면 부분적 함수 종속을 제거해야 한다. 3NF(Third Normal Form) 3NF를 만족하려면 이행적 함수 종속을 제거해야 한다. 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미한다. BCNF(Boyce and Codd Normal Form) BCNF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다. 반정..

프로그래밍/DB 2021.09.09

트랜잭션 이해 2 - 격리, 단계, 수준

같은 데이터에 동시 접근 경쟁 상태(Race Condition) - 여러 클라이언트가 같은 데이터에 접근할 때 문제 발생 트랜잭션 격리(Isolation) - 트랜잭션을 서로 격리해서 다른 트랜잭션이 영향을 주지 못하게 함 - 트랜잭션의 격리성은 일관성과 마찬가지로 Lock을 강하게 오래 유지할수록 강화되고, Lock을 최소화할수록 약화된다. 가장 쉬운 방법은 트랜잭션을 순서대로 실행 1. 동시 접근 문제가 없음 2. 하지만 한 번에 한 개 트랜잭션만 처리하므로 성능(처리향) 저하 가능 낮은 단계의 격리성 수준에서 발생할 수 있는 현상들 1. Dirty Read - 다른 트랜잭션에 의해 수정됐지만 아직 커밋되지 않은 데이터를 읽는 것을 말한다. 2. Non-Repeatable Read - 한 트랜잭션 내..

프로그래밍/DB 2021.09.07

트랜잭션 이해

트랜잭션 여러 읽기/쓰기를 논리적으로 하나로 묶는 것 업무 처리를 위한 논리적인 작업 단위 반영은 commit, 반영하지 않을려면 rollback ACID(atomicity, consistency, isolation, durability : 원자성, 일관성, 고립성, 지속성) 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어 원자성(Atomicity) 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태..

프로그래밍/DB 2021.09.05