< 정규화 과정과 함수 종속성 >

 

■ 정규화 란?

 - 관계형 데이터베이스 설계시 중복을 최소화 하도록 데이터를 구조화 하는 작업 (표를 세분화 시킨다.)

 - 정규화를 하는 목적 - 이상현상(Anomaly)이 있는 관계를 재구성함으로 써 바람직한 스키마로 구성

 

  정규화의 종류

 1. 제 1 정규화(1NF) : 다가속성 제거 (속성값은 2개 이상이면 안된다)

 2. 제 2 정규화(2NF) : 부분 함수 종속 제거

 3. 제 3 정규화(3NF) : 이행 함수종속 제거

    ㄴ 3.5 정규화 (B.C)

 4. 제 4 정규화(4NF) : 다치종속 제거

 5. 제 5 정규화(5NF) : 조인종속 확인

 


비정규형 테이블 => 제1정규화 (도메인 원자값 조건 만족)

 

▶ 제 1 정규화

  : 모든 속성은 반드시 하나의 값을 가져야 함. (다가속성 Multivalued Attributes, 복합속성 Composite Attributes)

  1) 1정규화 대상

   - 다가 속성이 사용된 릴레이션

   - 복합 속성이 사용된 릴레이션

   - 유사속성이 반복되는 릴레이션

   - 중첩 릴리에션

   - 동일 속성이 여러 릴레이션에 사용된 경우

 

  2) 도메인 원자값의 조건

   - 반복그룹이 존대해선 안된다.

   - 모든 행은 식별자로 완전하게 구분되어야 한다.

 

※  다가 속성인 부분은 테이블을 분리한다.

▶ 제 2 정규화 (복합Key일때)

  - 주 식별자가 두개이상의 릴레이션(복합키)일때 발생한다.

  - 모든 비 식별자는 주 식별자에 완전 함수종속이 되어야 한다. 

  - 비식별자 중 주 식별자 전체에 종속적이지 않은 속성을 찾아 제거하고 새로운 릴레이션을 생성한다.

 

▶ 함수종속 : Functional dependent A속성이 B속을 유일하게 식별할수 있다. 
  -  A속성 값이 변동되면 B속성값이 변동되어야 한다. 
      => 결정자(기준이되는 값,x)와 종속자(결정자에 의해 정해질수 있는 값,y)   Y=F(x)


※ 주민등록번호는 결정자이지만 주민번호는 기본키는 안된다. (주민번호는 반드시 암호화해야함)
    법적으로 사용이 제한되는경우 기본키로 쓸 수 없음

 

 

- 두개의 식별자(#A, B)중 C는 #A와 관련없고 #B에 종속되어 있다. => 부분 함수종속 발생!

- 원본 테이블에서 C를 제거하고 #BC를 별도로 새로운 릴레이션으로 작성한다.


▶ 제 3 정규화 (이행 종속 제거)

▷이행종속 : x->y->z 종속이 됨. z는 x에 간접적으로 종속되어있음. 직접종속인 x,y,z를 별도 분리

  - 비 식별자 간에 발생하는 이행적 종속성과 관련된 정규화

  -  A-> B -> C 

 

※ 기본주소 -> 우편번호에 종속됨.

   결정자는 우편번호. 이행종속 된것을 별도의 테이블로 구성을 해야함.

 

▶ 3.5 B.C 정규화 (Boyece and Codd) 

  : 제3 정규화를 보강한 정규화

    제3 정규화를 만족하면서 모든 결정자가 주 식별자여야 한다.

    모든 식별자는 후보식별자 이여야 한다. 

    모든 3정규화는 보이스코드는 아니다.
    모든 결정자가 후보자 집합에 속해야 한다.

 

 

 제4정규화(다가종속 = 다치종속 제거, MVD)

  - 조건 : 1~3정규형 + B.C 정규형을 만족하고 다가종속이 발생되어진 경우

  - 한 릴레이션에 다가속성이 두 개 이상 존재할때 발생

 

과목 =>> { 교재}

과목 =>> { 교수}

과목 =>> { 교재, 교수} 로 분리


▶ 제5정규화(조인종속 확인)

  : 테이블을 분할 했을때 분할된 테이블을 조인했을때 데이터의 손실없이 조인되는것

    A,B,C,D => AD, BC 분리 / 조인 / ABCD가 나와야 하는데 ABC 가 됨 => 손실 발생(제5정규화 위배)
   무손실 조인을 만족해야 함.

 

※ 무손실 조인 : 릴레이션을 분해한 후 공통식별자 속성으로 조인하였을 때 데이터의 손실없이 원본의 릴레이션 값과

                          동일한 값이여야 함

※ 비부가적 조인 : 조인한 결과 원본 릴레이션에서는 없는 데이터가 있는경우

구 분 제거 대상 특징
1차 정규화 다가속성, 복합속성, 반복속성, 중첩릴레이션 제거 모든 속성의 도메인이 원자값으로만 구성
2차 정규화 부분 함수종속 제거 복합키 일때 발생
모든 속성이 기본키에 완전 함수종속이 되어야함
3차 정규화 이행종속 제거 모든 속성을 직접종속으로 분리
3.5 B.C 정규화 종속자가 키(Key)에 포함된 함수종속 제거  
4차 정규화 다가종속(다치종속) 제거  
5차 정규화 조인종속 확인 릴레이션 분해 후 조인하였을때 무손실 조인이어야함.


▷역정규화/반정규화

  : 정규화를 시키지 않아서 얻는 이점이 정규화를 시켜서 얻는 이점보다 크기 때문에 정규화를 하지 않음

    작은 오류만 발생되어질 경우에만 가능(갱신, 삭제, 삽입 이상이 없을 때 가능)

    반 정규화도 정규화의 일부중 하나이다.

 

※ 정규화 이점

  - 업무요건의 변경에 유연하다. 확장성 좋음

  - 인덱스 수가 감소하고 특정 요건 초회할 때 SQL 요건이 단순해짐
※ 비정규화

  - 업무요건이 변경되면 해당되어지는 자료가 원치않은 결과를 되돌려져일수 있음. 확장성이 부족함(DB취약)

  - 인덱스의 수가 증가하고 특정 요건 조회할 때 SQL요건이 많고 복잡해짐. 불필요한 중복 발생
  - 개체(엔터티)의 속성이 추가될 가능성이 없을때 사용 가능

 

▷ 종속성과 폐포(closure) 
    = x가 결정자이고 y,z가 종속자이면 이때 x의 폐포는? x,y,z의 집합이 x+이다, (자기 자신을 포함해서)


▷ 종속성 추론 규칙
아노말리(Anomaly) = 데이터의 이상현상
이상현상의 종류 3가지 

 - 갱신이상 Update Anomaly

 - 삽입이상 Insert Anomaly

 - 삭제이상 Delete Anomaly


허용되어질수 있는 아노말리 : 업데이트, 인써트(삽입)
허용되어질수 있는 아노말리 : 딜리트(삭제)
=> 아노말리를 해결하기위해 정규화 해야한다


번외1) 


