1. 관계 데이터 모델
· 관계형 데이터베이스의 모델
· 모든 데이터는 릴레이션(≒테이블)으로 표현
2. 용어
1) 릴레이션 : 릴레이션 스키마 + 릴레이션 인스턴스
2) 릴레이션 스키마
· 속성들의 집합, 릴레이션의 논리적 구조
· 시간에 따라 불변
· 릴레이션 스킴 / 내포
3) 릴레이션 인스턴스
· 일정 시점에서의 투플(tuple)들의 집합
· 시간에 따라 가변
4) 투플(tuple)
· 속성에 해당하는 데이터의 모임
5) 속성(attribute)
· 단순 속성 : 단일값, 관계형 데이터베이스에 사용
· 복합 속성 : 단순 도메인의 결합, 하나의 속성으로 취급
(ex-DATE : YEAR, MONTH, DAY의 결합)
· 속성값은 분해할 수 없는 원자 값
6) 도메인(domain)
· 속성이 취할 수 있는 원자 값들의 집합
ex-학년={1, 2, 3, 4}
3. 릴레이션의 수학적 의미
1) 릴레이션은 도메인 순서쌍 집합의 부분집합
2) 릴레이션의 차수 : 릴레이션을 이루는 속성의 개수
ex-학년의 차수 = 4
3) 카디널러티(Cardinality) : 투플(인스턴스)의 수
ex-학생 릴레이션의 카디널러티 = 5
4) NULL 값
· 정보의 부재를 나타냄
· 아직 알려지지 않은 값, 아직 모르는 값
· 공백(문자값)이나 영(숫자값)과는 다름
4. 릴레이션의 특성
1) 투플의 상이성(Uniqueness of tuples)
· 릴레이션에 포함된 투플은 모두 상이하다.
= 릴레이션에 같은 투플은 존재하지 않는다.
· 모든 속성의 값이 동일한 투플이 존재하면 안된다.
2) 투플의 무순서성(No Ordering of tuples)
· 릴레이션 내의 투플들 간에는 순서가 없다.
3) 속성의 무순서성(No Ordering of tuples)
· 릴레이션 내의 속성들 간에는 순서가 없다.
4) 속성의 원자성
· 모든 속성값은 원자값
· 관계형 데이터 모델은 정규화 릴레이션만 대상으로 함
5. 데이터베이스 키(key)
1) 키
· 릴레이션 내 투플을 유일하게 식별할 수 있는 속성의 집합
· 투플 식별자
· 키 값을 알면 하나의 투플을 알아낼 수 있음
· 데이터가 추가되어도 조건을 만족시키도록 설정
2) 후보키(Candidate key)
· 유일성과 최소성 모두 만족하는 키
· 하나의 속성이라도 제외하면 키 X
· 모든 릴레이션은 적어도 하나의 후보키를 갖음
3) 수퍼키(Super key)
· 유일성은 만족하지만 최소성은 만족하지 않는 키
4) 기본키(Primary Key, PK)
· 후보키 중 설계자가 설정한 키
· NULL 값을 가질 수 없음
· 데이터 접근 방법과 관련해 중요한 의미를 갖음
5) 대체키(Alternate Key)
· 기본키로 지정되지 않은 후보키
6) 외래키(Foreign Key, FK)
· 다른 릴레이션의 기본키인 속성
· NULL 값을 가질 수 있음
** Practice
학번(sno) | 주민번호(jno) | 이름(sname) | 학년(year) | 학과(dept) |
100 | 990103-1111222 | 나수영 | 4 | 컴퓨터 |
200 | 981005-2772343 | 이찬수 | 3 | 전기 |
300 | 000127-3948759 | 정기태 | 1 | 컴퓨터 |
400 | 960301-1234567 | 송병길 | 4 | 컴퓨터 |
500 | 970502-1654321 | 박종화 | 2 | 산공 |
1) 키 : {sno}, {sno, sname}, {sno, year}, {sno, jno}, {sno, dept}, {sno, jno, name}, {sno, name, year} …
=> 총 16개(키 값을 제외한 4개 속성의 부분집합)
2) 후보키 : {sno}
3) 수퍼키 : {sno, year}, {sno, jno}, ……, {sno, name, year, jno, dept}
4) 기본키 : {sno}
5) 대체키 : 없음
* {jno}가 키가 될 수 있을까?
만약, 한 대학에 다른 학과로 재입학할 경우, 중복이 발생
=> 데이터베이스를 사용하는 단체에서 재입학 가능 여부설정
학번(sno) | 주민번호(jno) | 이름(sname) | 학년(year) | 학과(dept) |
100 | 990103-1111222 | 나수영 | 4 | 컴퓨터 |
200 | 981005-2772343 | 이찬수 | 3 | 전기 |
300 | 000127-3948759 | 정기태 | 1 | 컴퓨터 |
400 | 960301-1234567 | 송병길 | 4 | 컴퓨터 |
500 | 970502-1654321 | 박종화 | 2 | 산공 |
700 | 9810005-2772343 | 이찬수 | 1 | IT |
** {jno}가 키가 될 조건 : 재입학을 불가능하도록 함.
-> 주민번호의 중복 X
1) 후보키 : {sno}, {jno}
2) 기본키 : {jno}
3) 대체키 : {sno}
학번(sno) | 주민번호(jno) | 이름(sname) | 학년(year) | 학과(dept) |
100 | 990103-1111222 | 나수영 | 4 | 컴퓨터 |
200 | 981005-2772343 | 이찬수 | 3 | 전기 |
300 | 000127-3948759 | 정기태 | 1 | 컴퓨터 |
400 | 960301-1234567 | 송병길 | 4 | 컴퓨터 |
500 | 970502-1654321 | 박종화 | 2 | 산공 |
700 | 9810005-2772343 | 이진수 | 1 |
전기 |
*** {dept, jno}는 키가 될 수 있을까?
=> 같은 학과로 재입학할 경우 중복 발생
****{dept, jno}가 키가 될 조건
: 같은 학과로 재입학 불가능하도록 함.
-> 학과와 주민번호가 동시에 같은 경우 존재 X
1) 후보키 : {sno}, {dept, jno}
2) 기본키 : {sno}
3) 대체키 : {dept, jno}
6. 무결성 제약(Integrity Constraint)
1) 개체 무결성 제약
: 기본키에 해당하는 속성은 NULL 값이 될 수 없다.
학번(sno) | 이름(sname) | 학년(year) | 학과(dept) |
100 | 나수영 | 4 | 컴퓨터 |
200 | 이찬수 | 3 | 전기 |
300 | 정기태 | 1 | 컴퓨터 |
NULL | 송병길 | 4 | 컴퓨터 |
500 | 박종화 | 2 | 산공 |
-> 부정확한 데이터베이스의 상태 (개체무결성이 지켜지지 않음)
2) 참조 무결성 제약
: 참조할 수 없는 외래키 값을 가져서는 안된다.
= 부모 릴레이션에 있는 키를 사용해야 함.
학번(sno) | 과목번호(cno) | 성적(grade) |
100 | C412 | A |
100 | E412 | A |
200 | C123 | B |
300 | C312 | A |
300 | C324 | C |
300 | C413 | A |
NULL | C312 | A |
NULL | C324 | A |
NULL | C413 | B |
NULL | E412 | C |
500 | C312 | B |
600 | C413 | C |
> 원래의 '학생' 테이블에 600번 학생 존재 X (참조 무결성이 지켜지지 않음)
'CS > 데이터베이스' 카테고리의 다른 글
[DB] 6. SQL Basic (0) | 2022.07.15 |
---|---|
[DB] 5. 관계 대수와 관계 해석 (0) | 2022.06.28 |
[DB] 3. 데이터베이스 시스템의 구성 (0) | 2022.06.03 |
[DB] 2. 데이터베이스 관리 시스템 (0) | 2022.06.03 |
[DB] 1. 정보 환경 (0) | 2022.06.02 |