<SQL 첫걸음> 8장 데이터베이스 설계

2025. 4. 9. 18:29·도서 공부(정리)/SQL첫걸음

📌 목차

  • 34강 데이터베이스 설계
    1. 데이터베이스 설계
    2. ER다이어그램
  • 35강 정규화
    1. 정규화
    2. 제1정규형
    3. 제2정규형
    4. 제3정규형
    5. 정규화의목적
  • 36강 트랜잭션
  1. 트랜잭션
  2. 롤백과 커밋
  3. 트랜잭션 사용법

 

 

KEYWORD : 데이터베이스 설계, ER다이어그램, 정규화, 트랜잭션

 

34강 데이터베이스 설계

데이터베이스를 설계한다 = 데이터베이스의 스키마 내에 테이블, 인덱스, 뷰 등의 데이터베이스 객체를 정의하는 것을 말한다.

(=스키마 설계라고도 불린다.)

 

- 논리명과 물리명

논리명: 테이블의 '설계상' 이름 .. 

물리명: CREATE TABLE에 지정하는 테이블이름이나 열 이름

(길이제한/공백문자 사용불가 등 제약 있음, 잘못정하면 바꾸기 힘들다.)

 

-자료형

테이블의 열에는 자료형 지정 필수(수치형, 문자열형 ..)

제약(CHECK)을 통해 정합성이 중요한 부분에는 적극적 사용 ... (예) 1,2,3 중에 하나 / yes or no 중에 하나

비고란을 통해 부여한 의미에 대한 설명을 적어놓는 경우도 많다.

MySQL의 경우, comment 키워드 이용 => 주석을 열 단위로 기입해 둘 수 있다.

 

-고정길이와 가변길이

상품코드 ... 고정 길이 문자열로 지정

비고란 ... 가변 길이 문자열로 지정

데이터베이스의 열에 저장할 수 있는 크기는 의외로 작다. VARCHAR의 경우, 최대 수천바이트 까지밖에 안됨.

큰 파일을 해당 열에 저장시 쉽게 용량 넘김. SO

 

LOB 형 사용(Large Object)

큰 데이터를 다루는 자료형 , 그러나 인덱스를 지정할 수 없다는 제약이 있다.

 

-기본키

기본키로 지정할 열이 생각나지 않는 경우, 자동증가 열 사용 (INSERT할 경우 자동으로 번호를 증가시켜 저장해주는 편리한 열)

MySQL : AUTO_INCREMENT를 지정 <= PRIMARY KEY 혹은 UNIQUE를 통해 유일성 지정해야한다.

 

테이블 정의서 중요하다!

 

2. ER다이어그램ER = (Entity Relationship), 즉 개체 간의 관계를 표현함.Entity(개체)는 테이블, 뷰를 말한다. 사각형으로 표기한다. 

 

개체와 개체가 서로 연계되는 경우, 선으로 이어서 표현한다.

카디널리티=다중도

연계에서, 서로 몇 개의 데이터 행과 연관되는지 

=> 몇 대 몇의 관계를 가지는지 숫자나 기호로 나타낸다. 기본적인 세가지 (일대일, 일대다, 다대다)

외부참조제약(외부키제약)으로 지정되는 경우가 있다. 이를 설정하면 데이터의 정합성이 엄격히 관리되어 번거로워진다는이유로 이를 채용하지 않는 시스템도 있다.

 

ER다이어그램의 역할 = 설계상 이렇게 연관되어있다

 

35강 정규화

: 테이블을 올바른 형태로 변경하고 분할하는 것, 데이터의 중복을 줄이고, 이상(anomaly)을 방지하기 위해 데이터를 구조화 하는 과정

