그림으로 배우는 데이터베이스 (4-1~4-13)

prana·2022년 12월 18일
0

database

목록 보기
26/38

✏️ 개프로 불공단 체험을 통해 학습한 기록을 작성하고 있습니다.

Chapter 4 데이터 관리

4-1 데이터타입

1. 데이터 타입 지정

  • 테이블을 만들 때 컬럼(열) 이름과 그 데이터 타입(Type)을 지정한다.

  • 테이블의 각 컬럼에는 반드시 데이터 타입을 정해 둘 필요가 있다.

  • 데이터 타입을 지정함으로써 해당 컬럼에 저장할 값의 포맷(Format)을 갖출 수 있고 값을 어떻게 취급할 것인지 결정해 둘 수 있다.

대체로 크게 분류해보자면,

  • 숫자를 다루는 형태
  • 문자열을 다루는 형태
  • 날짜, 시간을 다루는 형태

2. 데이터 타입의 역할

  • 예를 들어 금액을 저장하는 컬럼에 정수 타입을 지정한다면, 그 컬럼에는 반드시 정수 데이터밖에 저장할 수 없고 소수점 데이터나 문자 데이터를 저장할 수 없게 된다.

  • 정수 타입으로 지정해 둠으로써 저장되어 있는 값을 숫자로 조회할 수 있음

  • 타입에 따라 값을 취급하는 방법도 달라진다.

  • 저장할 수 있는 값이 제한되고 취득할 때 취급하는 방법이 달라지기 때문에, 컬럼에 따라 적절한 데이터 타입을 지정해 두는 것이 필요하다.


4-2 INT, DECIMAL, FLOAT, DOUBLE

1. 숫자를 취급하는 데이터타입

  • ex) 상품의 가격이나 개수, 레코드의 ID, 온도, 확률 등
    실수로 숫자 이외의 문자열 등의 값이 저장되는 일은 발생되지 않는다.
  • 레코드 조회 시 >, >=, <, <= 및 AVG, SUM 함수 등 계산 가능

2. 숫자를 취급하는 데이터 타입의 종류(MySQL)

  • 정수를 취급하는 타입과 소수를 취급하는 타입

1) 정수를 취급하는 타입

  • INT 등

2) 소수를 취급하는 타입

  • DECIMAL : 오차가 없는 정확한 소수를 저장할 수 있다.
  • FLOAT : 소수 7자리 정도까지 정확한 소수를 저장할 수 있다.
  • DOUBLE : 소수 15자리 정도까지 정확한 소수를 저장할 수 있다.
  • 각각 저장할 수 있는 숫자 값의 범위에 차이가 있다.

3) 그 외

  • BIT : '0'과 '1'만으로 값을 나타내는 비트 값을 저장

저장되는 값의 크기에 따라 적절한 데이터 타입을 선택하는 것이 좋다.


4-3 CHAR, VARCHAR, TEXT

  • 문자열을 취급하는 데이터 타입

1. 문자열을 취급하는 데이터 타입의 특징

  • ex) 사용자가 입력한 이름이나 주소, 설명(Comment)을 저장 및 큰 사이즈의 문장 저장
  • 숫자 타입에 저장한 123과 문자열 '123'과는 다르다.

2. 문자열을 취급하는 데이터 타입의 종류 (MySQL)

  • CHAR, VARCHAR, TEXT 등
  • 데이터의 저장 방법이나 최대 길이에 차이가 있다.

3. 고정 길이와 가변 길이

  • 고정길이 : 일정한 길이로 데이터를 준비할 수 있고,

'ABC'라는 값을 저장한다고 예시,

  • CHAR : 지정된 길이가 되도록 오른쪽이 스페이스로 채워지고 일정한 길이로 데이터가 저장된다.
  • VARCHAR : 그러한 것이 없다.

4-4 DATE, DATETIME

  • 날짜와 시간을 취급하는 데이터타입

1. 날짜와 시간을 취급하는 데이터타입의 특징

  • ex) 상품의 구입일자, 사용자의 로그인 일시, 생일, 스케줄 일시, 레코드의 입력일/갱신일 등

  • 000일 이전, 000월 000일 이후 등 검색 조건 지정 가능

  • order by 를 사용하여 날짜순으로 레코드 정렬 가능

2. 날짜와 시간을 취급하는 데이터 타입의 종류

  • 날짜만을 저장할 수 있는 것, 시간만을 저장할 수 있는 것, 날짜와 시간을 모두 저장할 수 있는 것
구분용도
DATE날짜
DATETIME날짜와 시간
TIME시간
YEAR년도

