MySQL 로 배우는 데이터베이스 개론과 실습 (- 박우창, 남송휘, 이현룡 지음) 교재의 Chapter 별 요약과 연습문제입니다.
연습문제 해답은 하단에 있습니다. 오답이 있다면 거리낌없이 지적해주세요!
CH02 데이터 베이스 시스템의 개념 요약
릴레이션(relation)
관계 데이터 모델의 핵심적인 개념으로 행과 열로 구성된 테이블.
릴레이션 스키마
관계 데이터베이스의 릴레이션이 어떻게 구성되는지 어떤 정보를 담고 있는지에 대한 기본적인 구조를 정의.
테이블에서 스키마는 테이블의 첫 행인 헤더(header)에 나타나며 각 데이터의 속성, 자료 타입 등의 정보를 담고 있다.
릴레이션 인스턴스
릴레이션 스키마실제로 저장되어 있는 데이터의 집합.
관계 데이터베이스 시스템
관계 데이터 모델을 컴퓨터 시스템에 구현한 것. 관계 데이터 모델은 데이터를 2차원 테이블 형태인 릴레이션으로 표현하며, 릴레이션에 대한 제약조건(contraints)와 관계 연산을 위한 관계대수(relational algebra)을 정의함.
키
▶ 슈퍼키(super key): 튜플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합.
▶ 후보키(candidate key): 튜플을 유일하게 식별할 수 있는 하나의 속성의 최소 집합.
▶ 기본키(Primary key, PK): 여러 후보키 중에서 하나를 선정하여 대표로 삼는 키.
▶ 대리키(surrogate key): 일련번호와 같은 가상의 속성을 만들어서 기본키로 삼는것. 인조키(artificial key)라고도 함.
▶ 외래키(foreign key, FK): 다른 릴레이션의 기본키를 참조하는 속성.
무결성 제약조건
▶ 도메인 무결성 제약조건: 도메인 제약(domain constraint). 모든 튜플은 릴레이션 스키마에서 정의된 각 속성의 도메인에 지정된 값만을 가져야 함.
▶ 개체 무결성 제약조건: 기본키 제약(primary key constraint). 기본키는 NULL 값을 가져서는 안 되며, 릴레이션 내에 오직 하나의 값만 존재해야 함.
▶ 참조 무결성 제약조건: 외래키 제약(foreign key constraint).자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 속성의 도메인이 동일해야 하며 자식 릴레이션의 값 변경 시 부모 릴레이션의 값에 제약을 받는다.
참조 무결성 제약조건의 옵션
부모 릴레이션에서 투플을 삭제할 경우 참조 무결성 제약 조건을 수행하기 위한 네 가지 옵션은 아래와 같다.
▶ RESTRICTED: 삭제 작업 거부
▶ CASCADE: 자식 릴레이션에서 관련 튜플 삭제
▶ DEFAULT: 자식 릴레이션의 속성값이 미리 설정해둔 다른 값으로 자동으로 배정됨.
▶ NULL: 자식 릴레이션의 속성값을 NULL 로 변경.
관계대수
릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어.
셀렉션(Selection)
릴레이션의 투플을 추출하기 위한 연산. 기호는 σ
프로젝션(Projection)
릴레이션의 속성을 추출하기 위한 연산. 기호는 π.
집합 연산
수학의 집합과 동일한 연산으로 합집합(union), 교집합(intersection), 차집합(difference), 카티전 프로덕트(cartesian product) 등이 있다.
조인
두 릴레이션의 공통 속성을 기준으로 속성값이 같은 투플을 수평으로 결합하는 연산이다.
▶ 내부조인(Inner Join): 주어진 조건을 만족하는 두 릴레이션의 행을 반환하는 데 사용됩니다. 가장 널리 사용되는 조인 작업이며 기본 조인 유형으로 간주할 수 있습니다. 세타, 자연, 동등, 세미 조인이 이너조인이다.
- 세타조인(Theta Join): 두 릴레이션의 속성값을 비교해서 조건(=, ≠, ≤ , ≥ , <, >)에 만족하는 투플을 반환.
- 동등조인(EQUI Join): 세타 조인에서 = 연산자를 사용한 조인.
- 자연조인(Natural Join): 동등조인에서 조인에 참여한 속성이 두 번 나오지 않도록 중복된 속성을 제거한다.
- 세미조인(Semi Join): 자연조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환. 닫혀 있는 쪽의 결과가 반환됨.
▶ 외부조인(Outer Join): 자연조인 시 조인에 실패한 투플을 모두 보여주되, 값이 없는 대응 속성은 NULL 값을 채워서 반환한다.
- Left Outer Join: 왼쪽 테이블의 모든 값이 출력.
- Right Outer Join: 오른쪽 테이블의 모든 값이 출력.
- Full Outer Join: 왼쪽, 오른쪽 테이블의 모든 값이 출력.
디비전(Division)
속성 A와 B 로 이루어진 릴레이션 AB 과 속성 B 로 이루어진 릴레이션 C 의 디비전 연산은 릴레이션 AB 의 속성 B 값과 서로 동일하게 대응하는 릴레이션 AB 의 속성 A 의 투플들을 반환한다.
CH02 데이터 베이스 시스템의 개념 연습문제
1. 관계 데이터 모델의 릴레이션에 대한 설명 중 옳지 않은 것은?
답: 2
릴레이션은 어떤 정보가 담길지를 정의하는 릴레이션 스키마(shcema)와 스키마에 실제로 저장된 데이터인 인스턴스(instance) 로 구성됨. 릴레이션 스키마를 내연(intension), 헤더라고 하고 릴레이션 인스턴스를 외연(extension), 데이터 라고 한다.
2. 릴레이션의 특징으로 알맞은 것은?
답: 4
릴레이션에서 속성은 단일 값을 가지고, 서로 다른 값을 가진다. 한 속성은 모두 같은 도메인을 가지며 속성의 순서는 상관없다. 릴레이션 내의 중복된 투플은 허용하지 않으며, 투플의 순서는 상관없다.
3. 하나의 속성이 가질 수 있는 값을 총칭하여 무엇이라 하는가?
답: 3
릴레이션에서 도메인은 속성이 가질 수 없는 값의 집합이다.
4. 외래키(FK)에 대한 설명으로 옳은 것은?
답: 1
외래키(FK)는 한 릴레이션이 다른 릴레이션의 기본키(PK)을 참조하는 속성이다. 이것으로 관계 데이터 모델의 특징인 릴레이션 간의 관계(relationship)을 표현한다. 외래키가 성립하기 위해서는 참조하고 참조되는 양쪽 릴레이션의 도메인이 같아야 한다.다른 릴레이션의 기본키를 참조하는 외래키는 참조되는 릴레이션의 기본키와 달리 NULL 값을 가질 수 있다.
5. 한 릴레이션의 기본키를 구성하는 어떠한 속성값도 NULL 이나 중복값을 가질 수 없다는 것을 의미하는 제약조건은?
답: 1
개체 무결성 제약조건(Entity Integrity Constraints), 기본키 제약(Primary key Constraints) 라고도 한다.
6. 릴레이션에서 특정 속성에 해당하는 열을 선택하는데 사용하며, 릴레이션의 수직적 부분 집합을 반환하는 관계대수 연산자는?
답: 1.
프로젝션(Projection, π)은 릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자이다.
7. 릴레이션 C 가 릴레이션 A(X, Y)와 B(Y, Z)를 자연조인한 결과일 때 다음 중 맞는 설명을 모두 고르시오.
자연 조인은 동등 조인(조인에 참여하는 두 릴레이션의 속성값이 같은 투플을 반환)에서 중복되는 두번째 속성을 제거하는 것이다. 자연 조인의 결과 차수(degree)는 {두 릴레이션의 차수의 합 - 1} 이다.
8. 다음 용어를 설명하시오.
(1) 릴레이션(relation)
행과 열로 구성된 테이블
(2) 스키마(schema)
관계 데이터베이스의 릴레이션이 어떻게 구성되어 있는지어떤 정보를 담고 있는지에 대한 기본적인 구조. 릴레이션 스키마는 릴레이션에 어떤 정보가 담길지 결정한다.
(3) 릴레이션 인스턴스(relation instance)
릴레이션 스키마에 실제로 저장된 데이터의 집합.
(4) 릴레이션 차수(degree)와 카디날리티(cardinality)
차수는 속성(column)의 개수, 카디날리티는 투플(row)의 개수
(5) 도메인(domain)
속성이 가질 수 있는 값의 집합(범위)
(6) 투플(tuple)
릴레이션에서 한 행을 tuple 이라고 함.
9. 릴레이션에 대한 다음 물음에 답하시오.
(1) 릴레이션 스키마와 릴레이션 인스턴스의 차이점을 설명하시오.
릴레이션 스키마는 릴레이션에 어떤 데이터가 담길지를 결정하는 것이고, 릴레이션 인스턴스는 릴레이션 스키마에 실제로 저장된 데이터의 집합.
(2) 도메인 제약 조건을 설명하시오.
도메인 제약이라고도 하며 릴레이션 내의 투플들이 각 속성의 도메인에 적합한 값을 가져야 한다는 조건이다. SQL 문에서 데이터 type, null/not null, 기본값(default), 체크(check) 등을 사용하여 지정할 수 있다.
(3) 기본키 제약 조건과 외래키 제약조건을 설명하시오.
기본키 제약 조건은 개체 무결성 제약이라고도 하며 기본키는 NULL 값을 가져서는 안되고 릴레이션 내에 오직 하나의 값만 존재해야 한다는 제약 조건이다.
외래키 제약 조건은 참조 무결성 제약이라고도 하며 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 같아야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다는 제약 조건이다.
(4) 참조 무결성 제약조건의 옵션 네가지를 설명하시오.
부모 릴레이션에서 투플을 삭제할 경우 아래 4가지 옵션에 따라 반응한다.
- RESTRICTED: 삭제가 거부됨.
- CASCADE: 해당 키를 외래키로 가진 자식 릴레이션 투플도 같이 삭제됨.
- DEFAULT: 해당 키를 외래키로 가진 자식 릴레이션 투플의 값이 미리 지정한 기본값으로 변경됨.
- NULL: 해당 키를 외래키로 가진 자식 릴레이션 투플의 값이 NULL 이 됨.
(5) 후보키와 기본키의 차이점을 설명하시오.
후보키(Candidate key) 는 투플을 유일하게 식별할 수 있는 속성의 최소 집합이다.
기본키(Primary key)는 후보키 중 하나를 대표로 삼는 키이다.
즉, {후보키 ⊃ 기본키} 관계라고 할 수 있다. 후보키가 하나뿐이라면 그 후보키를 기본키로 사용하지만 여러 개라면 릴레이션의 특성을 반영하여 하나를 선택하여 사용한다. 기본키는 릴레이션을 대표하므로 선택 전 여러 사항을 고려해야 한다.
10. 사원(주민등록번호, 사원번호, 사원이름, 주소, 생년월일) 릴레이션이 있다. 기본키는 (사원이름, 생년월일) 이고, 그 밖의 대체키 1은 주민등록번호, 대체키 2는 사원번호이다. 다음 물음에 답하시오.
(1) (주민등록번호, 주소)는 후보키인가? 그 이유는 무엇인가?
(주민등록번호, 주소)는 후보키가 아니다. 후보키(Candidate key)는 투플을 유일하게 식별할 수 있는 속성의 최소 집합인데 사람마다 주민등록번호는 unique 하므로 주민등록번호만으로도 투플을 유일하게 식별할 수 있기 때문이다. 그러므로 (주민등록번호, 주소)는 후보키가 아니고 수퍼키이다.
(2) 사원번호는 수퍼키인가? 그 이유는 무엇인가?
사원번호는 수퍼키이다. 수퍼키(super key)는 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합이다. 대체키(alternate key)는 기본키로 선정되지 않은 후보키를 말한다. 즉, {수퍼키 ⊃ 후보키 ⊃ 대체키} 의 관계가 성립하기 때문에 사원번호는 대체키이므로 후보키이면서 수퍼키이다.
(3) 생년월일은 NULL 값을 가질 수 있는가?
NULL 값을 가질 수 없다. 개체 무결성 제약조건(기본키 제약 = Primary key constraint) 에 의해서 기본키는 NULL 값을 가지지 않아야 하고 유일한 값이어야 한다.
(4) 주소는 NULL 값을 가질 수 있는가?
NULL 값을 가질 수 있다. 릴레이션에서 NULL 값을 가지면 안 되는 경우는 위의 c 에서처럼 주소가 기본키일 때이다.
11. 다음 릴레이션에서 더 이상 삽입되는 데이터가 없다고 가정하고 다음 물음에 답하시오.
(1) 릴레이션 R 과 S 의 후보키를 모두 보이시오.
R 의 후보키는 (A), (A,B), (A,C), (A, B, C) 이다. S 의 후보키는 (C,D), (C,E), (C,D,E) 이다.
(2) 릴레이션 R 과 S 의 기본키는 어떤 것이 좋을지 선택하시오.
(A), (C, D)
릴레이션 R 에서는 A가 기본키로 쓰이는 것이 좋을 것이다. A 가 어떻게 데이터가 추가되어 가는지에 대한 정보는 알 수 없지만 현 릴레이션에서는 1씩 증가하고 있는 규칙이 발견되어 적합해 보이며 데이터의 양이 많지 않을 때 별다른 이유가 없으면 단일의 속성을 기본키로 선택하는 것이 바람직하다.
릴레이션 S 에서는 가능한 후보키 중 어떤 것을 기본키로 선택해도 크게 다를 것이 없다.
12. 다음 릴레이션에서 관계대수식의 결과를 작성하시오.
A | B | C |
a2 | b1 | c1 |
A | B |
a1 | b1 |
a2 | b1 |
a3 | b1 |
a4 | b1 |
A | B | C | C | D | E |
a1 | b1 | c1 | c1 | d2 | e1 |
a2 | b1 | c1 | c1 | d1 | e2 |
a3 | b1 | c2 | c2 | d3 | e3 |
a4 | b1 | c3 | c3 | d3 | e3 |
13. 다음 수강신청 관련 릴레이션에 대한 질의문을 관계대수식으로 표현하시오.
학생(학번, 이름, 전공, 학년)
수강(과목코드, 학번, 수강학기, 성적)
과목(과목코드, 과목이름, 강의실, 요일, 담당교수)
(1) 과목코드가 1234이고 성적이 A 인 모든 학생의 학번을 보이시오.
(2) 과목코드가 1234이고 과목을 등록한 학생의 이름과 전공을 보이시오.
(3) 과목 1234 에 등록하지 않은 학생의 이름을 보이시오.
(4) 모든 과목에 등록한 학생의 이름을 보이시오.
14. [극장 데이터베이스] 다음은 네 개의 지점을 가진 극장 데이터베이스로, 밑줄 친 속성은 기본키이다.
극장(극장번호, 극장이름, 위치)
상영장(극장번호, 상영관 번호, 영화제목, 가격, 좌석수)
예약(극장번호, 상영관 번호, 고객번호, 좌석번호, 날짜)
고객(고객번호, 이름, 주소)
(1) 각 테이블에서 외래키를 찾아보시오.
상영장: 극장번호
예약: 극장번호, 고객번호, {극장번호, 상영관번호}
(2) 각 테이블에 저장될 데이터를 세 개씩 적어보시오. 예를 들면 극장의 경우는 다음과 같다.
극장번호 | 극장이름 | 위치 |
1 | 대한 | 강남 |
2 | 씨티 | 잠실 |
3 | 씨티 | 강남 |
생략.
(3) 다음 관계대수식이 나타내는 릴레이션은 무엇인지 설명하시오.
6000원 보다 비싼 영화를 상영하는 극장 번호.
극장의 이름, 위치, 상영관번호, 영화제목, 가격, 좌석수.
6000보다 비싼 영화를 상영하는 극장의 이름.
2014년 1월 1일 이후에 예약한 고객의 고객번호, 고객 이름, 고객 주소, 극장번호, 상영관 번호, 고객번호, 좌석번호, 날짜.
강남에 위치한 극장에 예약을 한 고객이름과 해당 극장번호.
(4) 다음 물음에 대하여 관계대수식을 작성하시오.
① 모든 극장의 이름과 위치를 보이시오
② 가격이 7,000 원 이하인 영화 제목을 보이시오.
③ 모든 고객의 이름과 주소를 보이시오.
④ '강남' 에 위치한 극장에서 상영 중인 영화 제목을 보이시오.
⑤ '강남' 에 위치한 극장에 예약을 한 고객의 이름을 보이시오.
15. [판매원 데이터베이스] 다음 릴레이션을 보고 물음에 답하시오.
Salesperson 은 판매원, Order 는 주문, Customer 는 고객을 나타낸다. 밑줄 친 속성은 기본키이고 custname 과 salesperson 은 각각 Customer.name 과 Salesperson.name 을 참조하는 외래키이다.
Salesperson(name, age, salary)
Order(number, custname, salesperson, amount)
Customer(name, city, industrytype)
(1) 모든 판매원(Salesperson)의 이름을 보이시오.
(2) 고객 ‘홍길동’의 주문을 수주한 판매원의 이름을 보이시오.
(3) 주문이 있는 판매원의 이름을 보이시오.
(4) 주문이 없는 판매원의 이름을 보이시오.
(5) 고객 ‘홍길동’의 주문을 수주한 판매원의 나이를 보이시오
(6) 나이가 25살인 판매원에게 주문한 고객의 city 값을 보이시오.
(7) 판매원의 이름과 그 판매원에게 주문을 한 고객의 이름을 보이시오. 단, 주문이 없는 판매원도 포함하여 구한다.
16. [기업 프로젝트 데이터베이스] 다음 릴레이션을 보고 물음에 답하시오.
Employee 는 사원, Department 는 부서, Project 는 프로젝트 내용, Workers는 사원이 프로젝트에 참여한 내용을 나타낸다. 한 사원이 여러 프로젝트에서 일할 수 있고, 한 프로젝트에서 여러 사원이 일할 수 있다. hours-worked 속성은 각 사원이 각 프로젝트에서 일한 시간을 나타낸다. Department 의 manager 속성에는 empno 값이 저장되어 있다고 가정한다.
Employee(empno, name, phoneno, address, sex, position, deptno)
Deparment(deptno, deptname, manager)
Project(projno, projname, deptno)
Works(empno, projno, hours-worked)
(1) 각 릴레이션에서 기본키를 정하시오
Employee → empno
Department → deptno
Project → projno
Work → {empno, projno}
(2) 릴레이션 간의 관계를 살펴보고 외래키를 찾아보시오.
Employee → deptno (Department 의 기본키)
Department → manager (Employee 의 기본키)
Project → deptno (Department의 기본키)
Work → {empno, projno} (각각 Employee 와 Project 의 기본키)
(3) 다음 질문에 대하여 관계대수식을 작성하시오.
① 모든 직원의 이름을 보이시오.
② 여자 직원의 이름을 보이시오.
③ 팀장(manager)의 이름과 주소를 보이시오.
④ IT 부서(Department)에서 일하는 직원의 이름과 주소를 보이시오.
⑤ '미래' 프로젝트에서 일하는 직원의 이름을 보이시오.
'데이터베이스' 카테고리의 다른 글
MySQL로 배우는 데이터베이스 개론과 실습 Ch03 데이터베이스 프로그래머 요약 (0) | 2023.08.20 |
---|---|
[M1 Mac] docker 에 mysql, 로컬에 MariaDB MySQLWorkbench, DBeaver 연결하기 (0) | 2023.08.19 |
MySQL로 배우는 데이터베이스 개론과 실습_Ch01 데이터베이스 시스템의 개념 요약, 연습문제 (0) | 2022.11.07 |