Notice
Recent Posts
Link
Tags
- Django
- spring
- SSL
- AWS
- join
- PYTHON
- spring mvc
- string
- springboot
- 문자열
- 1차원 배열
- DI
- java
- mysql
- spring boot
- ORM
- 자바
- @transactional
- spring security 6
- 스프링
- jpa
- session
- Docker
- nginx
- 스프링부트
- 프로그래머스
- sql
- 데이터베이스
- Git
- select
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Archives
개발하는 자몽
5. 관계 데이터 모델링 본문
위 강의와 데이터베이스 개론(2019, 김연희) 책을 바탕으로 작성하는 글입니다.
관계 데이터 모델의 개념
관계 데이터 모델의 기본 개념
- 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델
- 하나의 개체에 대한 데이터를 하나의 릴레이션(relation)에 저장
관계 데이터 모델의 기본 용어
- 릴레이션(relation)
- 하나의 개체에 관한 데이터를 2차원 테이블의 구조로 저장한 것
- 파일 관리 시스템 관점에서 파일(file)에 대응
- 릴레이션의 열 : 속성 or 애트리뷰트(attribute)
- 파일 관리 시스템에서 해당 파일의 필드(field)에 대응
- 그림 5-1 고객 릴레이션의 속성 : 고객아이디, 고객이름, 나이, 등급, 직업, 적립금
- 릴레이션의 행 : 투플(tuple)
- 파일 관리 시스템에서 해당 파일의 레코드(record)에 대응
- 그림 5-1 고객 릴레이션에서의 각 투플
- 고객 한 명에 대한 실제 속성 값 6개를 모아놓은 것으로, 고객 개체의 인스턴스
- 고객 4명 → 4개의 투플 or 4개의 고객 개체 인스턴스가 존재
- 릴레이션의 도메인(domain)
- 하나의 속성이 가질 수 있는 모든 값의 집합
- 속성 값을 입력 및 수정할 때 적합성의 판단 기준이 됨
- 그림 5-1 고객 릴레이션에서 등급 속성의 값으로 vip, gold, silver, bronze 중 하나만 허용된다면, 네 가지 값을 모아놓은 것이 등급 속성의 도메인이 됨
- 속성이 가질 수 있는 모든 값을 일일이 나열하여 도메인을 정의하기 어려움으로 고객아이디, 고객이름, 나이 등의 속성은 도메인을 정확히 정의하기 어려움
→ 일반적으로 속성의 특성을 고려한 데이터 타입으로 정의
- 속성이 가질 수 있는 모든 값을 일일이 나열하여 도메인을 정의하기 어려움으로 고객아이디, 고객이름, 나이 등의 속성은 도메인을 정확히 정의하기 어려움
- 널(null)
- 속성 값을 아직 모르거나 해당되는 값이 없음을 표현
- 숫자 0이나 공백 문자와는 다름
- 차수(degree)
- 하나의 릴레이션에서 속성의 전체 개수
- 모든 릴레이션은 최소 1 이상의 차수를 유지해야 함
- 카디널리티(cardinality)
- 하나의 릴레이션에서 투플의 전체 개수
- 투플이 없는 릴레이션이 존재할 수도 있음
릴레이션의 구성
- 릴레이션 스키마(relation schema)
- 릴레이션의 논리적 구조(릴레이션을 구성하는 뼈대)
- 릴레이션의 이름과 릴레이션에 포함된 모든 속성 이름으로 정의
- Ex. 고객(고객아이디, 고객이름, 나이, 등급, 직업, 적립금)
- 릴레이션 내포(relation intention)라고도 함
- 정적인 특징이 있음
- 릴레이션 인스턴스(relation instance)
- 어느 한 시점에 릴레이션에 존재하는 투플들의 집합(릴레이션을 구성하는 실제 값들)
- 릴레이션 외연(relation extension)이라고도 함
- 동적인 특징이 있음
데이터베이스의 구성
- 데이터베이스 스키마(database schema)
- 데이터베이스의 전체 구조
- 데이터베이스를 구성하는 릴레이션 스키마의 모음
- 데이터베이스 인스턴스(database instance)
- 데이터베이스를 구성하는 릴레이션 인스턴스의 모음
릴레이션의 특성
- 투플의 유일성
- 하나의 릴레이션에는 동일한 투플이 존재할 수 없음
- 투플의 무순서
- 하나의 릴레이션에서 투플 사이의 순서는 무의미함
- 속성의 무순서
- 하나의 릴레이션에서 속성 사이의 순서는 무의미함
- 속성의 원자성
- 속성 값으로 원자 값만 사용할 수 있음
- 하나의 속성은 여러 개의 값, 즉 다중 값을 가질 수 없음
키(key)
릴레이션에서 투플들을 유일하게 구별하는 속성 또는 속성들의 집합
키의 특성
- 유일성(uniqueness)
- 하나의 릴레이션에서 모든 투플은 서로 다른 키 값을 가져야 함
- 최소성(minimality)
- 꼭 필요한 최소한의 속성들로만 키를 구성
키의 종류
- 슈퍼키(super key)
- 유일성을 만족하는 속성 또는 속성들의 집합
- Ex. 그림 5-7 고객 릴레이션의 슈퍼키 : 고객아이디, (고객아이디, 고객이름), (고객이름, 주소) 등
- 후보키(candidate key)
- 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
- Ex. 그림 5-7 고객 릴레이션의 후보키 : 고객아이디, (고객이름, 주소) 등
- 슈퍼키 (고객아이디, 고객이름)가 안되는 이유는 '고객이름' 속성이 없어도 '고객아이디' 속성만으로 유일성을 만족할 수 있기 때문
- 기본키(primary key)
- 후보키 중에서 기본적으로 사용하기 위해 선택한 키
- null값을 가질 수 있는 속성이 포함된 후보키는 부적합
- 값이 자주 변경될 수 있는 속성이 포함된 후보키는 부적합
- 단순한 후보키를 선택
- Ex. 그림 5-7 고객 릴레이션의 기본키 : 고객아이디
- 후보키 중에서 기본적으로 사용하기 위해 선택한 키
- 대체키(alternate key)
- 기본키로 선택되지 못한 후보키
- Ex. 그림 5-7 고객 릴레이션의 대체키 : (고객이름, 주소)
- 기본키로 선택되지 못한 후보키
- 외래키(foreign key)
- 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
- 릴레이션들 간의 관계를 표현
- 참조하는 릴레이션 : 외래키를 가진 릴레이션(주문 릴레이션)
- 참조되는 릴레이션 : 외래키가 참조하는 기본키를 가진 릴레이션(고객 릴레이션)
외래키의 역할? 고객 릴레이션과 주문 릴레이션이 관계를 맺어 주문 릴레이션의 투플과 연관성이 있는 고객 릴레이션의 투플을 연결할 수 있음
주문고객(외래키)를 '고객이름'으로 한다면? '고객이름'이 유일성을 만족하지 않는다면(중복된다면) 동명이인을 식별할 수 없으므로 만약 주문을 했을 때 같은 이름의 고객이 많다면 실질적으로 누가 주문을 했는지 알 수 없음
NOTE - 외래키 속성과 그것이 참조하는 기본키 속성의 이름은 달라도 되지만 도메인은 같아야 한다. (그림 5-10 고객아이디 - 주문고객)
NOTE - 하나의 릴레이션에는 외래키가 여러 개 존재할 수도 있고 외래키를 기본키로 사용할 수도 있음
그리고 외래키를 포함하여 기본키를 구성할 수도 있음
NOTE - 같은 릴레이션의 기본키를 참조하는 외래키도 정의할 수 있으며 외래키 속성은 null 값을 가질 수도 있음
SUMMARY
키의 특성과 종류
- 특성
- 유일성 : 한 릴레이션에서 모든 투플은 서로 다른 키 값을 가져야 함
- 최소성 : 꼭 필요한 최소한의 속성들로만 키를 구성
- 종류
- 슈퍼키 : 유일성을 만족하는 속성 또는 속성들의 집합
- 후보키 : 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
- 기본키 : 후보키 중에서 기본적으로 사용하기 위해 선택한 키
- 대체키 : 기본키로 선택되지 못한 후보키
- 외래키 : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
관계 데이터 모델의 제약
무결성 제약조건(integrity constraint)
- 데이터의 무결성을 보장하고 일관된 상태로 유지하기 위한 규칙
- 무결성 : 데이터를 결함이 없는 상태, 즉 정확하고 유효하게 유지하는 것
- 무결성 제약조건
- 개체 무결성 제약조건 : 기본키를 구성하는 모든 속성은 null 값을 가질 수 없음
- 참조 무결성 제약조건 : 외래키는 참조할 수 없는 값을 가질 수 없음
개체 무결성 제약조건(entity integrity constraint)
- 기본키를 구성하는 모든 속성은 null 값을 가질 수 없는 규칙
참조 무결성 제약조건(referential integrity constraint)
- 외래키는 참조할 수 없는 값을 가질 수 없는 규칙
- 주의
'Database' 카테고리의 다른 글
JDBC, JPA, MyBatis 차이 (0) | 2022.02.09 |
---|---|
[MySQL] You can't specify target table '테이블명' for update in FROM clause (0) | 2022.01.20 |
개념적 데이터 모델링: 실습 (0) | 2022.01.13 |
4. 개념적 데이터 모델링 (1) | 2022.01.12 |
데이터의 분류 (0) | 2022.01.09 |
Comments