규칙2 : 다:다 관계는 릴레이션으로 변환한다(논리적 모델에서는 다:다 허용X)
           변환되는 과정에서 테이블 분리가 발생되어질수 있다. 두개의 부모로부터 받은 릴레이션으로 그 기본키를
           새 릴레이션의 자식의 기본키로 만든다.(식별관계) 


규칙3 1:다 관계는 왜래키로 표현한다 X => 관계의 속성이 포함되는 경우는 관계가 특별한 값을 가져야함
          =>릴레이션으로 만드는 방법이 효율적일수 있다.
          1:다 관계에서 속성이 없을때는 왜래키로 표현한다 O/꼭 기본키로 되는건아님.
          1:다 관계에서 속성이 있을때는 릴레이션으로 만드는게 더 좋을수도 있음


규칙4 1:1관계는 서로 왜래키로 주고 받는다, 필수참여이면 하나의 릴레이션으로 통합시킨다.
           불필요한 항목이 중복되어질수 있다.
           모든 개체가 필수적으로 참여하면 릴레이션을 하나로 합친다


규칙5 다중값 속성은 릴레이션으로 변환한다. (제1정규화로 만족하는 형태로 만들어야함)
          부하직원 : 다중값(여러가지의 속성이 나올수 있음) => 별도로 릴레이션 작성
          원본의 기본키+부하직원 복합키 => 자식테이블(식별자) : 부모테이블의 기본키가 자식테이블의 기본키가 되어서
           => 제1정규화


모든 컬럼은 값이 하나이여야 한다
모든 일반 컬럼은 기본 키 속성에 종속되어야 함.(NILL값 X, 중복X)
이것을 위배한다 => 제1 정규화 시켜야함





BUYER : 거래처
날짜가 없음, 별도로 관리할수있는 
매입에 관련된거 BUYPRO = 매입 테이블 => 단가는 있으면 안됨. BUY_COST 중복이 발생될수 있다
=>이상현상이 발생될수 있음 (업데이트 Anomaly(이상))


=================================================================

=========================================================
<오라클 데이터베이스 교안PPT>93p
테이블 명세서 작성
N.N - not null =>null값을 허용하지 않음
멤버변수 : 메소드 위치에서 선언되어지는 변수, 자동초기화
지역변수 : 메소드, 블록 안에서 선언되어지는 변수
스태틱변수
논문 [소프트웨어 위기론] 참고

오라클은 숫자위주 프로그램
초기값 무조건 null값으로 들어감
null : 길이를 갖지 않는 데이터(length:x)
null값이 들어간 식 값 = none

