Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

코리아 IT 아카데미 국비과정

DBMS 😺

DB(Database)
데이터가 모여 있는 곳
추상적인 개념
# formal한 자리에서는 DBMS라고 호칭해야함
DBMS(Database Management System)
데이터베이스를 실질적, 구체적으로 관리할 수 있는 프로그램 및 시스템
구체적인 개념

DBMS의 종류 Oracle, MySQL, MS-SQL, MongoDB, MariaDB, ...

# 표가 있다 = 스키마가 있다, JSON에서는 표형태가 아니기 떄문에 스키마가 없다고 함
# 스키마가 없다면 No-SQL이라고 함
DBMS의 소통 방식
-----------------------------------------------------
      			사용자
-----------------------------------------------------
   ↕        		↕ 		↕
고객 관리 응용프로그램      ↕   주문 관리 응용프로그램
   ↕			↕    		↕
-----------------------------------------------------
      			DBMS
-----------------------------------------------------
RDBMS(관계형 데이터베이스 시스템)
테이블끼리 서로 관계를 맺는다.

# PK(Primary Key), FK(Forigner Key) - 외래키, UK(Unique Key) - 중복 방지
# 하나의 행은 하나의 정보, 하나의 열은 하나의 집단


Table A(Student, User,    People, Member)      Table B(Order)

번호(PK)   이름    나이    아이디(UK)      주문번호(PK)   번호(FK)   날짜      상품수량
1   임수현   20   lsh9999         20230706001   2   2023-07-06   15
2   임웅빈   19   lub7897         20230706002   2   2023-07-06   30
3   백지호   18   bjh7744         20230705001   4   2023-07-05   152
4   이서호   19   lsh1234         20230705002   4   2023-07-05   156
5   조현상   15   chs7878         20230705003   4   2023-07-05   1

이러한 구조를 가지는 것을 Table, Class라고 부른다.

COLUMN(열, 속성, 필드)
   공통된 값들의 주제

ROW(행, 레코드, 튜플)
   하나의 정보

PRIMARY KEY(PK)
   고유한 값.
   각 행의 구분점으로 사용된다.
   중복이 없고 NULL값을 허용하지 않는다.
   *NULL : 아직 어떤 값을 넣을 지 모르겠다는 의미로 넣는 값.

FOREIGN KEY(FK)
   다른 테이블의 PK를 의미한다.
   보통 테이블끼리 관계를 맺을 때 사용한다.
   중복이 가능하고 NULL도 허용한다.

UNIQUE KEY(UK)
   NULL은 허용하지만 중복을 허용하지 않는다.

SQL(Structured Query Language): 쿼리문
DBMS와 소통하기 위해 사용하는 언어
스크립트 언어
MySQL
웹 사이트와 다양한 애플리케이션에서 사용되는 DBMS이다.
오라클은 관리 비용이 고가이지만 MySQL은 저가형 데이터베이스이다.
문법이 간결하고 쉬우며, 메모리 사용량이 현저히 낮아서 부담없이 사용 가능하다.

MySQL 기초문법

- 데이터베이스 생성
create database [데이터베이스 이름];

- 사용할 데이터베이스 선택
use [데이터베이스 이름];

- CRUD 작성

SQL 종류 - DDL, DML, DCL, TCL
자료형
   - 정수
      tinyint
      smallint
      mediumint
      int
      bigint

   - 실수
      decimal(m, d) : m자리 정수, d자리 소수점으로 표현

   - 날짜
      date : 1000-01-01 ~ 9999-12-31(3byte)
      time : -838:59:59 ~ 838:59:59(3byte)
      datetime : 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59(8byte)

   - 문자
      char(m) : 고정 길이 문자열(0~255)
      varchar(m) : 가변 길이 문자열(0~65535)


