개발자 끄적끄적

관계형 데이터베이스 본문

데이터 베이스

관계형 데이터베이스

햏치 2023. 3. 10. 13:22

<데이터 모델>
- 물리적 혹은 추상적으로 존재하는 '현실세계를 단순화(추상화)'하고 '정형화된 형태(데이터가 애매모호하지 않은, 즉 누군가에게 질문을해도 동일한 답을 낼 수 있는)로 표현'하는
  하나의 방식 또는 규범
- 실제 데이터가 갖는 특성을 살리면서, 목적에 맞게 '관심있는 정보만'을 '단순화'하여 표현하는 방식
  - 데이터에 대한 '조작이 가능'해야한다


<릴레이션(Relation)의 개념>
- 관계형 데이터 모델(Relational data model)
  - 테이블 형식을 이용하여 데이터들을 정의하고 설명한 모델
  - 실세계의 데이터가 누구나 직관적으로 이해할 수 있는 형태로 기술할 수 있는 간단한 방식을 제공
  - 테이블(Table)을 릴레이션(Relation)이라고 부른다.
    즉, 독립적인 테이블이 여러 개가 있을 때 연관성이 있는 집합을 테이블로 구성-> 관계형 데이터 베이스

- 릴레이션(Relation)
  - 수학적으로, 두 개 이상의 집합으로부터 각 집합을 구성하는 원소들의 순서쌍에 대한 집합을 의미
  ex) 이름 = {홍길동, 김광식, 박철수, 최용만}
       주소 = {서울, 대전, 대구, 부산}
       순서쌍 : {<홍길동, 서울>, <김광식, 대전>, <박철수, 대구>, <최용만, 부산>}  -> 릴레이션(Relation)

- 속성(Attribute) : 필드(Field), 컬럼(Column)
  - 릴레이션을 구성하는 각 열(Column)의 이름. 즉, '이름', '주소'는 속성

- 튜플(Tuple) : 레코드(Record), 행(Row)
  - 릴레이션의 각 행

- 도메인(Domain) - Data type(값의 범위와 메모리를 할당하기 위해서 사용)
  - 각 필드에 입력 가능한 값들의 범위. 즉, 각 필드가 가질 수 있는 모든 값들의 집합
  - 원자값(Atomic value : 더 이상 분리되지 않는 값) 이어야 한다
  - ex) 주소록의 도메인
    - 이름 : 개인 이름들로 구성된 문자열 집합
    - 전화번호 : "ddd-dddd-dddd"의 형식으로 구성된 문자열의 집합(d는 0부터 9까지의 숫자)
    - 주소 : 도시를 나타내는 문자열의 집합
    - 생일 : "dd월 dd일"로 구성된 문자열의 집합

- 널(Null) 
  - 특정 필드에 대한 값을 알지 못하거나(Unknown) 아직 정해지지 않아 입력하지 못한 경우의 필드의 값
  - 0이나 공백 문자와는 다름


<테이블 스키마(Table schema)와 테이블 인스턴스(Table Instance)>
- 테이블 스키마(Table schema, 스키마)
  - 테이블 정의에 따라 만들어진 데이터 구조(테이블의 골격)
  - R(A1, A1, A1, ...) R은 테이블이름, A1, A2, A3... : 필드들의 이름
  - ex) 주소록(이름, 전화번호, 주소, 생일)

- 차수(Degree)
  - 테이블 스키마에 정의된 필드(가로)의 수
    - 차수 = 1 : , 단항 테이블(Unary relation)
    - 차수 = 2 : , 이항 테이블(Binary relation)
    - 차수 = 3 : , n항 테이블(N-ray relation)

- 테이블 인스턴스(Table instance, 인스턴스)
  - 테이블 스키마에 현실 세계의 데이터를 레코드로 저장한 형태. 즉, 
  - 스키마는 한 번 정의하면 거의 변함이 없지만 인스턴스는 수시로 바뀔 수 있다(레코드의 삽입, 삭제, 수정 등)

- 기수(Cardinary)
  - 테이블의 인스턴스 레코드(세로) 수


<테이블의 속성>
- 중복된 레코드가 존재하지 않는다
  - 테이블 인스턴스는 레코드들의 "집합" 
  - ex) {1,1,2,3,5} <- 집합X (중복된 값이 있기 때문에) -> (피보나치)수열

- 레코드간의 순서는 의미가 없다
  - 테이블 인스턴스는 레코드들의 "집합"이다
  - '첫번째 레코드', '두번째 레코드'란 표현은 의미가 없다
  - ex) {1,2,3,4} = {4,3,2,1} 두 집합은 같은 집합. 즉, 순서는 의미가 없다

- 레코드 내에서 필드의 순서는 의미가 없다
  - 테이블 스키마는 필드들의 집합으로 표현된다
  - '첫번째 필드', '두번째 필드'란 표현은 의미가 없다

- 모든 필드는 원자값을 가진다
ex) 주소(시, 구, 동, 번지)
          (서울, 성북, 삼성, 100번지) -> 원자값O
-> 서울시 성북구 삼성동 100번지(원자값이 될 수도 안될 수도 있다)
  - 시, 구, 동, 번지로 쪼개는게 의미가 있다 -> 원자값X
  - 굳이 쪼개서 쓸 수가 없는 정보다 -> 원자값O



