데이터베이스를 정의하세요
데이터베이스 시스템의 목적은 무엇인가요?
파일 시스템의 단점을 극복하기 위해서입니다.
(DBMS의 장점)
키(Key)의 종류에는 어떤 게 있나요?
우선, 키란 검색, 정렬시 튜플을 구분할 수 있는 속성값입니다.
예를 들어, <학생> 릴레이션에서 '학번'이나 '주민번호'는 기본키로 사용할 수 있으므로 후보키가 될 수 있습니다. '학번'을 기본키로 정의하면 '주민번호'는 대체키가 됩니다. 이때 슈퍼키는 '학번', '주민번호', '학번+주민번호', '학번+주민번호+성명' 등으로 구성할 수 있습니다.
무결성이란 무엇입니까?
데이터의 결함이 없는 상태로, 중복이나 누락이 없는 상태인 정확성, 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태인 일관성이 유지되는 것을 의미합니다.
종류로는 개체 무결성, 참조 무결성, 도메인 무결성, 사용자 정의 무결성이 있습니다.
개체 무결성은 기본키와 관련된 특징으로, 모든 테이블의 기본키는 유일하며 NULL이나 중복값을 가질 수 없음을 의미합니다. 이로서, 각 행의 고유성을 보장할 수 있습니다.
참조 무결성은 외래키와 관련된 특징으로, 참조되는 테이블의 기본 키가 수정되거나 삭제될 경우 참조하는 테이블의 외래 키도 영향을 받는다는 것을 의미합니다.
도메인 무결성은 필드의 유효한 범위, 타입, 형식을 지정하여 데이터의 일관성과 정확성을 보장합니다.
트랜잭션이란 무엇입니까?
트랜잭션은 데이터베이스관리 시스템에서 데이터를 바꾸는 작업 단위로서 ACID와 같은 특징을 가집니다.
트랜잭션의 격리수준에 대해 말해주세요.
동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것을 트랜잭션의 격리 수준이라고 합니다.
Serializable
가장 엄격한 격리 수준으로, 트랜잭션을 순차적으로 진행시킨다. 여러 트랜잭션이 동일한 레코드에 동시 접근할 수 없으므로, 어떠한 데이터 부정합 문제가 발생하지 않는다. 하지만 동시 처리 성능이 매우 떨어지므로 극단적으로 안전한 작업이 아니라면 사용하지 않는다.
Repeatable Read
변경 전의 레코드는 언두 공간에 백업된다. 변경 전/후 데이터가 모두 존재하여 이를 MVCC(다중 버전 동시성 제어)라고 부른다.
나중에 실행된 트랜잭션에 의해 값이 변경됐을 때 언두로그를 참고하여 조회하므로 한 트랜잭션 내에 동일한 결과를 보장하지만, 새로운 레코드를 추가하거나 삭제하는 경우 부정합이 생길 수 있는데, 이를 유령 읽기(Phantom Read)라고 한다.
MySQL의 경우 갭 락을 통해 해당 문제가 잘 발생하지 않는 것으로 알 고 있다.
Read Committed
커밋된 데이터만 조회할 수 있어서 Non-Repeatable Read 문제도 발생하는데, 이는 동일 트랜잭션에서 반복 읽기를 수행했을 때 결과 값이 바뀌는 문제이다.