글 차례
- 관계형 데이터베이스의 구조
- 데이터베이스 스키마
- 키
- 스키마 다이어그램
- 관계형 질의어
- 관계 연산
1.관계형 데이터베이스의 구조
- 관계형 데이터베이스 :
테이블의 모임으로 구성, set of table(relation) - 테이블 (table) = relation
각 table 마다 고유한 이름을 지님
구성 : schema + instance - Schema , 스키마
table의 구조, 속성들의 집합, 자주 안바뀜(정적) - Instance , 인스턴스
tuple들의 집합, 속성의 값들, 자주 바뀜(동적) - tuple
간단한 값의 나열 혹은 값의 리스트
n-투플 : n개의 값의 나열, n-투플이 바로 table의 행 - 속성 attribute
테이블의 열을 의미
릴레이션의 각 속성은 도메인을 지님 - 도메인 domain
각 속성에 대해 허용되는 값들의 집합(범위) - 모든 릴레이션 r에서 r의 모든 속성의 도메인은 원자적이어야한다.
즉, 도메인의 요소가 더 이상 나눠질 수 없는 단일체이다. - 교재의 3~6장에서는 모든 속성이 원자적 도메인을 갖는다고 가정하고 진행한다.
- Null 값
알려지지 않거나 (unknown)
존재하지 않는 (missing) 값
가능하다면, null 값은 제거하는게 좋음 -> 많은 연산 정의에서 복잡성을 야기할 수 있기 때문 - Relation 정렬 X
튜플의 순서는 상관 없다
일반적으로 결과 table은 주 key가 정렬되어 있는 형태
2.데이터베이스 스키마
- 데이터베이스의 논리적 설계 = 데이터베이스 스키마
어떤 한 순간에 데이터베이스에 저장되어 있는 데이터의 스냅샷 = 데이터베이스 인스턴스 - 스키마와 인스턴스를 잘 구별해야 함
- 릴레이션 스키마
프로그래밍 언어의 형 정의에 해당
속성 + 속성이 가지는 도메인 명세
- 릴레이션 인스턴스
프로그래밍 언어의 변수의 값에 해당 - 앞으로, 교재의 릴레이션의 스키마를 표현할 때에는 ()로 간단하게 표현하도록 한다
3.키
- 키 : 튜플을 구분할 방법, 릴레이션의 속성을 이용한다.
튜플의 속성에 해당하는 값이 유일하게 구별 가능해야 함 - 키 종류
수퍼키 Super Key
후보키 Candidate Key
주키 Primary Key
외래키 Foreign Key - Super Key 수퍼키
하나의 릴레이션에서 그 투플을 유일하게 식별할 수 있도록 해주는 하나 혹은 그 이상의 속성들의 집합
관련 없는 속성도 수퍼키에 포함할 수 있다
릴레이션 r의 스키마에 존재하는 속성들의 집합 R이 있다고 가정하면,
r의 부분집합 K가 r의 수퍼기가 되기 위해선,
서로 다른 두 투플의 K의 모든 속성들이 같은 값이 존재해서는 안된다.
즉, 투플 t1과 t2가 r에 존재하고 t1 이 t2와 같지 않다면, t1.K 는 t2.K 여야 수퍼기가 성립된다.
위 예에서 K가 (A,B)일때는 K는 r의 수퍼키가 될 수 없다. 그 이유는 t1과 t2가 A속성에 대한 값이 '가'로 같기 때문
K가 (B,C)이면 K는 r의 수퍼키가 될 수 있다. 그 이유는 t1과 t2의 B와 C가 각각 다르기 때문
- Candidate Key 후보키
여러개의 슈퍼 키 중에서 가장 최소인 집합
후보키의 속성은 수퍼키와 같으나 후보키의 어떤 부분집합도 수퍼 키가 될 순 없다
즉, 수퍼 키의 부분집합이 수퍼 키가 아닌 경우 - Primary Key 주키
릴레이션의 후보키 중에서 릴레이션 안에서 투플을 구별하기 위한 수단으로 선택된 키
주키의 조건은 다음과 같다.
1. 속성들에 대한 값이 중복되면 안된다.
2. 속성들에 대한 값이 절대로 변하지 않아야 한다.
3. 혹은 속성들에 대한 값이 매우 드물게 변하도록 해야 한다. - 수퍼키, 후보키, 주키는 전체 릴레이션의 특성이므로
릴레이션의 어떤 투플도 동시에 키 속성에 대해 같은 값을 가질 수 없다 - 키는 모델링하는 실세계의 제약 조건이다
- 키를 정하는 방법으로 여러 개의 소겅을 동시에 이용하는 방법도 있다.
- 관습적으로, 릴레이션 스키마의 주 키 속성은 다른 속성보다 앞에 쓴다.
그리고 표현할 때 주키는 밑줄로 표시한다. - Foreign Key 외래키
릴레이션 스키마 r1은 자신의 속성들 중에 다른 릴레이션 r2의 주 키를 포함할 수 있다.
이러한 속성은 r1으로부터 r2를 참조하는 외래 키라고 한다.
릴레이션 r1은 외래키 종속을 가진 참조하는 릴레이션 referencing relation
릴레이션 r2는 외래키를 가진 참조된 릴레이션 referenced relation
- 참조무결성 제약조건
위의 예제2처럼 r1의 D는 r2에서 참조 했다.
이때 r1의 D 속성에 해당하는 값은 반드시 r2의 튜플에 D에 해당하는 값과 같아야 한다.
4. 스키마 다이어그램
- 스키마 다이어그램
데이터베이스 스키마는 주 키와 외래 키 종속성을 시각화한 것
각 표현 방법은 아래와 같다.
릴레이션-네모상자
주키-밑줄
릴레이션 이름-네모상자 위
외래 키 종속성-참조하는 릴레이션의 외래 키 속성으로부터 참조된 릴레이션의 주 키로 화살표 - 교재에서 쓰이는 대학교 데이터베이스 스키마와 스키마 다이어그램
- 참조 무결성 제약조건은 외래 키처럼 스키마 다이어그램에 잘 표현되지 않는다.
7장에서 다룰 개체-관계형 다이어그램에서 표현 가능하다.
5. 관계형 질의어
- 사용자가 db로 정보 요청할 때 사용하는 언어
- 종류
절차식 언어 : 원하는 결과를 얻기 위해 user가 사용해야 할 연산을 시스템에 알려주어야 함
비절차식 언어 : user가 정보를 얻기 위한 구체적인 수행 과정은 기술하지 않고 어떤 정보를 원하는 지만 기술 - 순수 언어 Pure Language
간결하고 형식적, 여러 종류가 있음
관계 대수 relational algebra
튜플 관계 해석 tuple relational calculus
도메인 관계 해석 domain relational calculus - 관계 해석 - 결과를 얻기 위해 술어 논리 사용, 특정 대수 프로시저 사용 X
- 관계 대수 - 하나 or 두 개의 릴레이션을 입력으로 받아 결과로 새로운 릴레이션을 생성하는 연산들
6. 관계 연산
- 관계 대수 기본 연산
selection : 릴레이션에서 조건을 만족하는 tuple(low, 행) 선택
projection : 릴레이션의 특정 속성(column, 열) 선택, 중복된 튜플 제거 (SQL은 default가 중복 허용)
join : 두 릴레이션을 합치는 연산 --> 4장에서 더 자세히 다룸
inner join과 outer join으로 분류할 수 있고, 일반적으로 그냥 join이라 부르면 inner join이라고 본다.
join을 사용할 때에는 join 조건도 함께 사용할 수 있으며 조건은 3가지 경우가 있다
1.natural
2.on < predicate : 조건 >
3.using ( A1, A2, ..., An : A는 속성)
Cartesian product : 카티션곱, ×로 표현, 두 릴레이션의 투플을 합친다. join과 다르게 모든 가능한 경우를 연산
rename ( ρ ) : 카티션 곱의 이름 중복 문제 해결 - 집합 연산 - 전제 조건) 입력하는 table의 스키마 구조가 같아야함, 합집합, 교집합, 차집합 연산이 이에 해당함
- 교집합 연산은 사실 기본 연산이 아니다. 차집합연산 방식으로 사용해야 한다.
- 카티션 곱을 사용할 때 속성 이름이 중복되면 안되므로 입력 테이블의 이름을 앞에 추가하거나
rename 연산으로 이름을 강제로 바꿔주어야 한다. - natural join 은 중복된 속성은 rename 할 필요 없이 한개만 결과 스키마에 보여준다
그리고, 중복된 속성의 값이 같은 튜플만 결과로 출력한다
나머지는 카티션 곱과 유사하게 동작한다 - 집합 함수 종류 -- 3장에서 더 자세히 다룸
sum : 합
avg : 평균
max : 가장 큰
min : 가장 작은
count : 총 수
5장까지 정리되면 join만 따로 자세히 정리할 예정
'Study > Database' 카테고리의 다른 글
[Database System Concepts] 1.소개 - 문제풀이 (0) | 2019.07.24 |
---|---|
[Database System Concepts] 0. (0) | 2019.06.25 |
[MySQL] 커맨드창으로 Database 추가, 사용자 생성 및 권한 설정 (0) | 2019.05.01 |
[이클립스] JDBC 연결 시 한글 깨짐 오류 해결 방법 (0) | 2019.04.16 |
[MySQL] MySQL download 및 설치 방법 (0) | 2019.04.08 |
댓글