3. 날짜와 시간을 입력할 때 포맷(MySQL)

  • 2020년 1월 1일 저장하고 싶을 때,
    • '2020-01-01' / '20200101' / '2020/01/01' 등의 타입으로도 입력 가능.
    • 입력할 때의 시간 포맷은 다르지만, 모두 같은 값으로 입력된다.

4-5 BOOLEAN

  • 2종류의 값만을 취급하는 데이터 타입

1. 2종류의 값만을 취급하는 데이터 타입

  • BOOLEAN : 데이터 타입 중에는 2종류의 값밖에는 취급할 수 없는 것도 있다.

  • 참(TRUE)와 거짓(FALSE) 두 종류 뿐!

ex) 태스크 완료/미완료 , 이용중인 사용자/해약한 사용자, 미지불/지불 완료

2. 두 가지 값만을 취급하는 데이터 타입 종류

  • ex) PostgreSQL 같은 경우에는 사전에 boolean 타입이 준비되어 있는데, MySQL에서는 없다.

  • 그대신에 내부적으로는 TINYINT 타입을 사용해 BOOLEAN 타입과 같은 동작을 구현하고 있다.

3. BOOLEAN 타입 컬럼에 값을 저장한다.

  • 참(true)일 때는 1, 거짓(false)일 때는 0을 입력한다.

4-6 제약, 속성

  • 저장할 수 있는 데이터에 제한을 두다

1. 룰(Rule)에 일치하지 않는 데이터의 입력을 금지한다

  • 테이블의 컬럼에 제약을 걸어서 저장할 수 있는 데이터에 제한을 두거나,

  • 속성을 붙여 어떤 규칙으로 다듬어서 저장할 수 있다.

  • ex) NOT NULL, AUTO_INCREMENT 속성 등

  • 데이터 입력 및 변경 시 컬럼의 제약에 위배되는 경우, 오류가 나서 처리가 되지 않는다.
  • 적절한 제약을 걸어두면 불법적인 데이터가 입력되는 것을 막고, 데이터의 일관성이 깨지는 것을 대부분 막을 수 있다.

  • 속성을 붙여서 일정한 룰(Rule)에 의해 데이터를 갖추어 둠으로써 데이터를 관리하기 쉬워지는 장점도 있다.

⭐⭐ 2. 대표적인 제약이나 속성의 예

1) NOT NULL

  • NULL을 저장할 수 없는 제약이다.
  • 이 제약이 붙어있는 컬럼에는 반드시 어떤 값이라도 들어가 있어야 한다.

2) UNIQUE

  • 컬럼 값을 중복시키지 않는 제약이다.
  • 이 제약이 붙어있는 컬럼에는 다른 레코드의 값과 동일한 값은 저장할 수 없다.

3) DEFAULT

  • 컬럼 값에 기본값을 설정하는 제약
  • 이 제약이 붙어있는 컬럼에는 미리 지정한 기본(default)값이 저장된다.

4) AUTO_INCREMENT

  • 컬럼에 자동으로 순번을 넣는 속성이다.
  • 이 속성이 붙어있는 컬럼에는 자동으로 연속되는 숫자가 들어간다.

4-7 DEFAULT - 초깃값을 설정한다

1. 컬럼에 초깃값을 설정하는 DEFAULT

  • 컬럼에 초깃값을 설정할 수 있다.

ex) 상품 테이블의 재고 수 컬럼의 초깃값을 0으로 설정하는 경우,

  • 사용자가 가지고 있는 쇼핑 포인트 입력 시 0
  • 상품의 결제 상태를 미리 미지불 상태 0
  • 처음부터 결정되어 있는 상태(Status)가 있는 경우에는 미리 초깃값을 설정해두면 편리하다.

2. 디폴트 값 설정 방법

  • DEFAULT 를 컬럼 이름 뒤에 붙여 디폴트 값을 설정할 수 있다.

    CREATE TABLE 테이블명 (
    name(컬럼값) VARCHAR(100), age(컬럼값) INT DEFAULT 10
    );


4-8 NULL - 데이터가 아무것도 들어있지 않을 때

1. 데이터가 저장되어 있지 않은 상태를 나타내는 NULL

  • NULL(널) : 아무것도 없다

  • 원래 아무것도 들어 있지 않기 때문에 0 이나 ''(빈 문자열)과도 구별된다.
    숫자도, 문자도 아니다.

  • 또한 테이블의 컬럼에 초깃값이 설정되어 있지 않은 경우 초깃값은 NULL

  • NULL 함으로써 그 필드에는 아무것도 저장되어 있지 않다는 것을 명시적으로 나타낼 수 있다.

2. NULL의 동작

