[Daily Contents] 알아두면 쓸모있는 데이터베이스 객체(기능편1)


Relational DBMS

  • MySQL - MySQL.
  • Oracle - 가장 점유율이 높고 가장 비싸다. 기업에서 사용.
  • MariaDB - MySQL이 Oracle에 인수되면서 그에 반발하며 나온 DB. MySQL과 흡사.
  • PostgreSQL - 오픈소스. Oracle과 유사.
  • MS SQL Server - 유료이나 무료로도 어느 정도의 기능 활용 가능. 윈도우에서만 사용 가능. 건설 업계, 공장 등에서 많이 사용.

0. 실습 시나리오

현재 상태 : MySQL 기본 설치. root 사용자로 외부에서 접근 가능.
회원 정보는 한글 사용자, 영문 사용자로 나눠서 관리.
회원정보 변경 시 LOG 테이블에 변경 내역 저장
회원정보 조회 시 회원이 작성한 글 수를 항상 함께 보여줘야 함.
작성한 글 조회 시 항상 작성자 아이디, 이름 함께 보여줘야 함.

0. Schema? Database?

인스턴스 -> 데이터베이스 -> 스키마 -> 테이블
  • 인스턴스 : DBMS가 동작할 때의 단위. OS 입장에서는 ‘프로세스’
  • Database : 물리적으로 구분된 데이터베이스(스키마의 집합)
    • 다른 Database에 접근할 수 없음.
  • Schema : 데이터베이스의 구조와 제약 조건을 정의한 것.
    • 접근 제한 등 권한 관리가 가능.
MySQL (스키마와 데이터베이스를 함께 사용.)
인스턴스 -> 스키마 -> 테이블
ex)
- CREATE SCHEMA SSAFY DEFAULT CHARACTER SET utf8;
- CREATE DATABASE SSAFY DEFAULT CHARACTER SET utf8;
두 쿼리문은 같다.
Oracle (한 인스턴스 안에 데이터베이스 하나만을 생성 가능.)
인스턴스 -> 데이터베이스 -> 스키마 -> 테이블

1. Table

  • 데이터를 담고 있는 객체
  • 행(Row)과 열(Column)로 구성된 2차원 행태(표)의 객체
  • DBMS의 모든 데이터는 테이블로 관리

2. Contraint

  • 제약조건
  • 데이터의 무결성을 지키기 위해 제한된 조건
  • NOT NULL, NUIQUE, PRIMARY KEY, FOREIGN KEY, DEFAULT 등

3. Sequence

  • 시퀀스는 자동 순번을 반환하는 데이터베이스 객체
  • MYSQL에서는 지원하지 않음.(Oracle, Postgresql, MS-SQL 등에서 지원)
  • SEQ_USER.nextval, SEQ_USER.currval, SEQ_USER.setval 등으로 사용
CREATE SEQUENCE [스키마명.]시퀀스명
INCREMENT BY 증감숫자
START WITH 시작숫자
NOMINVALUE | MINVALUE 최소값
NOMAXVALUE | MAXVALUE 최대값
NOCYCLE | CYCLE
NOCACHE | CACHE

4. Function

  • Return 값 필수
  • Return 값은 하나(MySQL은 하나만 반환. MSSQL, Oracle은 테이블-2차원 배열을 반환할 수도 있음.)
CREATE FUNCTION '함수명' (
파라미터
) RETURNS 반환할 데이터타입
BEGIN
  수행할 쿼리
  RETURN 반환할 값
ENC
DELIMITER : Function을 감싼다. DELIMITER로 시작해서 DELIMITER로 끝나는 구간까지가 Function.
sha2 : DB에서도 암호화 가능.
* 비밀번호를 암호화하는 이유 : 알아볼 수 없게 하기 위해.

View

  • 하나 이상의 테이블로부터 쿼리한 데이터의 집합
  • 접근이 허용된 자료를 제한적으로 보여주기 위해 사용
  • 사용자 편의 : 자주 사용하는 복잡한 SELECT Query문을 미리 제작(재사용)
  • 기존 테이블 구조를 건드리지 않고 필요에 맞는 모습으로 데이터 제공
CREATE VIEW `뷰이름` AS
  SELECT Query문;

Q&A

Q. 서버에서 프로시저 호출 시, 프로시저에서 반환값은 마지막으로 Select한 결과인가.
A. 반환값이 여러 개일 수 있음. 다음 주에 자세한 설명 예정.
Q. SQL이 실제로 동작하는 시간이 전체 서비스에서 큰 영항을 미치는가.
A. function으로 만들 경우와 BE 서버가 처리할 경우와 비교해 네트웨크 트래픽 차이가 생김. 리소스 낭비.
Q. 테이블을 어떤 쿼리가 점유 중이면 다른 쿼리 요청이 못 들어갈 수 있다고 하는데 그런 문제는 안 생기는지.
A. 락이 걸리기 때문에 당연히 다른 요청은 못 들어감. 하지만 주의는 필요. 단, Select는 락이 걸리지 않음.
Q. 뷰 기능을 실제 개발 상황에서 언제 사용하는지.
A. 보안상 사용하기도 하며, 사용자 편의를 위해서도 사용.

댓글남기기