SQL 이것저것

[SQL] 데이터베이스 준비하기

agingcurve 2022. 9. 16. 11:06
반응형

데이터베이스란?

데이터베이스란 공유하여 사용할 목적으로 체계화하여 관리하는 데이터의 집합

 

관계형 데이터베이스 (RDB)

 - 각 테이블 간 관계 O

 - 스키마 O

 - 구조적으로 안정적이나 유연하지 못함

 

비관계형 데이터베이스 (NoSQL)

 - 각 테이블 간 관계 X

 - 스키마 X

 - 유연성을 가지고 있으나 구조 결정이 어려움

 

→ 상황과 조건에 맞춰 적절한 데이터베이스를 선택하는 것이 중요

 

 

데이터모델링이란?

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

 

요구 사항 정리

데이터가 어떠한 형태, 어떤 목적을 가지고 있는지 정리

 

개념적 데이터 모델 설계

핵심 개체를 찾고, 각 개체 간의 관계를 정리

 

논리적 데이터 모델 설계

실제 데이터베이스로 구현하기 위한 모델링 ( 관계형 DB에 넣기 위해 정의하는 단계)

 

데이터베이스 네이밍 규칙

유지보수와 의미의 명확성을 전달하기 위해 네이밍 규칙을 설정

(이미지라 하였을 때, img를 i만 쓸지 img_2로 할지 등 다른 컬럼이나 테이블등과 헷갈리지 않는지 고려해야 한다)

 

공통 규칙

1. 줄임말 사용은 최소화한다. (단, 사용할 경우 범용적으로 사용되는 줄임말을 사용한다.)

 • kb_image (X) → kickboard_image (O) -> kb라고 했을때 명확한 단어가 떠오르지 안흥ㅁ

 • tb_KickboardInfo (△) (Info: Information의 줄임말)

 

테이블 네이밍 규칙

1. 테이블 명을 작성할 때는 파스칼 표기법을 사용한다

 • kickboard_rental (X) → KickboardRental (O)

 • customer_info (X) → CustomerInfo (O)

 

2. 테이블, 뷰(View)임을 한 눈에 확인 할 수 있도록 테이블 명 앞에는 ‘tb_’, ‘v_’ 를 붙인다.

 • tb_KickboardRental (킥보드 대여와 관련된 테이블)

 • v_KickboardInfoForAnalysis (데이터 분석을 위해 필요한 정보만 모아 둔 가상 테이블)

 

속성 네이밍 규칙

1. 속성 명을 작성할 때는 스네이크 표기법을 활용한다

 • customerID (X) → customer_id (O)

 • CustomerTel (X) → customer_tel (O

 

2. 유일키, 외래키 등은 한 눈에 알아 볼 수 있도록 속성 명 앞에 ‘pk_’, ‘fk_’를 붙인다

(단, 중복으로 설정되어 있는 경우 외래키 > 유일키 순으로 작성한다.)

 • pk_kickboard_id

 • fk_pk_customer_id

 

운영방침(예시: 대여)

 • varchar 는 문자형 타입을 의미하며 뒤에 괄호 안에 의미는 해당 문자열의 크기(byte)를 의미 (영문자 기준 1글자 당 1byte 를 사용)

 

운영방침(예시: 제품)

 • int는 정수형 타입을 의미하며 varchar 와 달리 괄호로 크기를 작성해주지 않음

 

운영방침(예시: 고객)

* varchar에서 한글의 경우 한 글자 당 2byte가 필요하므로 varchar(20)으로 설정

 

유일키

 - 키 (Key)

데이터베이스에서 튜플(레코드, 행) 간 구분을 위한 값(속성)

→ 유일키, 복합키, 외래키 등 다양한 종류가 존재

 

테이블에서 튜플(레코드, 행)을 구분지어주는 고유 식별 값(속성)

유일키 값은 중복 될 수 없으며, NULL 값 또한 불가능

 

유일키(Primary Key) 선정하기

필요한 정보들을 담고 있는 코더랜드 킥보드 대여 테이블

유일키(Primary Key) 선언

CREATE TABLE '테이블 명'{
'속성명' 타입,
'속성명2' 타입,
… PRIMARY KEY ('유일키로 사용할 속성 명')
}

 

복합키

 - 만약 show123 고객이 10월 4일에 한번더 대여를 하게된다면 유일키 문제가 발생하게 된다.

# 중복 오류
Duplicate entry 'show123' for key 'PRIMARY'

 

두 개 이상의 속성을 활용하여 튜플(레코드, 행)을 구분지어주는 방법

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

 

복합키(Composite Key) 선언하기

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

 

외래키란?

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

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

→ 실제 존재하지 않은 데이터가 추가되어 추후 관리에 문제 발생

외래키(Foreign Key

다른 테이블의 키와 연결을 해주는 키이며 , 참조의 무결성을 유지하기 위해 활용

* 참조의 무결성: 외래키 값이 참조 중인 테이블의 값과 일관성을 가지는 것을 의미

→ 고객의 ID에 대해 따로 테이블을 구성, 고객 테이블의 ‘고객ID’ 속성을 참조하는 외래키 구성

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

 

외래키(Foreign Key) 선언하기

CREATE TABLE '테이블 명'{
'속성명' 타입,
'속성명2' 타입,
FOREIGN KEY ('외래키로 사용할 속성 명') REFERENCES '참조하는 속성이 있는 테이블' ('참조할 속성 명')
}

'SQL 이것저것' 카테고리의 다른 글

[SQL] View  (0) 2022.09.20
[SQL] 정규화  (1) 2022.09.20
[SQL] 그룹 함수  (0) 2022.09.16
[SQL] 윈도우 함수  (0) 2022.09.14
[SQL] View(뷰)  (0) 2022.09.10