Database, Data Modeling with project
ComputerScience/Database

Database, Data Modeling with project

데이터 모델링이란?

  • 효율적으로 데이터 베이스를 구축하기 위해, db의 뼈대를 세우는 작업

-> 테이블 구성하는데 어떤 속성이 필요할까?

-> 사업운영에 어떤 조건이 있을까?

-> 속성 명은 어떻게 설정해야할까?

-> 각 속성의 어떤 조건이 있을까?

-> 해당조건을 어떻게 제약해야할까?

-> 테이블은 몇개로 구성해야할까?

-> 각 속성의 타입은 어떻게 될까?

필요한 조건, 내용을 수집, 정리각 운영 방침을 참고하여, 연관성있는 내용들은 묶어서 정리해보자!

-> 각 정보들을 테이블로 표현, 생성

네이밍 규칙

  • 유지보수와 의미의 명확성을 전달하기 위해 네이밍 규칙 설정
  • 공통규칙
    • 줄임말 사용은 최소화(단, 범용적으로 사용되는 줄임말 사용)
  • 테이블 네이밍 규칙
    • 테이블 명, 파스칼 표기법 사용
      • kickboardRental(x) -> KickboardRental(o)
    • 테이블, 뷰(view)임을 한 눈에 확인할 수 있도록 테이블 명 앞에는 'tb_', 'v_'를 붙힌다.
      • tb_KickboardRental(킥보드 대여와 관련된 테이블)
      • v_KickboardInfoForAnalysis(데이터 분석을 위해 필요한 정보만 모아둔 가상테이블)
        • 속성 네이밍 규칙
    • 속성명을 작성할 때는 스네이크 표기법 활용
      • customerID(x)-> customer_id(o)
      • CustomerTel(x) -> customer_tel(o)
    • 유일키, 외래키 등은 한 눈에 알아볼 수 있도록 속성 명 앞에 'pk_', 'fk_'를 붙힌다.
      단, 중복으로 설정되어있는 경우 외래키> 유일키 순으로 작성한다.
      • pk_kickboard_id
      • fk_pk_customer_id

킥보드 대여테이블

만약 '엘리스토끼'가 E01모델을 한번 더 대여한다면?

유일키(Primary Key)중복 발생

-> Duplicate entry 'elice-rabbit' for key 'PRIMARY'

 

이런 문제를 해결하기 위해 나온 게 ↓↓↓↓↓

복합키(Composite Key)

  • 복합키 란?
    • 두 개 이상의 속성을 활용하여 튜플(레코드, 행)을 구분
  • 킥보드 데여 테이블

  • 누가 언제 빌려갔는지가 중요하기에 대여 일자를 추가하여 복합키 구성

-> 처음과 동일하게 고객 ID가 중복되지만, 또 다른 속성인 대여일자가 달라 서로 다른 행으로 처리

복합키 선언 방법

  • 유일키 선언과 비슷한 구조이며 괄호 안에 복합키로 사용할 속성들을 작성하면 된다.

CREATE TABLE 테이블명{
속성명 타입,
속성명2 타입,
...
PRIMARY KEY(복합키로 사용할 속성 명, 복합키로 사용할 속성 명)
}

 

 

 

 


  • 킥보드 대여 테이블

  • 10월 5일 도도새가 킥보드를 빌려간내용을 추가하던 중에 실수로 도도새의 id를 'dododo_bird'로 입력한다면?

아무런 오류 없이 데이터가 추가된다.

  • 오류없이 그냥 추가된다면, 실제 존재하지 않은 고객ID가 추가되어 추후 관리에 문제생김

 

 

이를 해결하기 위해 나온 것 ↓↓↓↓↓

왜래키(Foreign Key)

  • 왜래키란?
  • 다른 테이블의 키와 연결을 해주는 키, 참조의 무결성을 유지하게 해줌
  • 참조의 무결성 : 외래키 값이 참조중인 테이블의 값과 일관성을 가진다는 것
  • 킥보드 대여테이블

-> 고객의 id에 대해 따로 테이블 구성, 고객 테이블의 '고객ID' 속성을 참조하는 외래키 구성

-> 새로 추가하려는 행 중 외래키인 '고객ID'의 내용이 고객 테이블에 있지 않은 내용이므로 추가되지않음.

선언방법

  • 위치에 어떤 내용이 들어가는 지 주의
    CREATE TABLE 테이블명{
    속성명 타입,
    속성명2 타입,
    ...
    FOREIGN KEY(왜래키로 사용할 속성 명) REFERENCES 참조하는 속성이 있는 테이블 (참조할 속성 명)

}