데이터베이스기초 (3)

Ju Young Jun·2021년 9월 17일
1

👨‍💻관계모델

관계형 모델은 실제 세계의 데이터를 관계라는 개념을 사용해 표현한 데이터 모델임. 관계 모델은 릴레이션의 관계를 표현함.

데이터 모델이란?
높은 수준의 상위 개념적으로 데이터를 기술하는 구성자들의 집합. "~~라는 개념을 사용해 데이터를 표현해보아라"라고 정의하는 것을 말하며, 관계형 모델은 그 중에 하나라고 할 수 있음.

  • 개념적 데이터 모델
    현실세계에 대한 인식을 추상적인 개념으로 표현
    인간이 이해할수 있는 정보 구조로 표현
    대표적으로 개체-관계(E-R) 모델
  • 논리적 데이터 모델
    구현 모델이라고도 함
    개념 데이터 모델링의 개념 구조를 컴퓨터가 이해할 수 있도록 변환한 구조
    필드, 데이터타입 등으로 개념적 모델 구현
    관계 모델, 계층 모델, 네트워크 모델 등으로 구분
  • 물리적 모델
    물리 데이터 모델이란 논리적 모델을 특정 데이터베이스로 설계함으로써 생성된, 데이터를 저장할 수 있는 물리적인 스키마를 말함.
    물리 데이터 모델링은 논리 데이터 모델을 사용하고자 하는 각 DBMS의 특성을 고려하여 데이터 베이스 저장 구조(물리 데이터 모델)로 변환하는 것임. 성능과 직접적인 연관 하위수준의 데이터 모델로 데이터가 저장되는 방법을 표현
    레코드형식, 레코드 순서, 접근경로, 저장방법에 관한 전문가가 정의


위는 관계모델의 핵심인 릴레이션에 대한 예시.

  • 릴레이션 ( Relation )
    • 개체를 표현하기 위한 데이터 구조로써 2차원 테이블로 표현하며, heading(스키마)와 body(본체)로 구성됨.
      • heading은 속성(attribute)이 n개가 모인 집합이며, 이름과 데이터형으로 구성되어 있슴.
      • body는 속성값의 집합인 튜플(tuple)의 집합임
    • SQL의 테이블과 대응됨.
  • 튜플 ( Tuples )
    • 하나의 개체를 의미하고 Relation에서 행으로 표현
    • 각 튜플은 유일해야 한다는 특징이 있슴.
    • SQL의 row(가로)와 대응됨.
  • 애트리뷰트 ( Attributes )
    • 개체의 속성들을 의미하며 Relation에서 열로 표현
    • SQL의 column(세로)과 대응됨.

=> 정리하면 릴레이션은 튜플들의 모임이고
그 튜플들의 모임인 릴레이션의 관계를 정의한 것이 관계모델임. 관계모델은 릴레이션 단위로 다양한 여난을 사용해 질의를 수행하는 데이터 모델임.

👨‍💻단어
도메인 : 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값들의 지합이라고 할 수 있음. 도메인이라는 개념이 필요한 이유는 릴레이션에 저장되는 데이터 값들이 본래 의도했던 값들만 저장되고 관리하기 위해서임. 이를 도메인 제약조건(각 필드의 데이터는 명시된 도메인에 속한 값이어야 함)이라고 부르기도 함. 예를 들어, '성별'이라는 속성이 있다면 이 속성이 가질 수 있는 값은 '남' 또는 '여'일텐데, 데이터베이스 설계자는 성별의 도메인으로 'gender'를 정의하고 그 값으로 '남', '여'로 지정한뒤 '성별'이라는 속성은 'gender'도메인에 있는 값만을 가질 수 있다고 지정해 놓으면 사용자들이 실수로 남, 여 이외의 값을 입력하는 것을 방지할수 있슴.
릴레이션: 릴레이션 스키마 + 릴레이션 인스턴스
릴레이션 스키마:릴레이션 이름, 필드 이름, 도메인
❖ 예:Students(sid:string, name:string, login:string, age:integer, gpa real)
❖ 필드: 속성, 열, 애트리뷰트
❖ 도메인: 데이터타입, string: 모든 문자열들의 집합
릴레이션 인스턴스
❖ 투플(행,레코드)들의 집합, 일종의 테이블, (현재:current)
❖ 투플들의 집합이므로 모든 행은 서로 다르다. 각 행의 위치는 상관없음
❖ 행의 수: 카디날리티(cardinality)
❖ 필드의 수: 차수(degree or arity)
❖ 예) 그림 3.1과 그림 3.2는 동일한 인스턴스임
❖ 차수: 5 카디날리티: 6

Null:Null 또는 NULL은 구조적 질의 언어 (SQL)에서 데이터베이스 내의 데이터 값이 존재하지 않는다는 것을 지시하는데 사용되는 특별한 표시어(special marker)이다.

👨‍💻 외래키

다른 릴레이션의 기본키를 참조하는 속성

키는 릴레이션간의 관계를 맺는데 사용될 수 있다. 외래키(Foreign key)가 바로 그런 경우인데, 주문 릴레이션에서 우리는 고객 릴레이션의 기본키인 고객번호와 도서릴레이션의 기본키인 도서번호를 참조하여 쓰는데 주문릴레이션에서는 고객번호와 도서번호가 외래키가 되고, 주문번호가 기본키(Primary Key)가 됨.

