• 삭제이상(deletion anomaly) 삽입이상(insertion anomaly) 갱신이상(update anomaly)를 해결 하기 위한 방법
  • 데이터의 중복을 줄여서 바람직한 테이블로 만드는 과정
  • 한가지 사실은 한 곳에서만 나타난다는 원리를 형시화한 것
  • 일반적으로 제3 정규형을 만족하면 그 이후의 정규형의 조건은 자연스럽게 만족 하게 된다.
  • 과정은 가역적이다 (2NF에서 3NF으로 바꾸었을 때 3NF에서 다시 2NF로 돌아갈 수 있는 과정)

함수 종속(FD: functional dependency)

  • X → Y: 어떤 릴레이션 R에서, 애트리뷰트 X의 값 각각에 대해 애트리뷰트 Y의 값이 하나만 연관 된 것
    • X는 Y의 결정자(determinant)

무손실 분해

  • 분해된 테이블을 자연조인 할 때 손실되는 데이터가 없는 분해 방법
  • 가역성: 분해된 테이블을 조인 했을때 원래대로 돌아오는 경우
  • 손실 판단 방법: 테이블 분해 후 함수적 종속성이 남아있는지 여부를 확인

정규화 과정

  • 제1 정규형(1NF): 모든 속성이 원자값을 가지는 테이블
  • 제2 정규형(2NF): 기본키가 아닌 모든 속성이 기본키에 완전히 종속되어야 한다. (목표: 부분적 함수 종속 제거)
    • ex: 학생ID와 과목코드로 이루어진 복합키가 있고, 이에 종속된 속성으로 성적이 있는 경우, 성적은 학생ID와 과목코드 모두에 종속되어야 한다. 만약 성적이 학생ID에만 종속되어 있다면, 이는 제2정규형을 만족하지 않는다.
  • 제3 정규형(3NF): 모든 속성이 좌변 최소성으로 종속되어있어야 하고 상호 독립적이어야 한다. (목표: 이행적 함수 종속 제거)
    • 기본키가 아닌 다른 속성에 종속되는 속성이 없어야 한다.
    • ex: 학생ID가 기본키이고, 학생ID에 종속된 속성으로 학과명이 있고, 학과명에 종속된 속성으로 학과위치가 있다면, 이는 제3정규형을 만족하지 않는다.
  • BCNF
  • 제 4 정규형(4NF)
  • 제 5 정규형(5NF)

FD(함수적 종속) 다이어그램

  • 결정자와 종속자의 관계를 화살표로 나타낸 것
  • 결장자가 기본키가 아니라면 중복이 존재하는 것
  • 모든 다른 속성을 함수적으로 결정한다 → 후보키(기본키)

'CS > DataBase' 카테고리의 다른 글

동시성 제어  (0) 2023.05.22
트랜잭션  (0) 2023.05.19
개체 관계  (0) 2023.05.10
데이터베이스 설계  (0) 2023.04.30
물리적 저장 구조와 인덱스  (0) 2023.04.26

물리적 데이터 베이스

  • 테이블과 레코드들은 HDD에 저장
  • 운영체제가 관리하는 파일 시스템 이용
    • 기본 저장 구조는 파일
    • 입출력 단위는 블록(하나의 테이블에 속)

블록 내 레코드 저장 방식

  • 블록 내에 고정길이로 저장
    • 장점: 처리하기 편함
  • 블록 내에 가변길이로 저장
    • 장점: 사용하는 디스크의 용량을 줄일 수 있음
  • 클러스터링: 자주 검색되는 필드를 기준으로 관련 레코드들을 같은 블록에 저장하는 기법

인덱스

create index<인덱스이름> on <테이블이름>(<필드리스트>)
  • 구조: Map 형태로 (검색키, 주소)로 구성
  • 사용 이유: 파일 내 레코드의 위치를 빨리 찾기 위해 사용
    • 인덱스가 없다면 순차 검색을 통해 찾아야 하므로 속도가 떨어짐
  • 기본키에 대해서는 DBMS가 자동으로 인덱스를 생성시킨다.
  • 단점: 테이블에 레코드를 삽입하고 관련 정보를 인덱스에 갱신해야 한다 즉 인덱스가 많아지면 삽입, 삭제, 수정연산 속도 저하

'CS > DataBase' 카테고리의 다른 글

