컴공/데이터베이스
DB 정규화에 쓰이는 functional dependency (함수 종속)
Functional dependency ? 두 attributes 집합 사이의 의존성을 나타내는 개념이 functional dependency(FD)다 예를 들어 설명하겠다 아래는 임직원 정보를 저장하는 EMPLOY 테이블의 스키마(schema)다 empl_id empl_name birth_date position salary EMPLOYEE 테이블에는 총 다섯 개의 attribute가 있는데 이 attribute를 아래와 같이 X, Y 두 집합으로 나눠보겠다 X = {empl_id} Y = {empl_name, birth_date, position, salary} 이제 X와 Y의 관계를 생각해 보자 empl_id는 임직원을 구별하기 위해 부여된 식별자이다 그러므로 empl_id가 동일한데 empl_na..
DB 트랜잭션 isolation 속성과 lost update
트랜잭션 isolation 속성의 의미 트랜잭션의 속성 중에는 isolation 속성이 있다 우리말로 격리라는 뜻을 가진 isolation의 의미는 여러 트랜잭션이 동시에 실행해도 각각의 트랜잭션이 서로 다른 트랜잭션에게 영향을 받지 않고 격리돼서 실행되는 것처럼 동작해야 함을 의미한다 Lost update 현상이란? isolation 속성이 없으면 여러 트랜잭션들이 동시에 실행될 때 예상했던 결과와는 다른 결과가 생긴다 예를 들어보겠다 X의 계좌에는 50이 있고 Y의 계좌에는 10이 있다 만약 X에서 Y에게 40을 이체하는 트랜잭션 1과 X에게 30을 입금하는 트랜잭션 2가 동시에 실행됐다고 가정해 보자 그러면 시간 타이밍에 따라 여러 결과가 나올 수 있는데, 아래는 그중에 한 가지 예다 트랜잭션1 트..
MySQL 트랜잭션 serializable 격리 레벨은 MVCC인가?
일반적으로 MySQL은 MVCC라고 한다 하지만 조금 더 정확히 얘기하면 isolation level에 따라 다른데, read commiited와 repeatable read는 MVCC라고 하지만 read uncommitted와 serializable은 MVCC가 아니라고 얘기한다 MySQL의 serializable 레벨은 MVCC가 아닌가? MySQL에서 serializable 레벨은 MVCC가 아닌 lock으로 동작한다 공식 문서에서 serializable 레벨을 아래와 같이 설명하고 있기 때문이다 This level is like REPEATABLE READ, but InnoDB implicitly converts all plain SELECT statements to SELECT ... FOR S..
DB 트랜잭션의 conflict serializable 이해를 위한 선수 개념
conflict serializable 이해를 위한 선수 개념 왼쪽이 선수 개념이다 scheudle -> conflict operations -> conflict equivalent -> conflict serializable 즉, conflict serializable를 이해하기 위해서는 conflict equivalent이 무엇인지 먼저 알아야 하고 conflict equivalent를 이해하기 위해서는 conflict operations가 무엇인지 먼저 알아야 하고 conflict operations를 이해하기 위해서는 scheudle이 무엇인지 먼저 알아야 한다 각각의 개념들을 매우 간단하게 정리해 보면, schedule ? 여러 transaction들이 동시에 실행될 때 각 transaction..
트랜잭션 ACID 속성 간단히 정리
Atomicity All or Nothing. 트랜잭션의 내부에 있는 모든 operation들이 성공하거나 혹은 아무런 일도 없었던 것처럼 모두 취소돼야 한다는 의미. 어중간하게 일부만 성공해서 DB가 이상한 상태가 되면 안된다는 의미. Consistency 트랜잭션이 실행 후에도 DB 상태가 consistent 해야 한다는 의미. 가령 constraints나 trigger를 사용해서 DB에 어떤 rule을 적용했다면 그 rule을 깨뜨리는 트랜잭션은 DB에 적용되면 안된다는 의미. Isolation 여러 트랜잭션들이 동시에 실행돼도 마치 각각이 혼자 실행되는 것처럼 동작해야한다는 의미. Durability 한번 commit된 트랜잭션 결과는 DB에서 결코 롤백되지도, 사라지지도 않는다는 의미. 심지어 ..