데이터베이스 기초

E-R 다이어그램에서 학생과 과목 사이에 '한 학생은 여러 과목을 수강하고, 한 과목은 여러 학생이 수강한다'는 다대다 관계가 있다. 이 관계를 관계형 데이터베이스의 표로 구현하는 방법으로 적절한 것은?

  1. A학생번호와 과목번호를 외래 키로 갖는 수강 표를 새로 만든다
  2. B학생 표에 과목번호 열을 하나 추가한다
  3. C과목 표에 학생번호 열을 하나 추가한다
정답과 해설 보기

정답: A. 학생번호와 과목번호를 외래 키로 갖는 수강 표를 새로 만든다

E-R 다이어그램은 데이터베이스에서 관리하는 대상(엔터티)과 엔터티 사이의 관계(릴레이션십)를 그림으로 나타낸 것으로, 관계에는 1대1, 1대다, 다대다 같은 다중도(카디널리티)가 있습니다. 1대다 관계는 다 쪽 표에 1 쪽의 기본 키를 외래 키로 갖게 하면 나타낼 수 있습니다(예를 들어 사원 표에 부서코드를 갖게 한다). 그러나 다대다 관계는 어느 한쪽 표에 열을 하나 추가하는 것만으로는 학생 한 명당 과목 하나(또는 과목 하나당 학생 한 명)밖에 기록할 수 없습니다. 그래서 학생번호와 과목번호를 외래 키로 갖는 수강 표(연관 엔터티)를 사이에 두고, 학생과 수강, 과목과 수강이라는 2개의 1대다 관계로 분해합니다. 수강 표의 기본 키는 학생번호와 과목번호의 조합으로 하는 것이 일반적입니다.

이 분야 연습하기 분야로 돌아가기

데이터베이스 기초의 다른 문제

  1. 계좌 표에서 트랜잭션을 시작하고, 계좌 A의 잔액에서 300을 빼는 UPDATE와 계좌 B의 잔액에 300을 더하는 UPDATE를 실행했다. 그 후 COMMIT 대신 ROLLBACK을 실행했다. 계좌 표는 어떻게 되는가?
  2. 트랜잭션이 가져야 할 ACID 특성 중 '계좌 A에서 출금하여 계좌 B에 입금하는 이체 처리가, 도중에 장애가 일어나도 둘 다 수행되거나 전혀 수행되지 않거나 둘 중 하나가 된다'는 성질은?
  3. 재고 표에서 어떤 상품의 재고 수는 10이다. 트랜잭션 T1은 재고 수를 읽어 3을 뺀 값을 쓰고, T2는 재고 수를 읽어 5를 뺀 값을 쓴다. 락을 걸지 않고 T1의 읽기, T2의 읽기, T1의 쓰기, T2의 쓰기 순서로 실행되었을 때 최종 재고 수는 얼마가 되는가?
  4. 트랜잭션을 동시에 실행했을 때 일어나는 문제 중 더티 리드에 대한 설명으로 올바른 것은?
  5. 트랜잭션 T1이 SELECT COUNT(*) FROM 주문 WHERE 금액 >= 1000을 실행했더니 8건이었다. 그 직후 T2가 금액 2000인 주문 행을 INSERT하고 커밋했다. T1이 같은 SELECT 문을 다시 실행하자 9건이 되었다. 이 현상은?