주로 테이블을 분리하고, 관계를 명확히 설정함. (데이터 중복 방지, 삽입/삭제/갱신 이상 방지/ 데이터 무결성유지

중복/반복 부분을 찾아내 테이블을 분할하고 기본키를 작성해 사용하는 것. (하나의 데이터는 한 것에 있어야 한다.)

하단의 제거 = 테이블을 분할한다 라는 의미

 

1. 제1 정규형(1NF)

모든 필드가 원자값(Atomic Value)이어야 함. 

하나의 셀에 하나의 값만 저장할 수 있도록 하고, 반복되는 부분을 세로(행)방향으로 늘려나가는 것

:: 테이블 분할과 기본키 지정이 이루어진다.

 

2. 제2정규형(2NF)

제1정규형을 만족하면서, 부분함수 종속 제거: 기본키의 일부분에만 의존하는 속성이 있으면 안됨. 보통 복합키에서 발생

(기본키 두개 이상)

부분 함수종속성 : 키 값을 이용해 데이터를 특정지을 수 있는 것

 

3. 제3정규형(3NF)

제2정규형을 만족하면서, 이행적 종속 제거 (기본키가 아닌 다른 속성을 통해 또 다른 속성을 알 수 있는 경우를 제거)

즉, 중복정보인 경우 제거함

📌 핵심 요약

정규형주요 내용
1NF 모든 컬럼이 원자값
2NF 부분 함수 종속 제거
3NF 이행적 종속 제거

분할할 때에는 서로 결합할 수 있도록 기본키를 추가해 분할한다. 너무 지나치게 정규화하면 JOIN이 복잡해질 가능성 있으므로 주의.

 

5. 정규화의 목적

정규화로 데이터 구조를 개선하는 것은 하나의 데이터가 한 곳에 저장되도록 하기 위함이다.

(데이터 변동 시, 한 번만 변경하도록)

 

36강 트랜잭션

syntax

START TRANSACTION
COMMIT
ROLLBACK

 

1. 트랜잭션 기능은 INSERT, UPDATE명령으로 데이터를 추가, 갱신할 때도 트랜잭션 기능을 사용한다. (자동커밋 기능이 있어서 의식할 필요가 없었다.)

 

2. 롤백과 커밋

트랜잭션을 통해 데이터 추가 시, 롤백해서 종료 가능하다. 

롤백 : 트랜잭션 내에서 행해진 모든 변경 사항을 없었던 것으로 할 수 있다.

아무런 에러 발생하지 않는다면 변경사항 적용 후 트랜잭션 종료 , 이때 커밋(commit)사용

 

-자동커밋

트랜잭션을 사용할 때에는 자동커밋을 꺼야한다. mysql클라이언트에서 명령 실행 시, 자동커밋 on 상태.

 

시작 명령어 : START TRANSACTION

종료 명령어 1) COMMIT 2) ROLLBACK

임시 데이터 영역에 저장했다가, 이를 정식데이터 영역으로 변경할지 or 아예 버려버릴지 결정하는 것.

START TRANSACTION;
INSERT INTO 주문 VALUES(4,'2014-03-01',1);
INSERT INTO 주문상품 VALUES(4,'0003',1);
INSERT INTO 주문상품  VALUES(4,'0004',2);
COMMIT;

트랜잭션을 시작해서 SQL 명령 실행하고 COMMIT/ROLLBACK 명령으로 트랜잭션 종료하는 처리방법을 '트랜잭션을 걸어서 실행한다'라고 한다.

 

3. 트랜잭션 사용법

 

트랜잭션 내에서 실행하는 복수의 SQL명령은 세트로 취급된다. 세트 단위로 유효/무효가 된다.

 

SQL server, PostgreSQL 의 경우 트랜잭션 시작 명령어는 BEGIN TRANSACTION이다.(MySQL도 가능하다) 

Oracle, DB2는 트랜잭션 시작 명령어 없음.

 

자동커밋 = 클라이언트 툴의 기능

 

 

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

와미친 드디어 백엔드 1차스터디가끝낫어요 호호 ㅠㅠ 고생햇다 시은아

'도서 공부(정리) > SQL첫걸음' 카테고리의 다른 글

<SQL첫걸음> 7장 복수의 테이블다루기  (0) 2025.04.08
[SQL 첫걸음] 6장 데이터베이스 객체 작성과 삭제  (0) 2025.04.06
[SQL 첫걸음] 5장 집계와 서브 쿼리  (0) 2025.03.31
[SQL첫걸음] 4장 데이터의 추가, 삭제, 갱신  (0) 2025.03.30
[SQL첫걸음 ] 3장 정렬과 연산  (0) 2025.03.30
'도서 공부(정리)/SQL첫걸음' 카테고리의 다른 글
  • <SQL첫걸음> 7장 복수의 테이블다루기
  • [SQL 첫걸음] 6장 데이터베이스 객체 작성과 삭제
  • [SQL 첫걸음] 5장 집계와 서브 쿼리
  • [SQL첫걸음] 4장 데이터의 추가, 삭제, 갱신
sihyes
sihyes
24학번 컴퓨터공학과
  • sihyes
    시혜적으로개발
    sihyes
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 단순 설정 (10)
      • 백엔드 공부(BE, AWS) (8)
        • 로그인&회원가입 (3)
        • 파일업로드&GPT (2)
      • 컴퓨터공학과 (51)
        • 운영체제 (0)
        • Artificial Intelligence (0)
        • Java 1 & 2 (23)
        • 컴퓨터네트워크 (3)
        • 모앱JavaScript (0)
        • Data structures (9)
        • 소프트웨어공학 (5)
        • 오픈SW플랫폼 제출용 (5)
        • Python - 문해프 (1)
      • 개인 프로젝트 (2)
        • 알바솔로몬 (1)
        • PLACO 프로젝트 (0)
      • 도서 공부(정리) (20)
        • 알고리즘 코딩 테스트 자바 편 (1)
        • SQL첫걸음 (8)
        • 코딩 자율학습 스프링 부트 3 자바 백엔드 개발 .. (6)
        • Do it! 지옥에서 온 문서 관리자 깃&깃허브 .. (5)
      • 개인공부정리페이지 (12)
        • 백준 & 프로그래머스 (3)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ㅇ
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
sihyes
<SQL 첫걸음> 8장 데이터베이스 설계
상단으로

티스토리툴바