데이터베이스 Q&A

똘맹·2023년 8월 10일

CS 스터디

목록 보기
13/20
post-thumbnail
  1. 관계 데이터베이스에서 정규화를 하는 이유에 대해 설명해주세요.

하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정이 정규화이다. 이는 데이터 중복을 최소화하기 위해 사용된다. 정규화 과정을 거치게 되면 특정 조건을 만족하는 릴레이션의 스키마 형태인 정규형을 만족하게 된다. 데이터베이스 변경 시 이상 현상을 제거하고, 구조 확장 시 재 디자인을 최소화할 수 있기도 하다.

++<정규화의 단점>
     릴레이션의 분해로 인해 JOIN 연산이 많아진다. 이로 인해 질의에 대한 응답 시간이 느려질 수 있다.



  1. RDBMS와 NOSQL의 차이와 각각 어떤 경우에 사용하면 좋을 지 설명해주세요.

스키마의 유무가 가장 큰 차이라고 할 수 있다. NOSQL은 단순하면서 많은 데이터, RDBMS는 데이터 구조가 명확하고, 변경 여지가 없으며 스키마가 중요한 경우에 사용하는 것이 좋다. 데이터가 자주 변경되는 시스템에 적합하다.

정확한 데이터 구조를 알 수 없고 데이터 구조가 변경/확장될 수 있는 경우에는 NOSQL을 사용하는 것이 좋다. 스케일아웃을 통해 확장이 가능하기 때문에 대규모 데이터의 저장이 필요한 경우에도 NOSQL이 적합하며, 빠른 검색 측면에서도 NOSQL이 유리하다.



  1. 완전 함수적 종속이란 무엇인지 설명해주세요.

    X->Y라고 가정할 때, X의 어떠한 애트리뷰트라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우를 말한다.
    즉, 키가 아닌 열들이 각각 후보키에 대해 결정되는 릴레이션 형태를 말한다.

++<함수적 종속성>
     어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계(속성 B는 속성 A에 종속한다)



  1. 무결성에 대해 설명해주세요.

데이터의 정확성, 일관성, 유효성을 유지하는 것을 말한다. 무결성이 유지될 때 DB에 저장된 데이터 값과 거기에 해당하는 현실 세계의 실제 값이 일치하는지 신뢰할 수 있다.

++<무결성의 종류>
     → 개체 무결성(기본 키로 선택된 필드는 빈 값 허용X)
     → 참조 무결성(서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지)
     → 도메인 무결성(테이블에 존재하는 필드의 무결성을 보장하기 위한 것으로 올바른 데이터가 입력되었는지 체크)
     → 고유 무결성(특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 그 속성값은 모두 고유한 값을 가짐)
     → NULL 무결성(특정 속성값에 NULL이 올 수 없다는 조건이 주어진 경우, 그 속성값은 NULL이 될 수 없다는 제약 조건)
     → 키 무결성(한 릴레이션에는 최소한 하나의 키가 존재해야 한다는 제약 조건)



  1. 스키마의 개념에 대해 설명해주세요.

데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합으로, 데이터베이스를 구성하는 데이터 개체(엔티티), 속성(애트리뷰트), 관계(릴레이션십) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.



  1. SELECT 쿼리의 수행 순서에 대해 설명해주세요.
FROM, ON, JOIN
=> WHERE, GROUP BY, HAVING 
=> SELECT 
=> DISTINCT 
=> ORDER BY 
=> LIMIT



  1. DB에서 인덱스 사용 시의 장점과 언제 사용하면 좋을 지 설명해주세요.

레코드 접근과 관련하여 효율적인 검색을 제공한다. 데이터의 양이 많고 검색이 변경보다 빈번한 경우, 인덱스를 걸고자 하는 필드의 값이 다양한 값을 가지는 경우에 인덱스를 사용하는 것이 좋다.



  1. SQL Ingection이 무엇인지, 이를 방지하기 위한 방법은 무엇인지 설명해주세요.

SQL Injection은 공격자가 악의적인 의도를 가지는 SQL 구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 기법이다.

입력값을 검증하여 사용자의 입력이 쿼리에 동적으로 영향을 주는 경우, 입력된 값이 개발자가 의도한 값인지 검증하는 방법이 있고, 저장 프로시저를 사용하는 방식이 있다.

저장 프로시저는 사용하고자 하는 Query에 미리 형식을 지정하는 것을 말한다. 지정된 형식의 데이터가 아니면 쿼리가 실행되지 않기 때문에 보안성이 크게 향상된다.



  1. 트랜잭션의 기능에 대해 설명해주세요.

작업의 완전성을 보장한다. 쿼리를 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 한다. 하나의 트랜잭션은 커밋 혹은 롤백된다.



  1. DBMS가 Index를 어떻게 관리하고 있는 지에 대해 설명해주세요.

B+-Tree로 인덱스를 구현한다.

profile
척척학사가 되고 싶은 똘맹

0개의 댓글