spacebar 40(16진수)
자바는 문자열은 "" 쌍따옴표 """" = white space
오라클은 문자열을 ''단따옴표 /'대한민국'/
=>''''단따옴표*2번= white space = null값으로 인식한다. 릴터럴 상수

한글을 영어로 바꾸는 사전이 필요함 : 자료사전(외국프로그램이라서 한글인식이 잘 안됨)

EXERD
명령어로 테이블로 만들어보자
-------------------------------------------
Developer -sql워크시트(초록색)-본인계정

2022-1108-1)SQL(Structure Query language)
- 구조적 질의 처리기
 . 변수, 분기문, 반복문 등이 존재하지 않음
- 1973년 SQUARE로부터 출발
- 1986년 ANSI-86표준안(1988년 ISO인정) : SQL 법적 기준
- 1992, 1999년 표준안 개정
- 명령의 분류
 . 검색명령 : SELECT
 . 조작어 DML(Data Manipulation Language) : INSERT/UPDATE/DELETE 
 . 정의어 DLL(Data Definition Language) : CREATE/ALTER/DROP 등 
 . 제어어 DLC(Data Control Language) : GRANT/REVOKE/COMMIT/ROLLBACK/SAVEPOINT 

객체 생성은 반드시 CREATE 사용
사용자 권한부여 GRANT
REVOKE 권한회수 =>관리자 사용
COMMIT : 트랜잭션이 끝나면 정상적으로 저장되도록 만드는 것
ROLLBACK : 트랜잭션 전으로 돌아가기

 1. CREATE TABLE 명령 (가장 표준적인 방법) 
  - 테이블 생성 명령
  (사용형식)
  CREATE TABLE 테이블명 (
    컬럼명 데디터타입[(크기)] [NOT NULL][DEFAULT 값] [,]
                        .
                        .
    컬럼명 데이터타입[(크기)] [NOT NULL][DEFAULT 값] [,]
    [CONSTRAINT 기본키설정명 PRIMARY KEY(컬럼명[,컬럼명,....])[,]]
    [CONSTRAINT 왜래키설정명 FOREIGN KEY(컬럼명)
        REFERENCES 테이블명(컬럼명)] [,]
                        .
                        .
    [CONSTRAINT 왜래키설정명 FOREIGN KEY(컬럼명)
        REFERENCES 테이블명(컬럼명)];


 . '데이터타입' : 오라클에서 사용할 수 있는 자료타입 기술
   - 문자열타입 CHAR, VARCHAR, VARCHAR2, CLOB, LONG 등
   - 숫자타입 NUMBER
   - 날짜타입 DATETIMESTAMP
   - 이진자료 RAW, BLOB, BFILE 등


 . 'DEFAULT 값' : 사용자가 기술하지 않았을 경우 기본적으로 입력되는 값
 . '기본키설정명' : 기본키 설정에 붙여지는 이름으로 고유한 이름이여야 함
 . 'PRIMARY KEY(컬럼명,..)' : 기본키로 사용되는 컬럼명
 . '왜래키설정명' : 왜래키 설정에 붙여지는 이름으로 고유한 이름이여야 함
 . 'REFERENCES 테이블명(컬럼명)' : 부모테이블명과 부모테이블에서 사용된 컬럼명
 
--------------------------
사용자 정의 단어 기술 유의점
$ 되도록이면 쓰지마라. 풀네임으로 써라, 한글은 쓰지마라
데이터 타입은 크게 4가지.
자바=문자의 배열이 문자열
오라클은 문자가 없다 =>문자열, 문자의 집합체로 인식''
문자열을 나타내는 데이터 타입 여러개
CHAR : 고정길이 문자열, 데이터 저장될 길이가 정해져 있음. 왼쪽부터 저장됨.오른쪽은 공백
데이터가 길면 저장 불가능.=>오류(데이터가 중간에 짤리지 않음)
나머지 가변길이 VARCHAR, VARCHAR2, CLOB, LONG : 데이터 길이만큼만 쓰고 운영체제에 반납함.
가변길이의 표준 : VARCHAR 최대 4000바이트 저장 (오라클은 VARCHAR 안쓴다 => VARCHAR2를 써라)
LONG : 문자열 저장 최대 2G Byte 저장 가능 (현재는 잘 안씀=>더이상의 서비스개선 중지됨)
  ㄴ 하나의 테이블의 한 컬럼만 쓸수 있기 때문에 =>CLOB를써라
CLOB : 4G Byte 저장 가능

VARCHAR2 많이사용 - CHAR 두번째 많이 사용 - CLOB 가끔 사용

숫자타입 : NUMBER(정수, 실수 둘다 사용 가능)
날짜타입 : TIMESTAMP : 십억분의 1초까지 사용 가능

defualt 값 : 사용자가 생략하면 기본적으로 들어갈 값을 설정해줌
null값 => 연산하면 연산 불가
null 대신에 0 들어가게 하라 : defualt = 0;


[,] 콤마가 붙는다 : 오라클은 statement 명령문 - 명령문 안에 절[(왜래키 설정)]
 => [컬럼 절이 아직 안 끝났다.] CREATE 명령문이 아직 안끝났다.

CONSTRAINT 기본키 설정 : 컬럼명 중 하나 => PRIMARY KEY
메타데이타를 가지고 있는 것은 시스템 테이블
2개의 부모에서 가져온 2개의 왜래키
FOREIGN KEY(컬럼명-CREATE 컬럼명 중 1) => 2개의 절로 써야함
REFERENCES (참조하는)테이블명1(컬럼명)] => 테이블 명을 2개 동시에 쓸수 없으므로
REFERENCES (참조하는)테이블명2(컬럼명)] => 2줄을 써야함(컬럼명은 달라야함)
(컬럼명, 콤마로 쓸수있음)
 
예제) 가장 상위의 테이블 먼저 작성해야함.
1) EMP, SITE
2) WORK, SITE_MAT
 
 EMP_NAME VARCHAR2(30) NOT NULL, (N.N=X) NULL값을 허용하지 않음
 TEL_NUM VARCHAR2(20), 왜래키 없음 기본키만 있음
   CONSTRAINT pk_EMP_ID 소문자로 써도됨. 나중에 저장은 대문자로 출력

emp 테이블 - 제약조건 탭
constraint name
1. emp_id
2. sys_c007050

 

 

 



< 데이터베이스 설계 >

1. 요구사항 분석

2. 개념적 설계

3. 논리적 설계

4. 물리적 설계와 구현

 

▷ 데이터 베이스 설계 : 사용자(클라이언트 = 고객)의 다양한 요구사항을 고려하여 데이터 베이스를 생성하는 과정

▷ 관계데이터베이스의 대표적인 설계 방법

  - E-R 모델과 변환 규칙을 이용한 설계 (Entity-Relationship Diagram)

  - 정규화를 이용한 설계

 

 ▶ E-R 모델과 릴레이션 변환 규칙


< 데이터베이스 설계 >
1.  요구사항 분석결과물 : 요구사항 명세서

     : 사용자의 요구사항을 수집하고 분석 (업무에 필요한 데이터가 무엇인지)

 

▷ 주요 작업

  1) 데이터베이스를 실제로 사용할 주요 사용자의 범위 결정

  2) 사용자가 조직에서 수행하는 업무를 분석

  3) 면담(인터뷰), 설문조사, 업무관련 문서 분석등의 방법을 이용해 요구사항 수집

  4) 수집된 요구사항에 대한 분석결과를 요구사항 명세서로 작성

※ 검증할수 있는 도구 : USECASE 다이어그램(UML:Unified Modeling Language)

 

2. 개념적 설계  결과물 : E-R 다이어그램(개념적 스키마)
    : 요구사항을 분석한 결과에 따른 데이터베이스의 구성요소들을 판별

      개념적 데이터 모델을 이용해 개념적 구조로 표현 ( 일반적으로 E-R 모델 이용)

      요구사항 분석결과를 기반으로 중요한 개체(Entity)를 추출하고 개체간의 관계를 결정하여

      E-R 다이어그램으로 표현

 

*   E-R 다이어그램은 많은 공간을 차지한다.

 

▷ 주요 작업

  1) 개체(Entity) 추출, 각 개체의 주요 속성과 키 속성 선별 

  2) 개체간의 관계(Relationship) 결정

  3)  E-R 다이어그램으로 표현(= 개념적 스키마)

 

 (1) 개체 추출

* 개체 : 저장할만한 가치가 있는 중요 데이터를 가진 사람이나 사물을 나타내는 명사 추출
 (고유명사 제외, 광범위한 의미의 명사는 제외, 의미가 같은 여러명사 여러개는 대표 하나만)

ex ) 한빛 마트에 회원으로 가입하려면 회원아이디, 비밀번호, 이름, 나이, 직업을 입력       가입한 회원에는 등급적립금이 부여된다. 회원은 회원아이디로 식별한다.

☞ 결과 

    개체 : 회원

    '회원' 개체의 속성 : 회원아이디(식별자), 비밀번호, 이름, 나이, 직업, 등급, 적립금

    '회원' 개체의 키 속성(식별자) : 회원아이디

 (2) 개체간 관계 결정

    : 동사를 찾아라. (2개의 명사 사이에서 기술하는 동사)

      찾아낸 관계에 대해 매핑 카디널리티(차수) 특성 결정 = 1 : 1(일대일), 1 : n (일대다), n: m(다대다)

      ※ 다대다 관계는 개념적 모델에서만 가능하다.

ex ) 회원은 여러상품을 주문할 수 있고, 하나의 상품을 여러 회원이 주문할 수 있다.

       회원이 상품을 주문하려면 주문에 대한 주문번호, 주문수량, 배송지, 주문일자 정보를 유지해야한다.

☞ 결과 

회원 - 상품 ( 1: n 일대다)

관계 = '주문'  / 관계는 속성을 가질수 있다.

'주문'-관계의 속성 : 주문번호, 주문수량, 배송지, 주문일자

 

3. 논리적 설계  결과물 : 논리적 스키마 = 릴레이션 스키마(표)

  - 개념적 설계의 결과물인 E-R다이어그램(개념적 스키마)을 사용
  - DBMS에 적합한 논리적 스키마 설계

  - 릴레이션(표)을 만듦. --------->> 추후 정규화 과정이 중요함. 정규화과정을 거쳐서 오류를 없앰
  - DBMS의 종류가 설정됨 및 속성의 데이터 타입이 결정됨.

   (데이터타입, 데이터 저장 길이, Null값 허용여부, Defualt 기본값, 제약조건 등)

 

▷ 주요 작업 : E-R 다이어그램을 릴레이션 스키마(표)로 변환
  1) 규칙 1 : 모든 개체는 릴레이션으로 변환한다.

                   개체의 이름-> 릴레이션의 이름/식별자->기본키(pk)
                   복합속성인 경우 단순속성만 릴레이션으로 변환 
                   주소(복합속성): 기본주소(단순)+상세주소(단순) => 주소를 지우고 단순속성만

  2) 규칙 2 : 다대다(n:m) 관게는 릴레이션으로 변환한다 (개념적 설계에서만 표현 가능)

                   관계의 이름 : 릴레이션 이름

                   관계의 속성 : 릴레이션의 속성

  3) 규칙 3 : 일대다(1:n) 관계는 왜래키(fk)로 표현한다

  4) 규칙 4 : 일대일(1:1) 관계는 왜래키(fk)로 표현한다

  5) 규칙 5 : 다중 값 속성은 릴레이션으로 변환한다. (제1정규화의 일부)

 

4. 물리적 설계  결과물 : 물리적 스키마 

DBMS로 구현 가능한 물리적 구조 설계

=> 분할된 테이블이 적절하게 분할 되었는지확인. 분할과 통합과정
     테이블 설계에 대해서 경험과 지식이 겸비되었을때 할 수 있음.
    한글 -> 실제로 구현시킬 영문명으로 바꿈


5. 구현 : SQL 문을 작성한 후 이를 DBMS에서 실행하여 데이터 베이스 생성


번외1)
2. 개념적 설계 
회원->상품 1:다 상품->회원 1:다 => 다:다
주문서-결제(1:1) 혼인(1:1) 
차수(카디널리티) : 1:1, 1:다, 다:다
E-R다이어그램 : 사각형 : 엔터티 / 마름모 : 관계(릴레이션쉽) / 타원 : 속성
소속 관계, 전체 차수 표현(부서->사원 1:다)
고객-상품(주문이라는 관계) 전체차수 다:다 = M : M


상품번호 : 상품을 구별하기위해 만듦 : 인조키
상품번호를 미리 만들수도 있다


요구사항에서 ->명사(주어, 목적어)로 추출 => 엔터티와 속성이 됨.
주종관계 주인: 엔터티(고유명사, 제외, 동의어는 한개만) , 종속된 것이 속성



회원-상품 동사 : 주문하다(상품, 회원-명사2개)=> 관계OK, 유지하다(주문-명사1개)=> 관계X


상품(엔터티)은 상품번호(식별자)로 식별한다.
제조업체(엔터티)는 제조업체명(식별자)으로 식별한다.
게시글(엔터티)은 글번호(식별자)로 식별한다.


번외2)

* 프로토타입 : 비용과 시간문제로 잘 안씀
* 한번에 모든것을 끝낼수는 없다.
* 개정이력 작성
* SVN 서버 : 개발 처음~끝까지 히스토리가 들어있음(두번째 프로젝트에 쓸것). 코드관리.버전관리
* 기준을 클라이언트(사용자) 위주로 생각하자


 

< 데이터베이스 모델링 E-R  설계 도구 설치 및 실습 >

EXERD 검색 -> 이클립스 기반 지능형 E-R 모델링도구
https://www.exerd.com
다운로드-플러드인->링크주소복사->이클립스 실행
->워크스페이스 주소 : D:\A_TeachingMaterial\02_Oracle 변경
->화면우측상단 워크벤치WORKBench?
help메뉴-인스톨 뉴 소프트웨어-Work with : http://exerd.com/update/exerd/3.x 
이름 : eXERD 주소 : http://exerd.com/update/exerd/3.x
체크박스 체크 후 next-> 동의 -> finsh -> intalling software(설치중 확인)
이클립스에서 수행하는 작업의 종류
NEW-EXERD File-새프로젝트
다른 모델링 도구 엔코아 DA#5 (개념 모델링까지 지원 가능, BUT 어려움)
경고 메세지 => 이클립스만 RESTART? => RESTART NOW 선택

작업단위 퍼세티브 OPEN Perspective => eXERD 현재 등록안됨...=> 추후 재시도
D드라이브- 설치- 26 이클립스

 

 

< exerd 실습>
테이블 누르고 - 사원 -테두리 선택된 채로 스페이스바 : 속성
논리이름: 한글 /물리이름 : 영어
컬럼 : 기본키 더블클릭 : pk /열쇠모양 / 데이터타입 : char(n->4)
사원이름 데이터타입 : varchar2(30)
부서명 데이터타입 : varchar2(50)
N.N : not null 
null : null을 허용하겠습니다.
사업장
사업장번호 데이터타입 : number(4)

=> 릴레이션 스키마로 변경
다대다 관계는 릴레이션으로 변경
부모키-자식키로 가져오면서 자식키의 기본키가 됨 : 왜래키(f)
사업장번호 : 고동색(기본키) / f: 왜래키 / 근무의 사원번호 : 일반 컬럼(f) 군청색
사업장이 부모이고 사업장 자재가 자식(1:다 => 다 : 자식)
사업장 자재명코드로 이미 구별할 수 있기 때문에 사업장-사업장자재는 비식별 관계이다
=> 논리설계 끝

exerd 메뉴
포워드 엔지니어링 : 순공학 => 테이블을 만들수 있는 코드가 나온다
리버스 엔지니어링 : 역공학 

※ 데이터 입력할때도 부모키 먼저 입력하고 자식키 입력

 

< 관계형 데이터모델 개념 >

▶ 관계형 데이터 모델

 - 현재 가장 많이 사용되는 데이터베이스 모딜

 - 데이터가 최소한의 의미를 가지는 테이블(표) 형태로 표현

 - 사용자가 데이터를 쉽게 다룰수 있도록 해주는 구조적 질의어(SQL)를 제공


■ 릴레이션(relation)

 - 테이블이 되는 개체 

 - 관계형 데이터 베이스에서 정보를 구분하여 저장하는 기본단위
 - 동일한 데이터베이스 내에서는 같은 이름을 갖는 릴레이션이 존재할 수 없다 

 - 테이블의 행(튜플) 과 열(컬럼) 


■ 튜플(tuple :행) 

 -실제 데이터가 저장되어있는 행.

 - 자바 객체지향언어에서는 '인스턴스' 라고 부름
 - 개체에 속한 구성원들의 개개의 정보를 표현
           고정된 갯수를 가진게 아니라 다양하다. 

            튜플은 하나도 존재하지 않을 수도 있다(데이터 0) (튜플은 0개 이상 / 속성은 1개 이상)
           
■ 속성(attribute / 값) 

 - 릴레이션에서 관리하는 구체적인 정보 항목(필드)

 - 관리해야 할 필요가 있는 속성들만을 선택하여 릴레이션에 포함

 - 속성은 고유한 이름을 가지며 동일 릴레이션 내에는 같은 이름의 속성이 존재할 수 없음

 - 릴레이션 안에 속성은 1개 이상 있어야함. 

  나중에 컬럼이 됨. 결정자(x)의 값이 변하면 종속자(y)의 값이 변한다.
  테이블에서 결정자(x) 역할을 해주는 컬럼= 기본키(pk) = 기본키가 변하면 다른 속성들도 변한다.
 

■ 도메인(domain)

- 각 속성들이 가질수 있는 집합의 범위

  성별 : 남, 여  => 데이터베이스 설계자가 설계할 때 도메인으로

                             'Gender'라는 도메인의 값은 {남, 여} 로 정의

 

 

 

E.F.Codd의 용어 File 시스템의 용어  자주 사용되는 용어
릴레이션 파일 테이블
속성 필드 열(컬럼)
튜플 레코드 행(row)

※ E.F.Codd : 통계학자


< 키(KEY) >

 -  중복여부를 효과적으로 알수 있도록 하는 수단

 

■ 키(KEY) 의 종류

 - 기본키(Primary key : pk)

 - 후보키(Candidaate key)

 - 대체키(Alternate key)

 - 복합키(Composite key)

 - 왜래키(Foreign key)

 

 키 종류 : 기본키(도지사1), 후보키(도지사 후보자3-Candidate) 
  대체키 : 기본키가 안되는 나머지 키 (후보자2)
  프라이머리키= 기본키 (기본키 + 대체키 = 후보키)

 

▷후보키 (Candidaate key)

 - 테이블에서 각 튜플을 구별하는데 기준이 되는 하나 혹은 그 이상의 컬럼(열)들의 집합

   후보키는 테이블에 있는 각 튜플을 고유하게 식별할 수 있어야함.

 - 후보키는 기본키, 대체키로 구분

 

▶ 기본키 (Primary key : pk)  :  튜플을 식별하는 기준으로 사용

 - 후보키들 중 하나

 - 중복된 튜플이 입력되는 것 방지

 - 기본키가 되는 조건 : 속성 값이 'Null' 이어선 안됨 (데이터 없음), 중복 된 속성 값X

 

※ 후보키들 중 기본키로 선택하는 기준은?

 - 해당 테이블을 대표 할 수 있는 것

 - 데이터의 길이가 짧은 것

 - 빈번히 사용되는 컬럼(열)

 

▷ 복합키 (Composite key)

  : 하나의 컬럼이 후보키의 역할을 하지 못하고 두개 이상의 컬럼(열)이 합쳐져야

   후보키의 역할을 하는 경우 (2개의 컬럼이 튜플을 식별)

 

  ※ 복합키 : 하나가지고는 중복이 발생되어서 컬럼이 두개는 있어야 중복이 안됨

▶ 왜래키 (Foreign key)

 - 관계가 있는 테이블들 사이에서 데이터의 일관성을 보장해 주는 키

 - 두 테이블 사이에 존재하며 부모 - 자식 관계이다

    부모테이블의 기본키(pk) = 자식테이블의 왜래키(fk)로 전이된다.

 

관계가 맺어짐 : 서로 공통의 컬럼을 공유한다
   왜래키(foreign key) : 관계를 맺는 역할을 하는. 자식의 역할을 하는 키 = 왜래키
   기본키(primary key) : 주민등록번호 (겹쳐지지 않음)

 

 

※ 데이터의 무결성

 - 참조 무결성

   : 자식테이블에 데이터를 입력하거나 수정 할때 부모테이블에 해당 데이터가 있는지를 검증

     부모테이블의 데이터를 수정하거나 삭제할때 자식테이블에 해당 데이터를 사용하는지를 검증

 - 개체 무결성

 - 도메인 무결성


▶ 관계형 데이터 모델의 구성요소

 - 데이터의 구조 (릴레이션 - 튜플/속성)

 - 관계연산 (집합연산/ 관계연산)

 - 제약조건 (무결성의 규칙 - 참조 무결성 등)

 

→ 릴레이션(표) = 튜플(행) 과 속성(컬럼)의 집합으로 구성
→ 릴레이션 스키마 (제일 첫번째 행)
→ 전체 표 = 테이블 스키마
→ 릴레이션에 저장된 튜플은 유일한 값을 가져야 함
→ 행의 순서 상관없음
→ 모든 속성 값은 원자값이어야한다(atomic value) : 더이상 나뉘어 질 수 없는 논리적인 최소 단위

 

 

▷ 관계형 데이터모델의 성공요인
 1) 단순하고 이해하기 쉬운모델
 2) 수학적 이론을 기반으로 한 모델
 3) 비절차적인 질의어 지원(SQL) /  변수없음, 반복문 없음, 상수 없음
 4) 지속적인 투자와 기술 지원


< 데이터베이스 설계 및 구현 >

1. 요구사항 분석

2. 데이터 모델링

3. 테이블 설계

4. ER-Win 이용한 모델링 /eXERD



I.E표기 방법 (릴레이션 이름 : 회원 (기본키) / 릴레이션 : 회원번호(일반항목, 일반 속성))
<< 사진첨부 예정
Baker식 표기 방법 : #(기본키 : 회원번호), *(필수항목 : 회원명) 0공백(선택항목 : 전화번호)
관계는 마름모로 표기 (회원 -◇- 상품) 마름모 : 관계 / 타원 : / 엔터티 : 개념모델
다 : 다 관계 없앰 => 회원/상품(부모pk) - 주문(자식pk) : 상속이 됨 (회원번호, 상품번호 =>묶여서 pk)
직선으로 연결되면 부모의 pk->자식 pk 
점선으로 연결되면 부모의 pk->자식의 속성이됨(fk : foregin key 참조 당하는)
1개이상의 컬럼으로 만들어지는 키 : 복합키
주문이라는 릴레이션 -> 속성 : 수량, 날짜
<< 사진첨부 예정




식별자 관계 : 부모가없어지면 자식이 아무 의미가 없어짐(주문서->결제)
비식별자 관계 : 부모가 없어지더라도 자식이 그대로 남아있음
관계가 맺어진 테이블은 삭제 불가능(delete) -> 관계를 없애야 삭제 가능


delete on cascade: 자식테이블 먼저 지우고 부모테이블에서 지움
부서코드를 110으로 하려면 부모에서 110번을 추가하고 자식에서 110으로 바꾸고 부모100을 삭제함
참조 무결성이 안됨 => 삭제연산을 거절
참조 무결성 : 자식테이블에 데이터를 입력하거나 수정할 때 부모테이블 검증
      부모테이블에 데이터를 입력하거나 삭제할 때 부모테이블 검증
=> 개체 무결성
=> 도메인 무결성

 

제약조건 :무결성의 규칙, 유일성, 최소성
참조 무결성의 규칙 
도메인의 무결성 규칙 (대학교 : 1~6학년, 범위 값을 넘어가면 잘못됨. 나이 제한 사이트, 데이터 타입)
 - 속성에서 허용한 가능한 값의 범위를 지정하기위한 제약 조건
 - 속성의 데이터 타입, 길이, 기본키, 유일성, null허용, 허용 값의 범위와 같은 제약 조건 지정 가능


 

< SQL > (Structured Query Langauage) : 구조적 질의 언어

 - 사용자들이 쉽게 사용할 수 있음.

 - 대부분의 DBMS 제품에 동일하게 적용

 - SQL 은 비 절차적언어이다.

   절차적 언어(preocedural language) : 순서,문제지향언어. 변수, 함수, 조건 연산자, 반목문 등 
   비절차적 언어(non- preocedural language) : 컴퓨터의 실행 순서에 관계없이 처리내용을

                                                                          기술할 수 있는 언어(함수x, 변수x)
                                                                           


번외)

 

* 정규화 과정 (6개의 과정) 속성들이 pk에 완전 종속이 되어야 하고 중복이 없어야함. 
조건을 만족하기 위해 테이블을 세분화 한다. -> 관계를 맺어야 함(릴레이션쉽)

 


※정렬 - 어센딩(asc), 디센딩(desc)
입사일이 빠른사람이 작은값(어센딩, 오름차순)
급여가 많은사람부터 적은사람(디센딩, 내림차순)

※디폴트(asc) default value : 생략
제임스 고슬링 : 자바를 만든 사람

 

※ 인덱스 : 키와 주소로 구성(기본키pk 기준으로 인덱스가 만들어짐). 빨리 찾기 위해서(재구성하는데 시간이 걸림)

 

- 프로그램 설치 - 
▷ E-R WIN
CA AllFusion ERwin Data Modeler r7 설치
시리얼 :RPQEU NL3L7 PWQTU 4KBMW C232A
파일-new-logical/Physical(오라클)-ok
로지컬 옆-선택툴키,엔터티,
모델-프로퍼티스-natation 표현방법->IE 로지컬, 피지컬 둘다 (오리발식 표현) 확인=>바커식으로 표현할수 없음
------------------------------------------------------------------------------------------


▶ EXERD 검색 -> 이클립스 기반 지능형 E-R 모델링도구 (이클립스 구버전에 설치)
https://www.exerd.com
다운로드-플러드인->링크주소복사->이클립스 실행->워크스페이스 주소 : D:\A_TeachingMaterial\02_Oracle 변경
->화면우측상단 워크벤치WORKBench?
help메뉴-인스톨 뉴 소프트웨어-Work with : http://exerd.com/update/exerd/3.x 
이름 : eXERD

 

< 데이터 베이스 개론 시작 >

- 제 1장 : 데이터베이스 기본개념

1. 개요

2. 데이터베이스 정의

3. 데이터 처리 시스템

4. 파일관리 시스템 vs 데이터베이스 관리 시스템(DBMS)

5. 데이터 베이스 시스템역사


1.1 데이터와 정보

1) 데이터(data) : 현실세계로부터 관찰이나 측정 등의 수단을 통해 수집한 사실(facts)이나 값(values)

2) 정보(information)

- 데이터는 사실들 그 자체에 대한 일차적인 표현

- 사실들과 이들로부터 유도될 수 있는 유추된 사실들

- 틀정 상황에 대한 의사결정을 내릴수 있는 유용한 해석이나 데이터 상호간의 관계를 의미함.

 

※ 데이터(원본자료)와 정보(추출된 데이터)

 

1.2 메타데이터(Metadata)

- 데이터에 대한 데이터 (데이터 of 데이터 : 핵심데이터만 보관)

- 데이터의 구조(structure)나 제약사항(constraints) 등과 같은 속성(properties)이나

특성(characteristics)을 기술하는 것

 

 

 

('이름' - 속성 attribute-> 컬럼

행 (row, 튜플) , 열(colum, 컬럼)

각 열의 값들의 집합 = 도메인

유형은 사용되어지는 dbms에 따라서 명칭이 달라짐.)

 

1.3 지식(Knowlede) - 기계학습(ai 분야 쪽 사용)


2. 데이터베이스의 정의와 특성

 

2.1 데이터베이스의 정의

: DataBase

중복에 의한 데이터 불일치 최소화시키는 것.

특정 조직내에 다수의 사용자들이 공유할 수 있도록 통합시키고 컴퓨터 저장장치에

저장시킨 운영 데이터의 집합

 

 1) 통합된 데이터(Integrated Data) : 자료의 중복을 배제한 데이터 모임

 2) 저장된 데이터(Stored Dta):컴퓨터가 접근할 수 있는 저장매체에 저장된 자료

 3) 운영 데이터(Operational Data) : 조직의 고유한 업무를 수행하는데 존재가치가 확실하고

                                                        없어서는 안될 반드시 필요한 자료

 4) 공용 데이터(Sharaed Data) : 여러 응용시스템들이 공동으로 소유하고 유지하는 자료

 

※ SQL : 구조적 질의어. 사용자가 얻고싶은 자료를 얻을수 있도록 내리는 명령어.

         (반복실행X/한번 실행하면 끝남. 기능이 약함.이해가 쉽지만 기능 한계점)

※ PLSQL : 변수 사용가용, 분기문, 반복문 사용 가능

데이터들은 명령에 의해 삽입, 삭제 할 수 있음.(조작어 수행) -> 데이터 변경

내용 변경이 휘발되기전에 하드디스크에 저장 시켜야 함. (comit/롤백rollback)

 

2.2 데이터베이스 특징

 1) 실시간 접근(Real-Time Accessibility)

   : 검색이나 조작을 요구하는 질의가 있을 때 현재 데이터 베이스에 수록된 데이터베이스를 사용하여

     실시간으로 처리하고 응답하는 데이터베이스 시스템의 특성.

 2) 계속적인 변화(Continuous Evolution)

   : 데이터베이스의 상태는 동적임. 새로운 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update)으로

     항상 최신의 데이터를 유지

 3) 동시 공유(Concurrent Sharing)

   : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것으로 다수의 사용자가 동시에 

     같은 내용의 데이터를 이용할 수 있어야 함.

 4) 내용에 의한 참조(Content Reference)

   : 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라

     사용자가 요구하는 데이터 내용으로 데이터를 찾는다.


3. 데이터 처리 시스템

3.1 일괄처리 시스템 VS 온라인 처리 시스템

  1) 일괄처리 시스템 : 일정기간동안 데이터를 모아서 일시에 작업을 처리하는 시스템

  2) 온라인 처리 시스템 : 작업 처리요구가 발생하면 즉시 시스템에서 처리함

 

3.2 오프라인 처리 시스템 VS 온라인 처리 시스템

  1) 오프라인처리 시스템 : 특정작업을 처리하는 도중에 저장 데이터에 접근할 수 없는 시스템

  2) 온라인 처리 시스템 : 작업 처리중 저장 데이터를 접근하여 사용할 수 있는 시스템

 

3.3 중앙집중처리 시스템 VS 분산 처리 시스템

  1) 중앙집중 처리 시스템 : 중앙 컴퓨터에 데이터를 집중시켜 처리하는 시스템

  2) 분산 처리 시스템 : 지역적으로 떨어져 있는 컴퓨터에 데이터를 분산시켜 처리하는 시스템


4. 파일관리 시스템 VS 데이터베이스 관리 시스템

4.1 파일관리 시스템 : 파일을 생성, 검색, 조작할 수 있는 소픝웨어 시스템 

 1) 파일관리 시스템 문제점

   - 데이터의 중복이 심각하게 발생

   - 데이터의 불일치가 발생 (삽입이상, 삭제이상, 갱신이상 등 오류 발생)

   - 응용 프로그램이 파일의 형식에 종속

   - 프로그래밍 언어마다 파일의 형식이 다름

 

※ 파일관리시스템을 개선.보완 => 데이터 베이스 관리 시스템

 

4.2 데이터베이스 관리 시스템(DBMS : DataBase Managment System)

 1) 데이터베이스 관리 시스템의 장점

   - 데이터의 중복이 줄어듬 (아예 없진 않음)

   - 데이터의 불일치를 피할 수 있음

   - 응용프로그램과 데이터의 독립성이 유지됨

   - 응용프로그램과 데이터 형식의 표준화를 가함

   - 데이터의 접근의 보안과 무결성 유지가 용이함

 

※ 참조 무결성 : 검색하고자 하는 데이터가 해당 테이블에 있는지 확인

 

 2) 데이터베이스 관리 시스템의 단점

   - 시스템을 이용하는 비용이 비쌈

   - 파일관리 시스템을 이용하는 것보다 상대적으로 속도가 느림

  (테스트 버전 출시 (처리데이터의 용량이 다를뿐 기능은 같음)/처리 속도가 느림)

 

※ 관계형 데이터베이스 시스템 : 테이블-테이블이 관계를 맺어야 하고. 동일한 칼럼(열)을 공유함

                                                     (부모-자식 테이블)

 

기본키가 있어야함 : null값이 아니여야함. 중복되서는 안됨

왜래키 : 자식테이블에서는 왜래키 사용

길이가 없는 데이터 : null (전체 컴퓨터 사용 개념) = white space

java 문자열 "" (쌍따옴표)

오라클 문자열 ''(그냥 따옴표)

다:다 개념적까지만 허용됨.

부모에 있는 기본키(상품번호/회원번호)를 자식(주문)이 기본키로 가져옴(중복 안됨)


5. 트랜잭션

   : 논리적 기능을 수행하는 일련의 연산 집합 작업 단위 (반드시 comit이나 롤백으로 끝나야함)

     회복 및 병행 수행시 처리되는 작업의 논리적 단위

※ 정상적 종료 : COMMIT(기억장치에 저장)

※ 비정상적 종료 : ROLLBACK. 트랜잭션 수행 전으로 돌아감

 

5.1트랜잭션의 특성

1) 원자성

   : 트랜잭션의 처리는 완전히 끝마치치 않을 경우 해당 수행이 이루어지지 않는 것과 같아야 함

     오류가 발생되면 그 트랜잭션은 모두 취소되야함.

    모든 명령어를 완벽히 수행하여 comit 되지 않으면 안된다. 중간에 오류가 발생되면 철회한다(aborted)

2) 일관성

   : 트랜잭션들 간의 영향이 한 방향으로만 전달되어야 한다.

     수행을 성공적으로 완료 한 후 고정요소는 변동이 없어야 한다

 

<하나의 트랜잭션 수행>

구매테이블 => 판매테이블 : 날짜, 상품번호, 수량 저장 => 재고테이블에서 재고 관리

=> 회원테이블에서 마일리지 처리

이 수행 과정에 회원번호, 상품번호(고정요소)가 바뀌면 안된다. => 일관성

 

3) 고립성

   : 하나의 트랜잭션이 수행되어 완료되지 않는 중간에 다른 트랜잭션이 접근하지 못하도록 한다

     한 회원이물건을 구매해서 장바구니에서 구매내역 테이블을 자동으로 만들어줌 = 트리거

4) 지속성 : 성공적인 트랜잭션의 수행 후에는 반드시 데이터베이스에 영원히 반영해야 한다.

 

 

 

 

+ Recent posts