👨‍💻 무결성 제약조건

데이터 무결성(Integrity)은 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것을 말함.

  • 도메인 무결성 제약조건
  • 개체 무결성 제약조건
  • 참조 무결성 제약조건

1.도메인 무결성 제약조건 & 도메인 제약
=> 릴레이션 내의 튜플들이 각 속성의 도메인에 지정된 값만을 가져야 한다는 조건. SQL문에서 데이터 형식(Type), 널(Null/Not Null), 기본 값(Default)등을 사용하며 지정할 수 있습니다. 예를 들어 VARCHAR형으로 선언된 Name이라는 변수에는 정수형 Integer 값이 올 수 없는 경우를 의미합니다.

2.개체 무결성 제약조건
=> 기본키 제약(Primary Key Constraint)라고도 함. 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙 즉, 기본키는 NULL값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재해야 한다는 조건임. 기본키는 릴레이션내에서 튜플들을 구별할 수 있게 해주는 속성이므로 자연스럽게 개체 무결성 제약조건이 등장하게 되었습니다.

3.참조 무결성 제약조건 & 외래키 제약(Foreign Key Constraint)
=> 릴레이션 간의 참조 관계를 선언하는 제약조건임. 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받음.

개체 무결성 제약조건

  • 삽입: 기본키 값이 같으면 삽입이 금지됨
  • 수정: 기본키 값이 같거나 NULL로도 수정이 금지됨
  • 삭제: 특별한 확인이 필요하지 않으며 즉시 수행함

아래의 그림과 같이 학번을 기본키로 갖는 릴레이션에서 이미 학번 501을 가진 학생이 존재할 때 중복된 학번 501을 가진 학생을 삽입하려고 하거나 501로 다른 학생의 학번을 수정하려고 하거나, 학번이 NULL값인 튜플을 삽입하려고 하는 경우에 삽입이 거부된다. 그에 반해 삭제 연산은 기본키의 중복 또는 NULL의 염려가 없으므로 즉시 수행가능.


개체 무결성: 기본키에 대한 제약조건

❖ 기본키의 열에 있는 값들은
❖ 1) 모두 유일하여야 하고 2) 널(null)이 될 수 없다.
❖ SQL에서 기본키와 후보키 명시
CREATE TABLE Students
(sid CHAR(20),
name CHAR(30),
login CHAR(20),
age INTEGER,
gpa REAL,
UNIQUE (name, age),
CONSTRAINT StudentsKey PRIMARY KEY (sid) )

제약조건에 관한 정보
테이블 생성 시에 Constraint, 즉 제약조건을 사용해서 입력하는 자료에 대해 제약을 정해줄 수 있슴
이때 정해진 제약에 따라서 데이터가 입력되는데 , 제약에 맞지 않다면 자료 입력이 거부되면서 오류가 남
RDMBS에서는 데이터의 무결성을 위해 5가지 제약조건을 제공..

참조 무결성 제약조건

  • 부모릴레이션에 삽입: 정상적으로 진행됨

  • 자식릴레이션에 삽입: 참조받는 테이블에 외래키 값이 없으므로 삽입 금지

  • 부모릴레이션의 삭제: 참조하는 테이블을 같이 삭제할 수 있어서 금지하거나 추가작업이 필요

  • 자식릴레이션의 삭제: 바로 삭제 가능함

  • 수정: 삭제와 삽입의 연속 수행으로 각 삭제와 삽입의 제약을 고려하여 진행됨.

예를 들어 아래의 릴레이션에서 부모에 3001의 학과코드를 가진 학과를 추가하는 것은 문제가 없지만 자식 릴레이션에 부모 릴레이션에 존재하지 않는 3001의 학과 코드를 삽입하려고 하는 경우에는 문제가 발생함. 부모릴레이션에서 삭제를 하는 경우에는 해당 키를 다른 릴레이션에서 사용하고 있을 수 있으므로 삭제에 제한이 걸리지만 자식릴레이션은 바로 삭제를 할 수 있슴. 수정 연산은 부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약조건에 따라 처리됨.

참조 무결성 처리 옵션 표현법

CASACADE (참조측도 삭제)
SET DEFAULT (참조측 값을 디폴트로 설정)
SET NULL (참조측 값을 널 값으로 설정)

  • 외래키(Foreign key, FK)
    ❖ 정의: 두 릴레이션 R1(pk1, a2, a3...), R2(pk2, b2, b3....)가 있을 때
    ❖ Pk1: R1의 기본키
    ❖ b2가 pk1 열에 있는 값을 참조할 때, b2는 R1의 FK(외래키)임
    ❖ 속성 b2는 R1의 pk1과 도메인이 서로 같아야 함 (dom(b2) =
    dom(pk1))
    ❖ R1은 R2의 부모 테이블, 논리적인 포인터와 유사
  • 참조무결성(Referential Integrity)
    ❖ R2 릴레이션의 b2 열의 데이터는 R1 릴레이션의 pk1 열의 데이터에 같은 값이
    존재하거나 혹은 null 값을 갖는다.
    ❖ 이 조건을 만족할 때, 참조 무결성을 만족
profile
안녕하세요 :)

0개의 댓글