무결성

1. 무결성

- 데이터에 결함이 없다

- 데이터의 정확성, 일관성, 유효성이 유지되는 것

 

2. 무결성을 판단하는 3가지

   1. 정확성
   - 데이터베이스에 저장된 데이터는 정확해야 한다. 
   2. 일관성
   - 같은 데이터라면 다른 테이블에서도 일관되어야 한다. 
   3. 유효성
   - 데이터는 정의된 규칙과 제약조건에 따라 유효해야 한다. 

 

3. 무결성의 3가지 종류

   1. 개체 무결성
   - 각 행은 행을 구분할 수 있는 고유한 식별자를 가져야 한다. 
   - 모든 테이블이 PK로 선택된 컬럼을 가지고 있어야 한다.
   2. 참조 무결성
   - 두 테이블간의 관계를 유지하는 제약(FK)을 나타낸다. 
   - 관계형 데이터베이스에서 다른 테이블의 데이터를 참조할 때 데이터의 일관성을 보장해야 한다. 
   3. 도메인 무결성
    -  칼럼의 자료형, 제약조건에 대한 사항을 정확하게 정의하고 올바른 데이터가 들어왔는지 확인하는 것

 

4. 모델링(기획)

    1. 요구사항 분석 단계
    - 클라이언트의 요구사항을 분석하는 단계
    - 예시: 클라이언트의 요청 (회원, 주문, 상품 정보를 관리하고자 한다. )
    2. 개념적 설계 단계
    - 요구사항 분석 단계에서 나온 결과물을 토대로 ERD를 통한 개념적 설계만 진행하는 단계 
      (테이블 간의 관계를 개념적으로 나눠놓는다. )

    예시

     |=============|=============|=============|
                회원                               상품                              주문
     |=============|=============|=============|
          회원번호             상품번호               주문번호
          아이디                 상품명                  주문날짜
          비밀번호             가격
          이름                    재고량
          주소
          이메일
          생일
      |=============|=============|=============|

    3. 논리적 설계 단계
    - KEY, 제약조건 설정 등 개념적 설계에서 나온 결과물을 토대로 테이블화 한다. 

    예시

     |=============|=============|=============|
                회원                             상품                                주문
     |=============|=============|=============|
          회원번호(PK)      상품번호               주문번호
          아이디(UK)         상품명                  주문날짜
          비밀번호             가격
          이름                    재고량
          주소
          이메일(UK)
          생일
      |=============|=============|=============|


    4. 물리적 설계 단계
    - 시퀀스, 조인 등 데이터베이스의 성능을 향상시키는 것들에 대해 정의하고 물리적 설계에서 나온 결과물을 토대로 바로 테이블을 구현할 수 있도록 만들어 준다.  (타입, 용량, 컬럼명 정의 등등 실행된다.)

     예시

     |=======================================================|
                                                                TBL_USER
     |==================|==================|==================|
         USER_NUMBER            NUMBER                       PRIMARY KEY
         USER_PASSWORD       VARCHAR2(500)
         USER_ID                        VARCHAR2(500)           UNIQUE
         USER_NAME                 VARCHAR2(500)
         USER_ADDRESS          VARCHAR2(500)
         USER_EMIAL                 VARCHAR2(500)           UNIQUE
         USER_BIRTH                 DATE

     |==================|==================|==================|

    5. 구현 단계
    - 디비버같은 데이터베이스 환경에서 구현한다. 

 


실습

 

    1. 요구사항 분석 단계
 
     [ 클라이언트 요청 ]
     도서관에서 회원의 정보와 책의 정보가 필요하다.
     회원의 정보는 회원번호, 이름, 나이, 핸드폰 번호, 주소가 필요하고
     책의 정보는 도서번호, 책 이름, 카테고리가 필요하다. 
     단, 카테고리는 인문학, 추리, IT, 로맨스만 가능하다. 
     테이블 명:TBL_MEMBER, TBL_BOOK

    2. 개념적 설계 단계

     |=============|=============|
                회원                               도서           
     |=============|=============|
          회원번호              도서번호  
          이름                     도서이름   
          나이                      카테고리
          핸드폰 번호          회원번호
          주소
      |=============|=============|

    3. 논리적 설계 단계

     |===============|===============|
                회원                                   도서           
     |===============|===============|
          회원번호(PK)           도서번호(PK)  
          이름                         도서이름   
          나이                         카테고리(CHECK)
          핸드폰 번호(UK)      회원번호(FK)
          주소
      |===============|===============|


    4. 물리적 설계 단계

     |=======================================================|
                                                             TBL_MEMBER
     |==================|==================|==================|
         MEMEBR_NUMBER      NUMBER                       PRIMARY KEY
         MEMBER_NAME           VARCHAR2(500)
         MEMBER_ AGE             NUMBER
         MEMBER_ PHONE        VARCHAR2(500)           UNIQUE
         USER_ADDRESS          VARCHAR2(500)

     |==================|==================|==================|


     |======================================================================|
                                                               TBL_BOOK
     |==================|==================|=================================|
         BOOK_NUMBER            NUMBER                       PRIMARY KEY
         BOOK_ NAME                VARCHAR2(500)
         BOOK_ CATEGORY       VARCHAR2(500)           CHECK('인문학', '추리', 'IT','로맨스')
         MEMBER_ NUMBER      VARCHAR2(500)           FOREIGN KEY

     |==================|==================|=================================|

 

01012341234

0101 이진수로 착각할수있다. -> VARCHAR2

 

book number 가 pk일경우

1번 책 홍길동
2번책 홍길동
3번책 김철수

 

MEMBER number 가 pk일경우

홍길동 1번책
2번책
김철수 3번책

 

 

-- TO_DATE('2000-01-01'): 소괄호 안에 문자열값을 날짜타입으로 변환시켜준다.

DATE타입 컬럼에 문자타입 값('YYYY-MM-DD')을 넣으면 자동으로 DATE 타입으로 변환된다. 

따지고 보면 TO_DATE()함수를 쓰는것이 맞지만 자동변환이 가능하므로 문자열처럼 값을 넣는다. 

 

자식테이블에 값 추가 시 부모 테이블에 있는 값을 넣어야한다. 

 

'DBMS > Oracle DBMS SQL' 카테고리의 다른 글

DBMS 산술 연산자  (0) 2024.02.23
DBMS 연결 연산자  (0) 2024.02.23
PK, FK, ERD  (0) 2024.02.21
DDL (Data Definition Langauge) : 데이터 정의어  (0) 2024.02.21
DML (Data Manipulation Langauge) : 데이터 조작어  (0) 2024.02.21