<키(Key)>
- 키는 왜 필요한가
  - 레코드 간의 순서가 의미가 없으므로 레코드를 구분하기 위해서는 각 레코드의 값을 이용한다. 
    즉, 식별하기 위해 가공한 필드
  - 관계형 데이터 모델에서 특정 레코드를 구별하거나 탐색하기 위한 유일한 방법

<키(Key)의 특징>
- 필드들의 일부로 각 레코드들을 유일하게 식별해낼 수 있는 식별자(Identifier)
- 일반적으로 하나의 필드를 지정하여 키로 지정하거나, 여러 개의 필드들로 키를 구성할 수도 있다
  - 두 개 이상의 필드로 구성된 키를 복합키(Composite key)라고 한다
- 예를 들어 신입생 테이블의 학번 또는 주민등록번호 필드는 각 레코드간에 유일하므로 키가 될 수 있지만,
  학과명은 키가 될 수 없다
- 기본키(Primary)는 한 테이블 안헤 1개가 될 수도, 여러 개(2~3개)가 될 수도 있다


<키(Key)의 특징>
1. 슈퍼키(Super key)
- 아무런 제약 조건 없이 레코드들을 식별할 수 있는 필드의 집합

2. 후보키(Candidate key)
- 최소한의 필드만으로 구성된 키
ex) 학번 - 후보키O
     주민번호 - 후보키O
     {학번, 주민번호} - 후보키X(학번이 없으면 주민번호가 대신 키가 될 수 있으므로)
     {이름, 학과명} - 후보키O

3. 기본키(Primary key)
- 후보키 중에서 식별자로 정의된 하나의 키
- 되도록 하나의 필드로 구성된 후보키를 선정하는 것이 유리하다(ex. 학번)
- 시간에 독립적으로 항상 존재해야한다(Time-Independent)


<키(Key)와 Null>
- 기본키는 식별자의 기능을 하기때문에 기본키로 정의된 필드가 Null을 갖게되면 이러한 식별 기능을 상실한다
  따라서 기본키는 Null이 될 수 없다


<외래키(Foreign key)>
- 다른 테이블의 기본 키를 참조하는 필드 집합
- 두 테이블 스키마 R1, R2에 대해
  R1의 어떤 필드집합 FK가 다음 두 조건을 만족하면, FK는 R2의 기본키인 PK를 참조하는 R1의 외래키이다
  - FK의 필드들은 테이블 스키마 R2의 기본 키 PK와 동일한 도메인을 가진다
  - R1의 각 레코드의 FK값은 R2의 레코드 중 하나의 PK값과 일치하거나 Null이 된다
    여기서 R1의 레코드의 FK값이 Null이 된다는 것은 알지 못하거나 아직 결정되지 않았다는 것을 의미한다
    이 때, R1은 참조하는 테이블(Referencing table)이고, R2는 참조되는 테이블(Referenced table)이다


<관계형 데이터베이스(Relational database)>
- 정의
  - 관계형 데이터 모델에 기반하여 하나 이상의 테이블로 실세계를 표현한 데이터베이스
    - 실세계를 관계형 데이터 모델이라는 추상적인 도구를 이용하여 표현한 것
    - 테이블들을 컴퓨터의 기억 장치에 어떠한 방법으로 저장할 것인가에 대한 물리적 구조까지 정의한 것은 아니다
- 관계형 데이터베이스가 하나 이상의 테이블로 구성되어 있을 때
  - 데이터베이스 스키마(Database schema)
    : 테이블의 스키마 집합, 즉 '테이블의 구조'를 정의한 집합 -> ex : 교수(교수번호, 주민등록번호, 이름, 학과명, 학과장)
  - 데이터베이스 인스턴스(Database instance)
    : 데이블 스키마들에 대한 테이블 인스턴스의 집합 즉, 테이블 구조(스키마)에 맞도록 처리한 레코드들의 집합
  *관계형 데이터베이스 모델 : 추상적인 도구로 이용하여 표현
  *관계형 데이터베이스 : 관계형 데이터베이스 모델을 기반으로 실세계를 표현한 데이터베이스 -> 실체화 한 것


<관계 대수(Relational Algebra)> - 관계형 데이터베이스의 연산
- 질의어(Query language)
   - 삽입, 삭제, 수정 검색 등의 데이터 조작을 위한 연산들을 표현하기 위한 언어

- 절차적 언어(Procedural language)
  - 사용자가 원하는 결과를 얻기 위해 수행되어야 할 일련의 절차를 명시해야 하는 언어
  - ex) C, C++와 같은 대부분의 프로그래밍 언어

- 비절차적 언어(Non-procedural language)
  - 수행 절차는 기술하지 않고 사용자가 원하는 결과만을 형식적으로 명시하는 언어
  - 실질적 수행 절차는 시스템 내부적으로 결정해야 한다

'데이터 베이스' 카테고리의 다른 글

SQL의 구성(DDL, DML)  (1) 2023.03.25
오라클 소개  (0) 2023.03.17
데이터 베이스 개념  (0) 2023.03.03