[TIL] 키/무결성/트랜잭션

vvo_ter·2024년 9월 2일
0

daily-cs

목록 보기
5/6
post-custom-banner

데이터베이스를 정의하세요

  • Stored Data: 컴퓨터에 저장되어 실시간 접근 가능
  • Integrated Data: 중복된 데이터 제거
  • Operational Data: 존재 가치가 확실한 자료의 모임
  • Shared Data: 여러 사람이 공유하고 통합 및 관리

데이터베이스 시스템의 목적은 무엇인가요?

파일 시스템의 단점을 극복하기 위해서입니다.

(DBMS의 장점)

  • 데이터의 공유
  • 데이터 중복 최소화: 통합 및 관리하여 자료의 중복과 데이터 중복을 최소화할 수 있다
  • 보안성: 인가된 사용자들만 접근할 수 있도록 계정 관리 또는 접근 권한을 설정할 수 있다

키(Key)의 종류에는 어떤 게 있나요?

우선, 키란 검색, 정렬시 튜플을 구분할 수 있는 속성값입니다.

  • 슈퍼키: 유일성만 만족
  • 후보키: 유일성 + 최소성 만족
  • 후보키 중에서 하나를 기본키로 정하고, 나머지는 대체키
  • 외래키는 다른 릴레이션의 기본키를 참조하는 속성

예를 들어, <학생> 릴레이션에서 '학번'이나 '주민번호'는 기본키로 사용할 수 있으므로 후보키가 될 수 있습니다. '학번'을 기본키로 정의하면 '주민번호'는 대체키가 됩니다. 이때 슈퍼키는 '학번', '주민번호', '학번+주민번호', '학번+주민번호+성명' 등으로 구성할 수 있습니다.

무결성이란 무엇입니까?

데이터의 결함이 없는 상태로, 중복이나 누락이 없는 상태인 정확성, 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태인 일관성이 유지되는 것을 의미합니다.

종류로는 개체 무결성, 참조 무결성, 도메인 무결성, 사용자 정의 무결성이 있습니다.

개체 무결성은 기본키와 관련된 특징으로, 모든 테이블의 기본키는 유일하며 NULL이나 중복값을 가질 수 없음을 의미합니다. 이로서, 각 행의 고유성을 보장할 수 있습니다.

참조 무결성은 외래키와 관련된 특징으로, 참조되는 테이블의 기본 키가 수정되거나 삭제될 경우 참조하는 테이블의 외래 키도 영향을 받는다는 것을 의미합니다.

  • RESTRICTED/CASCADE/SET NULL

도메인 무결성은 필드의 유효한 범위, 타입, 형식을 지정하여 데이터의 일관성과 정확성을 보장합니다.

트랜잭션이란 무엇입니까?

트랜잭션은 데이터베이스관리 시스템에서 데이터를 바꾸는 작업 단위로서 ACID와 같은 특징을 가집니다.

  • Atomicity (원자성) : 트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야 한다.
  • Consistency (일관성) : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지한다.
  • Isolation (고립성) : 두 개 이상의 트랜잭션이 동시에 발생할 때, 서로의 연산에 영향을 주면 안 된다.
  • Durability (영구성) : 커밋된 트랜잭션의 내용은 영구히 반영된다.

트랜잭션의 격리수준에 대해 말해주세요.

동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것을 트랜잭션의 격리 수준이라고 합니다.

  • Serializable
    가장 엄격한 격리 수준으로, 트랜잭션을 순차적으로 진행시킨다. 여러 트랜잭션이 동일한 레코드에 동시 접근할 수 없으므로, 어떠한 데이터 부정합 문제가 발생하지 않는다. 하지만 동시 처리 성능이 매우 떨어지므로 극단적으로 안전한 작업이 아니라면 사용하지 않는다.

  • Repeatable Read
    변경 전의 레코드는 언두 공간에 백업된다. 변경 전/후 데이터가 모두 존재하여 이를 MVCC(다중 버전 동시성 제어)라고 부른다.
    나중에 실행된 트랜잭션에 의해 값이 변경됐을 때 언두로그를 참고하여 조회하므로 한 트랜잭션 내에 동일한 결과를 보장하지만, 새로운 레코드를 추가하거나 삭제하는 경우 부정합이 생길 수 있는데, 이를 유령 읽기(Phantom Read)라고 한다.
    MySQL의 경우 갭 락을 통해 해당 문제가 잘 발생하지 않는 것으로 알 고 있다.

  • Read Committed
    커밋된 데이터만 조회할 수 있어서 Non-Repeatable Read 문제도 발생하는데, 이는 동일 트랜잭션에서 반복 읽기를 수행했을 때 결과 값이 바뀌는 문제이다.

  • Read Uncommitted
    커밋하지 않은 데이터 조차 접근할 수 있는 격리 수준으로 Dirty Read가 발생한다.
profile
's Coding Memory
post-custom-banner

0개의 댓글