개체 관계  (0) 2023.05.10
데이터베이스 설계  (0) 2023.04.30
데이터베이스 보안  (0) 2023.04.09
무결성과 보안  (1) 2023.04.07
집계 함수  (0) 2023.04.01

무결성 제약

  • 데이터가 결점 없이 들어 올 수 있도록 데이터가 갖추어야 할 제약 조건을 말 한다.
  • 데이터를 생성할 때 무결성 제약 조건을 명시함
  • 새로 데이터가 들어올 때 마다 DBMS가 해당 데이터를 바탕으로 자동으로 체크함

 

+테이블

  • Base Table: Base Table은 부모 테이블 또는 마스터 테이블이라고도 불리며, 각 레코드에 대한 고유한 식별자인 기본 키(primary key) 열을 포함하는 데이터베이스 테이블입니다.
  • Device Table: Device Table은 컴퓨터, 프린터 또는 기타 하드웨어와 같은 장비에 대한 정보를 저장하는 데이터베이스 테이블입니다.

 

무결성 제약의 유형

  • 기본 무결성 제약
  • (외래키) 참조 무결성 제약
  • 일반 무결성 제약

 

기본 무결성 제약 조건

  • 형식: constraint <제약식명> primary key (<필드 리스트>)
  • 테이블 안 

  • 테이블 밖

  • 기본키 삭제

  • 기본키는 NULL 값을 가질 수 없으며 동일한 값을 가질 수 없다.
  • 한 테이블에서 기본키의 무결성 제약은 한번 밖에 나올 수 없다.

 

(외래키) 참조 무결성 제약

  • 형식

  • 테이블 안

  • 테이블 밖

  • 외래키 삭제

  • 외래키는 대부분 테이블 바깥에서 선언된다.

 

일반 무결성 제약

  • Not Null: 특정 필드는 NULL 값이 들어오면 안된다.
    • 기본키는 해당 제약이 디폴트로 적용되어 있음
  • unique: 후보키 등록
    • 값의 고유성 보장(중복 값 x)
    • 두 개 이상의 필드에 동시에 설정 가능 (각각의 경우에 대해)
      • ex: 김 영웅, 김(x) 길동 x
  • check: 어떤 필드의 값의 범위를 지정
    • 형식: constraint <제약식명> check (<조건식>)
    • 여러개의 필드를 묶어서 조건을 주는 것 또한 가능

 

  • default: 레코드 삽입시 따로 값이 정해지지 않을 경우 사용될 디폴트 값을 설정할 때 사용
    • 주의점: NULL<values(값,Null)>으로 삽입 될 경우 적용되지 않고 values(값,,)로 삽입해야 해당 디폴트 값이 적용됨

 

무결성 제약 설정의 유의점

  • 지나치게 많은 제약 조건이 있을 경우 많은 오버헤드를 발생시키기 때문에 프로그램 전체의 속도를 감소시킬 수 있음

'CS > DataBase' 카테고리의 다른 글

물리적 저장 구조와 인덱스  (0) 2023.04.26
데이터베이스 보안  (0) 2023.04.09
집계 함수  (0) 2023.04.01
SQL 1  (0) 2023.03.24
관계 대수  (1) 2023.03.17

배경

  • 관계 대수나 관계 해석은 확실한 이론적 배경을 제공하나 상용으로 쓰이기에는 어렵고 적절치 않음
  • SQL은 자연어와 유사하고 비절차적 언어이므로 사용하기 용이함
  • SQL로 풀 수 없는 문제를 프로그래밍을 통해 풀 수 가 있음
  • 표준 질의어로 채택되어 널리 쓰이는 관계형 질의언어

SQL 기본 명령어

  • 데이터 정의 언어(data definition language) DDL: CREATE, ALTER, DROP
  • 데이터 조작 언어(data manipulation language) DML: SELECT, INSERT, DELETE, UPDATE
  • 데이터 제어 언어(data control language) DCL: GRANT, REVOKE, COMMIT, ROLLBACK

DDL VS DML

  • 둘다 SQL 언어
  • 테이블을 정의하는 것을 DDL (데이터 생성)
    • SQL 문을 입력시 자동으로 commit 명령이 들어감(저장)된
    • rollback이 불가능
  • 테이블을 넣고 삽입 삭제 하는 것을 DML (데이터 처리)
    • SQL 문 입력 후 exit 나 commit 을 입력해야  해당 데이터가 저장됨
    • rollback시 취소 가능

