티스토리 뷰

Database와 DBMS

Database: 데이터의 저장소

 

  • 자료를 많이 모은 것
  • 아주 많은 데이터를 얼마나 효율적으로 처리하느냐

 

DBMS: 데이터베이스를 운영하고 관리하는 소프트웨어

 

  • Database Management System
  • 데이터베이스를 관리하는 것처럼 보이는 프로그램
  • 운영체제가 데이터베이스를 지원하지 않으므로
  • 오라클, Mysql, MS-SQL, Access, 큐브리드, 알티베이스

 


데이터 모델이란?

데이터를 모으고 관리하기 위해서는 데이터화 시키는 작업이 필요하다. 데이터 모델이 이 방법을 알려준다.

 

  • 물리적 혹은 추상적으로 존재하는 현실세계를 단순화되고 정형화된 형태로 표현하는 하나의 방식 또는 규범
  • 실제 데이터가 갖는 특성을 살리면서, 목적에 맞게 관심 있는 정보만을 단순화 하여 표현하는 방식
  • 데이터에 대한 조작이 가능해야 함

 


관계형 데이터 모델 relational data model

테이블 형식을 이용하여 데이터들을 정의하고 설명한 모델

 

  • 실세계의 데이터를 누구나 직관적으로 이해할 수 있는 형태로 기술할 수 있는 간단한 방식을 제공
  • 테이블을 릴레이션(relation)이라 부름

 

✨나는 솔로 테이블

이름 전화번호 주소 직업
광수 010-1234-5678 서울 소프트웨어 프로그래머
영철 010-2345-6789 부산 난초 농사
상철 010-3456-7891 울산 한의사

 

속성(attribute) - 필드, 컬럼, 열

 

  • 릴레이션을 구성하는 각 열(column)의 이름
  • 속성, 시스템에 필요한 값들
  • 예) 주소록 릴레이션을 구성하는 속성
    • 이름, 전화번호, 주소, 직업

 

튜플(tuple) - 레코드, 행

 

  • 릴레이션의 각 행
  • 하나의 레코드는 하나의 객체를 표현함.
  • 예) 주소록 릴레이션의 한 튜플
    • <광수, 010-1234-5678, 서울, 소프트웨어 프로그래머>

 

릴레이션은 테이블, 속성은 필드, 튜플은 레코드와 같은 의미

 

도메인(domain)

 

  • 각 필드에 입력 가능한 값들의 범위
  • 원자 값(더 이상 분리되지 않는 값)이어야 함
  • 예) 주소록의 도메인
    • 이름: 개인 이름들로 구성된 문자열 집합
    • 전화번호: "ddd-ddd-dddd"의 형식으로 구성된 문자열의 집합(d는 0부터 9까지의 숫자)
    • 주소: 도시를 나타내는 문자열의 집합

 

널(null)

 

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

 

속성의 값은 Atomic=Simple+Single-valued

 

테이블 스키마

 

  • 속성의 집합으로 이루어진다.
  • 테이블 정의에 따라 만들어진 데이터 구조
    • R(A1, A2, ..., AN)
      • R: 테이블의 이름
      • A1, A2, ..., AN: 필드들의 이름
    • 예) 신입생(학번, 주민등록번호, 이름, 주소, 학과명)
  • 차수(degree)
    • 테이블 스키마에 정의된 필드의 수
      • 차수=1: 단항 테이블(unary relation)
      • 차수=2: 이항 테이블(binary relation)
      • 차수=n: n항 테이블(n-ary relation)

 

테이블 인스턴스

 

  • 실체가 만들어진 테이블
  • 인스턴스는 계속 바뀔 수 있다.

➕ 스키마는 한 번 정하면 거의 변화가 없지만(기존의 데이터에 영향을 미칠 수 있기 때문에) 인스턴스는 자주 변한다.

 


테이블의 특성

  • 중복된 레코드가 존재하지 않음
  • 레코드간의 순서는 의미가 없음
    • 테이블 인스턴스는 레코드들의 집합임
  • 레코드 내에서 필드의 순서는 의미가 없음
    • 테이블 스키마는 필드들의 집합임

 


키(Keys): 개체를 식별하기 위한 속성의 집합

키의 필요성

 

  • 테이블의 특성에서 살펴보았듯이, 레코드 간의 순서가 의미가 없으므로 레코드를 구분하기 위해서는 각 레코드의 값을 이용한다.
  • 필드들의 일부로 각 레코드들을 유일하게 식별해낼 수 있는 식별자(identifier)
  • 일반적으로 하나의 필드를 지정하여 키로 지정하나, 여러 개의 필드들로 키를 구성할 수 도 있음
  • 두 개 이상의 필드로 구성된 키를 복합 키(composite key)라고 함.

 

슈퍼 키(SK)

 

  • 개체 집합에서 어떤 개체를 유일하게 가리킬 수 있는 하나 이상 속성의 집합
  • 예) 학번, 이름 -> 학번과 이름의 집합은 슈퍼키가 될 수 있다.
  • 슈퍼키를 정할 때에는 현재 인스턴스만 보고 판단해서는 안된다. 변화 가능성까지 생각하여 키를 정의해야 한다.
  • ✅ 속성 하나짜리 슈퍼키는 무조건 후보키가 된다.

 