INSERT INTO 테이블명 age(컬럼명) VALUES ('홍길동');
-> 값을 지정하지 않은 age 필드는 null이 된다.

  • SELECT 문에 WEHERE age IS NULL과 같은 조건으로 조회하면 값이 null인 레코드의 검색이 가능하다.

4-9 NOT NULL

1. NULL을 저장하지 못하게 한다

  • 데이터가 비어있는 상태를 방지한다.

  • 컬럼에 NULL을 저장하지 못하도록 할 수 있다.

  • NOT NULL 제약이 걸린 컬럼은 반드시 어떤 값을 저장해야만 하는 컬럼으로 설정된다.

  • DBMS에 따라서는 NOT NULL 제약이 붙어있는 컬럼에 아무런 값을 지정하지 않은 경우, 초깃값으로 NULL 이외의 값이 저장으로 사양으로 되어있는 것도 있다.
    • 예를 들어 MySQL 에서는 숫자 타입 컬럼일 때는 0 이 초깃값으로 자동 저장된다.

2. NOT NULL 제약의 설정 방법

  • 컬럼명 뒤에 붙인다.

    CREATE TABLE 테이블명(
    name(컬럼명) VARCHAR(100),
    age INT NOT NULL);


4-10 UNIQUE

  • 다른 행 값과 동일한 값은 넣을 수 없다

1. 중복을 방지하는 UNIQUE

  • 컬럼에 다른 레코드와 중복된 값을 저장하지 않도록 할 수 있다.

  • 만약 UNIQUE 제약이 설정된 컬럼에 중복된 값을 저장하려 하면,
    에러가 발생하여 입력할 수 없다.

  • ex) 상품코드나 사용자id 같이,
    반드시 같은 값이 존재하지 않는 컬럼에 설정해두는 것

4-2. UNIQUE 제약 설정 방법

CREATE TABLE users(테이블명)(
id(컬럼명) INT UNIQUE,
name(컬럼명) VARCHAR(100)
);


4-11 AUTO_INCREMENT - 자동으로 일련 번호를 매기다

1. 자동적으로 번호를 배당한다

  • 컬럼에 자동적으로 연속된 번호를 저장할 수 있다.

    예를 들어,

    1. 처음 레코드를 입력할 때 AUTO_INCREMENT를 설정한 컬럼에는 자동으로 1이 저장된다.
    2. 새로운 레코드를 입력하면 2가 저장되어 레코드를 입력할 때마다 1,2,3,4, ... 처럼 연속된 번호가 자동적으로 저장된다.
  • 자동으로 각 레코드에 번호가 할당되므로 이런 것을 상품 또는 사용자를 식별하기 위한 번호로 취급하는데 도움이 된다.

2. AUTO_INCREMENT 설정 방법

CREATE TABLE users(테이블명) (
id(컬럼명) INT UNIQUE AUTO_INCREMENT,
name VARCHAR(100)
);


4-12 PRIMARY KEY, 프라이머리 키, 주 키

  • 행을 고유하게 식별할 수 있게 한다. (중복X, NOT NULL)

1. 레코드를 특정할 수 있게 한다.

  • PRIMARY KEY를 설정하면 다른 레코드와 중복되는 값이나 NULL을 저장할 수 없게 된다.

PRIMARY KEY를 설정한 컬럼의 값만 알게 되면,
한 개의 레코드를 알아낼 수 있기 때문에 각 레코드를 식별하기 위한 컬럼으로 설정하면 좋다.

  • PRIMARY KEY를 설정한 컬럼은 프라이머리 키, 주 키라고도 불린다.

2. PRIMARY KEY 설정 방법

CREATE TABLE users(
id INT PRIMARY KEY,
name VARCHAR(100)
);


4-13 FOREIGN KEY, 외부 키

  • 다른 테이블과 연결시키다

1. 테이블끼리 연결시키다

  • FOREIGN KEY(외부 키)를 설정하면 해당 컬럼에는 지정한 다른 테이블의 컬럼에 존재하는 값만 저장할 수 있게 된다.

다른 테이블의 값에 의존하는 컬럼을 만들어 테이블끼리 연결시킬 수 있다.

  • 이렇게 설계하면, 테이블 결합을 통해 데이터를 추출하는 명령어가 가능하게 된다.

2. FOREIGN KEY 설정 방법

CREATE TABLE users(
name VARCHAR(100),
department_id INT,
FOREIGN KEY (department_id)
REFERENCE departments(id)
);

  • 컬럼에 FOREIGN KEY를 설정하면 지정한 다른 테이블의 컬럼에 존재하는 값만 저장할 수 있다.
  • 다른 테이블의 컬럼과 연결시키고 싶은 컬럼으로 설정한다.

0개의 댓글

관련 채용 정보