필드의 Data type 종류 (Oracle)

  • 문자
    • char(n): (길이가 n인 고정 길이의 문자열)
    • varchar2(n): (길이가 n인 가변 길이의 문자열)
  • 숫자
    • int(정수), float(실수)
    • number(6): (10진수 6자리 자연수 0~999999)
    • number(6,2): (10진수 6자리 중 소수점 자리 2개 0~9999.99)
      • 사용 이유: 필요한 메모리 공간을 절약하기 위해서 int 로 선언시 number(38) 로 처리되는데 이는 데이터의 범위에 비해 공간적으로 과도하게 잡아먹는 경우가 있음
  • 날짜 시간
    • data: 년월일
    • timestamp: 시분초

테이블 생성

create table member(
	id int not null ato_increment,
    name varchar(10) not null,
    passwd varchar(50) not null,
    primary key(id)
)
  • 형식 create table <테이블이름> (<필드리스트>)

  • not null은 해당 필드에 널을 허용하지 않는다는 것을 의미함

기본키, 외래키 설정

  • pk_department: 제약식의 이름 (not null 이 디폴트로 설정 됨)
    • 어느 테이블에서 작업을 할때 에러가 발생했는지 알기 쉽기 때문에 사용
  • 외래키는 반드시 프라이머리 키(기본 키)로 참조하여야 함
    • 기본키와 외래키는 이름이 같을 필요는 없다.
    • 외래키는 테이블과 테이블 사이의 조인 연산을 할때 이용되기 때문에 필요 (관계 정의 요소)
  • 기본키, 외래키 관련 주의사항
    • 외래키를 필드로 갖는 테이블을 생성 할 때
      • 외래키가 참조하는 테이블을 먼저 생성 해야 한다.
    • 만일 외래키가 참조하는 테이블을 먼저 생성하지 않으면 "ORA-00942" 테이블 또는 뷰가 존재하지 않습니다." 라는 오류가 발생하게 된다.
    • 테이블을 삭제할 때도 같은 문제가 발생함
      • 외래키를 먼져 해제하거나 제거 하여 관계를 끊은 다음에 삭제를 진행해야 테이블 간의 일관성을 유지 할 수 있다.

테이블 추가와 삭제

  • 형식 alter table <테이블이름> add <추가할필드>
  • 새로운 필드가 생성시 기존의 레코드 값들은 null 값으로 배치가 된다.

  • 형식 alter table <테이블이름> drop column <삭제할필드>

레코드 삽입

  • 형식: insert into <테이블이름> (<필드리스트>) values (<값리스트>)
    • <필드리스트>: 삽입에 사용될 테이블의 필드들
    • <값리스트>: <필드리스트>의 순서에 맞춰 삽입될 값
    • <필드리스트>에 나열되지 않은 필드에 대해서는 널값이 입력됨
    • <필드리스트>를 생략할 경우 <값리스트>에는 테이블을 생성할 때 나열한 필드의 순서에 맞춰서 값을 나열
    • 테이블의 필드 중 생략된 필드에는 널이 입력됨
      • 단 not null이 설정된 필드가 있을 경우 해당 필드는 insert문에서 생략 할 수 없음

레코드 수정

  • <수정내역>
    • 대상 테이블의 필드에 들어가는 값을 수정하기위한 산술직
    • ,을 이용하여 여러 필드에 대한 수정 내역을 지정가능
  • <조건>
    • 대상이 되는 레코드에 대한 조건을 기술
    • 관계대수에서 선택 연산의 조건식과 같은 의미
    • 테이블의 모든 레코드에 대해 수정을 적용하려면 where 절을 생략

레코드 삭제

  • where절이 생략되면 테이블에서 모든 레코드를 삭제
    • DDL의 drop table과의 차이점: delete 문을 이용하여 테이블의 모든 레코드를 삭제하더라도 테이블은 삭제 되지 않음
  • 외래키로 참조되는 필드를 가지고 있는 테이블에서 레코드를 삭제 할 수 없음

'CS > DataBase' 카테고리의 다른 글

무결성과 보안  (1) 2023.04.07
집계 함수  (0) 2023.04.01
관계 대수  (1) 2023.03.17
Key  (0) 2023.03.11
릴레이션  (0) 2023.03.11

+ Recent posts