- DDL(Data Definition Language) : 데이터 정의어
   테이블 조작, 제어 관련 쿼리문

   1. create : 테이블 생성
      create table [테이블명]( [컬럼명] [자료형]([용량]) [제약조건], ... );

   2. drop : 테이블 삭제
      drop table [테이블명]

   3. alter : 테이블 수정
      - 테이블명 수정
         alter table [테이블명] rename [새로운 테이블명]
      - 컬럼 맨 뒤에 추가
         alter table [테이블명] add [컬럼명] [자료형] [제약조건];
      - 컬럼 맨 앞에 추가
         alter table [테이블명] add [컬럼명] [자료형] [제약조건] first;
      - 컬럼 지정 위치에 추가
         alter table [테이블명] add [컬럼명] [자료형] [제약조건] after [기존 컬럼명];
      - 컬럼 삭제
         alter table [테이블명] drop [컬럼명];
      - 컬럼명 변경
         alter table [테이블명] change [기존컬럼명] [변경할 컬럼명] [컬럼타입];
      - 컬럼 타입 변경
         alter table [테이블명] modify [컬럼명] [변경할 컬럼타입];
      - 제약 조건 확인
         desc [데이터베이스명].[테이블명];
      - 제약 조건 추가
         alter table [테이블명] add constraint [제약조건 이름];
      - 제약 조건 삭제
         alter table [테이블명] drop constraint [제약조건 이름];
   

   4. truncate : 테이블 내용 전체 삭제
      truncate table [테이블명]

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

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

   정확성 : 데이터는 애매하지 않아야 한다.
   일관성 : 각 사용자가 일관된 데이터를 볼 수 있도록 해야한다.
   유효성 : 데이터가 실제 존재하는 데이터여야 한다.

1. 개체 무결성
   모든 테이블이 PK로 선택된 컬럼을 가져야 한다.

2. 참조 무결성
   두 테이블의 데이터가 항상 일관된 값을 가지도록 유지하는 것.

3. 도메인 무결성
   컬럼의 타입, NULL값의 허용 등에 대한 사항을 정의하고
   올바른 데이터가 입력되었는 지를 확인하는 것.

모델링(기획)

추상적인 주제를 DB에 맞게 설계하는 것

1. 요구사항 분석
   회원, 주문, 상품: 3가지를 관리하고자 한다.

2. 개념적 설계(개념 모델링)
   회원   주문   상품
   --------------------
   번호   번호   번호
   --------------------
   아이디   주문날짜   상품명
   비밀번호   번호   가격
   주소   번호   재고량
   이메일
   생일

3. 논리적 설계(논리 모델링)
   회원      주문      상품
   ----------------------------------------
   번호(PK)      번호(PK)      번호(PK)
   ----------------------------------------
   아이디(UK)   주문날짜      상품명
   비밀번호      번호(FK)      가격
   주소      번호(FK)      재고량
   이메일(UK)
   생일   

4. 물리적 설계(물리 모델링)
   tbl_member
   -------------------------
   id: bigint(pk)      
   -------------------------
   member_id(uk): varchar   
   member_password: varchar   
   member_address: varchar   
   member_email(uk): varchar
   member_birth: date

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

   tbl_product
   -------------------------
   id: bigint(pk)
   -------------------------
   product_name: varchar
   product_price: int
   product_stock: int

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

   tbl_order
   -------------------------
   id: bigint(pk)
   -------------------------
   order_date: datetime
   member_id: bigint(fk)
   product_id: bigint(fk)

5. 구현

DML(Data Manipulation Language): 데이터 조작어

1. select : 조회(검색)
select [컬럼명1], [컬럼명2], ...]
                                                                                                                                                                                            
from [테이블명]
where [조건식]

2. insert : 추가
1) 컬럼을 생략할 수 있다, 이 때 default 제약조건이 발동된다.
isnert into [테이블명]
([컬럼명1], [컬럼명2], ...)
values([값1], [값2], ...)

2)모든 값을 전부 작성해되며, 컬럼명은 직접 작성하지 않는다.
insert into [테이블명]
values([값1], [값2], ...)

3. update : 수정
update [테이블명]
set [기존 컬럼명1] = [새로운 값1], [기존 컬럼명2] = [새로운 값2], ....
where [조건식]

4. delete : 삭제
delete from [테이블명]
where [조건식]

정규화

삽입/수정/삭제의 이상현상을 제거하기 위한 작업
데이터의 중복을 최소화 하는 데에 목적이 있다.
5차 정규화까지 있으나 3차 정규화까지만 진행한다.
1차 정규화
같은 성격과 내용의 컬럼이 연속적으로 나타날 경우

상품명
바지1, 바지2, 바지3

상품명1    상품명2    상품명3
바지1      바지2      바지3

* 조회가 너무 힘들다

1차 정규화 진행

상품명
바지1
바지2
바지3
2차 정규화
조합키(복합키)로 구성되었을 경우 조합키의 일부분에만 종속되는 속성이 있을 경우

FLOWER
이름        색상	꽃말 	과
해바라기    노란색       행운     국화
장미        빨간색      사랑      장미

* 이름에만 과가 종속됨

2차 정규화 진행

FLOWER
이름	    과
해바라기  국화
장미	    장미