후보 키(CK)

 

  • 주어진 슈퍼 키의 속성에서, 속성 하나라도 뺀다면 슈퍼 키가 될 수 없는 경우에 이 속성의 집합을 후보 키라 함
    • minimal Super Key
  • 식별성에 최소성까지 갖춘 것
  • 식별하기 위해 꼭 필요한 속성으로만 구성되어 있는 것
  • 예) 학번, 이름 -> 슈퍼키
  • 예) 학번 -> 후보키
  • 후보키는 기본키가 되기 위한 후보
    • 테이블에서 기본키가 되기 위한 후보키를 찾아 그 중에서 한 놈을 기본키로 선택하자.

 

기본 키(PK)

 

  • 만일 후보 키가 하나뿐이면, 그것이 저절로 일차 키가 된다. 만일 주어진 집합에 후보 키가 둘 이상 있으면, 데이터베이스를 설계할 때 그 가운데 하나를 일차 키로 고르고, 나머지가 후보 키가 된다.
    • 후보키가 한개라면 그게 기본키가 되겠지만, 후보키가 여러개라면 그 중에서 하나를 선택하면 된다.
  • 기본키를 선택하면 자동으로 Primary 인덱스가 만들어진다.
  • 기본 키는 null이 될 수 없다.

 

외래 키(FK)

 

  • 다른 테이블에서 일차 키인 속성의 집합이 주어진 테이블에 있을 때, 이 속성의 집합을 주어진 테이블에서 외래 키라고 한다.
    • 다른 테이블에서 1차키(기본키)인 것이 이 테이블에 있으면 외래키가 되는 것이다!
  • 외래 키를 구분하는 기준은 다른 테이블에서 1차키이면 외래키가 된다.
  • 외래 키는 null이 될 수는 있다.
    • ✅ 휴대폰 번호는 슈퍼키가 될 수 없다!
      • null이 될 수 있는 가능성이 있으므로

 


슈퍼 키와 후보 키 찾아보기

속성 집합 : {학번, 이름, 주민등록번호, 학과번호, 휴대폰번호, 학년) 

 

  • {학번, 이름} -> c1과 c2가 모두 수퍼키가 아니어야 후보키가 된다.
  • c1: {학번} -> 수퍼키 o
  • c2: {이름} -> 수퍼키 x
    • c1으로 인해 {학번, 이름}은 후보키가 될 수 없다.

 

속성 집합 : {학번, 과목번호, 학점}

 

  • {학번} -> 수퍼키 x, 한 학생이 여러 과목 수강 가능하므로
    • 만약 한 학생이 한 과목만 신청할 수 있다면 가능
  • {과목번호} -> 수퍼키 x, 여러 학생이 수강 가능하므로
    • 만약 1:1 과외이면 가능
  • {학점} -> 수퍼키 x, 같은 학점이 여러명에게 갈 수 있으므로
  • {학번, 과목번호} -> 수퍼키 o
    • 이번 학기만 한정, 다른 학기도 포함 시 재수강도 되므로 -> 이 경우 학년, 학번도 포함해야 한다.
  • {학번, 과목번호} -> 후보키 o
    • {학번} -> 수퍼키 x
    • {과목번호} -> 수퍼키 x
  • 모든 인스턴스는 수퍼키를 가진다.
    • 모든 속성 집합은 레코드의 집합이므로
  • {학번, 과목번호, 학점} -> 후보키 x, 학점 제외해도 수퍼키가 되므로
- 학생
    - 학번, 이름, 주민등록번호, 학과번호, 휴대폰번호, 학년
    - SK인가?
        - 학번 O
        - 이름 X
        - 학번, 이름 O
        - 휴대폰번호 X
    - CK인가?
        - 학번 O
        - 학번, 이름 X
        - 다른 CK
        
- 수강
    - 학번, 과목번호, 학점
    - SK인가?
        - 학번 X
        - 과목번호 X
        - 학점 X
        - 학번, 과목번호 O
    - CK인가?
        - 학번, 과목번호 O
        - 다른 CK

 

학생 테이블, 수강 테이블, 학과 테이블에서 외래키 찾기

 

  • 수강 테이블의 학번은 학생테이블에서 후보키이므로 외래키가 될 수 있다.
  • 학생 테이블의 학과번호는 학과 테이블에서 후보키가 될 수 있으므로 아마도 외래키일 가능성이 높다.
  • 수강 테이블의 과목번호도 외래키일 가능성이 높다.
  • 외래키는 다른 테이블을 참조하기 위해 사용되므로 참조키라고도 불린다. 

 

학생 테이블(학번, 주민등록번호, 이름, 주소, 학년, 학과번호)
학과 테이블(학과번호, 학과명, 과사무실)

 

  • 학생 테이블에서 학과번호가 930인 레코드를 삽입할 수 있는가?
  • 참조 무결성을 깨므로 삽입할 수 없다.
  • 테이블을 만들 때, 학과 테이블을 만들고 학생 테이블을 만들어야 한다.

 


관계형 데이터베이스

  • 관계형 데이터 모델에 기반하여 하나 이상의 테이블로 실세계를 표현한 데이터베이스
  • 구조
    • 데이터베이스 스키마(database schema): 테이블 스키마의 집합
    • 데이터베이스 인스턴스(database instance): 테이블 스키마들에 대한 테이블 인스턴스의 집합

'CS > 인터넷DB응용' 카테고리의 다른 글

[인터넷DB응용] PL-SQL - 2  (0) 2023.04.17
[인터넷DB응용] PL-SQL - 1  (0) 2023.04.16
[인터넷DB응용] SQL 활용 - 3  (0) 2023.04.14
[인터넷DB응용] SQL 활용 - 2  (0) 2023.04.11
[인터넷DB응용] SQL 활용 - 1  (0) 2023.04.11