FLOWER_LANGUAGE
이름        색상	꽃말
해바라기    노란색       행운
장미        빨간색      사랑

FLOWER의 PK를 이름으로 설정하고
FLOWER_LANGUAGE의 이름을 FK로 설정한다.
FLOWER_LANGUAGE에서 이름과 생상을 조합키로 설정한다.
3차 정규화
PK가 아닌 컬럼이 다른 컬럼을 결정하는 경우

회원번호	이름	시	구	동	우편번호
1              한동석	  남양주    화도읍  구암리     12345
2              홍길동	  서울	  관악	봉천	55555

* 우편번호로 시, 구, 동을 알 수 있다.
* 중복된 데이터가 생길 가능성이 있다.

회원번호	이름	우편번호
1              한동석     12345
2              홍길동     55555

우편번호	시	구	동
12345          남양주    화도읍	구암리
55555          서울      관악    봉천
데이터베이스에서 정규화가 필요한 이유
데이터베이스를 잘못 설계하면 불필요한 데이터 중복으로 인해 공간이 낭비된다.
이런 현상을 이상(Anomaly)현상이라고 한다.

회원번호와 프로젝트코드 두 컬럼의 조합키로 설정되어 있는 테이블이고
한 사람은 하나의 부서만 가질 수 있다.

회원번호      이름   부서   프로젝트코드   급여   부서별 명수
22080101   한동석   개발팀   ABC0001      3000   4
22080101   한동석   개발팀   DEF1112      2000   4
22080101   한동석   개발팀   CBA9474      4000   4
22080104   홍길동   기획팀   EFG0881      5000   2
22081106   이순신   디자인팀 GHI9991      6000   3
이상 현상의 종류
- 삽입 이상
새로운 데이터를 삽입하기 위해 불필요한 데이터도 삽입해야하는 문제
  
담당 프로젝트가 정해지지 않은 사원이 있다면,
프로젝트 코드에 NULL을 작성할 수 없으므로 이 사원은 테이블에 추가될 수 없다.
따라서 '미정'이라는 프로젝트 코드를 따로 만들어서 삽입해야 한다.

- 갱신 이상
중복 행 중에서 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제

한 명의 사원은 반드시 하나의 부서에만 속할 수 있다.
만약 "한동석"이 보안팀으로 부서를 옮길 시 3개 모두 갱신해주지 않는다면
개발팀인지 보안팀인지 알 수 없다.

- 삭제 이상
행을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 문제
"이순신"이 담당한 프로젝트를 박살내서 드랍된다면, "이순신" 행을 모두 삭제하게 된다.
따라서 프로젝트에서 드랍되면 회사에도 드랍된다.

2차 정규화 진행

회원번호      이름   부서   부서별 명수
22080101   한동석   개발팀   4
22080104   홍길동   기획팀   2
22081106   이순신   디자인팀 3

회원번호      프로젝트코드   급여
22080101      ABC0001      3000
22080101      DEF1112      2000
22080101      CBA9474      4000
22080104      EFG0881      5000
22081106      GHI9991      6000

3차 정규화

회원번호      이름    부서
22080101     한동석  개발팀
22080104     홍길동  기획팀
22081106     이순신  디자인팀

부서   부서별 명수
개발팀     4
기획팀     2
디자인팀   3

JOIN

여러 테이블에 흩어져 있는 정보 중
사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들고
결과를 보여주는 것.
정규화를 통해 조회 테이블이 너무 많이 쪼개져 있으면
작업이 불편하기 때문에 조회의 성능을 향상시키기 위해서 JOIN을 통해 합친 후 사용한다.
- 내부 조인(inner join)
조건이 일치하는 값만 합쳐서 조회

from
테이블명A inner join 테이블명B
on 조건식
inner join 테이블명C
on 조건식
inner join 테이블명D
on 조건식
inner join 테이블명E
on 조건식
...

1. 등가 조인
	on절에 등호가 있을 때, 서로 관계를 맺고 있는 테이블끼리 JOIN 시 자주 사용된다.
2. 비등가 조인
	on절에 등호가 없을 때

※ 선행 테이블에 One, 후행 테이블에 Many가 오도록 하는 것이 성능상 좋다.
- 외부 조인(outer join)
on절에 작성된 조건식이 false일 지라도 모든 정보를 조회해야 할 때 사용한다.

- left outer join
	선행 테이블의 모든 정보를 가져오고 싶을 때 사용한다.
- right outer join
	후행 테이블의 모든 정보를 가져오고 싶을 때 사용한다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages