Skip to content

davidhyun/Database-SQL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Database

Database

"일정한 체계 속에 저장된 데이터의 집합"

  • 하나의 컴퓨터에서도 여러 개의 데이터베이스를 생성할 수 있고, 하나의 데이터베이스 안에서 여러 개의 테이블을 만들 수도 있다.

  • 테이블에서 하나의 개체를 나타내는 것은 row,

    **개체의 각 속성(attribute)**을 나타내는 것은 column이다.

    테이블의 레코드(record), 을 **필드(field)**라고도 한다.

  • MySQL을 비롯한 DBMS들이 'Server-Client' 구조로 동작한다.

    서버의 역할을 하는 하나의 프로그램이 실행되고 있고, 사용자는 클라이언트 역할을 하는 프로그램으로 해당 서버에 접속하고, 그 서버에 SQL로 명령을 내리는 구조인 것


DBMS

  • 은행, 거래소 등과 같이 데이터 처리의 정확성, 운영의 안정성 등이 엄격하게 요구되는 분야에서는 Oracle이 주로 사용되고 있고, 우리가 흔히 쓰는 앱, 웹 사이트 같은 서비스를 만들 때는 MySQL을 쓰는 경우가 많다. MySQL은 무료로 사용할 수 있고 좀 더 가볍다는 장점이 있다.

  • MySQL은 여러 DBMS 중에서도 특히 일반 사용자가 사용하기 편하다는 평가를 받는다. 그리고 간단히 사용해볼 때 요구하는 컴퓨터 성능도 작은편이라 부담도 덜하다.


Server-Client

  1. server(서버 프로그램)
    • client로부터 SQL문 등을 전달받아 데이터베이스 관련 작업을 직접 처리하는 프로그램
    • MySQL에서 서버 프로그램 이름은 'mysqld', 이 프로그램이 실행되고 있을 때 사용자가 클라이언트 프로그램을 사용해서 접속하면 된다.
  2. client(클라이언트 프로그램)
    • 사용자가 server에 접속해서 원하는 데이터베이스 관련 작업을 할 수 있도록, SQL을 입력할 수 이는 화면 등을 제공하는 프로그램
    • MySQL의 클라이언트 프로그램 이름은 **'mysql'**이다. mysql은 보통 CLI(Command Line Interface) 환경에서 사용하기도 하는데 일반 사용자 입장에서는 불편하긴하지만 성능이 빠르다는 장점도 있다. MySQL Workbench는 사용자들이 이용하기 편하도록 GUI(Graphic User Interface)환경에서 작업할 수 있도록 하는 프로그램이다.

image


sys database

image

  • client 프로그램으로 처음 server에 접속하면 생성하지 않았던 "sys" 데이터베이스가 기본으로 생성되어있는 것을 볼 수 있다. sys database는 MySQL server의 성능 관련 정보들을 갖고있는 데이터베이스이다.
  • DBMS를 사용하는 사람에 따라 사용용도가 크게 달라진다.
    • (1) 기획자/마케터 : 데이터베이스에 저장된 데이터를 잘 분석해서 시장 및 고객을 분석
    • (2) 백엔드 개발자/데이터베이스 관리자 : 데이터가 빠르고 안정적으로, 조회 및 저장될 수 있도록 개발 및 관리
    • 특히 (2) 백엔드 개발자/데이터베이스 관리자의 입장에서는 DBMS가 성능 저하 없이 효율적으로 작업을 처리하고 있는지 체크하는 것이 매우 중요하다. MySQL에서 이런 정보를 확인할 수 있는 기본 데이터베이스 중 하나가 sys database인 것이다.

Structured Query Language

  • SQL은 관계형 데이터베이스 관리시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수목적의 프로그래밍 언어이다.
  • RDBMS에서 데이터의 조회와 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정관리를 위해 고안되었다.

SQL 문법의 종류

DDL(Data Definition Language, 데이터 정의 언어)

릴레이션을 정의하기 위해 사용하는 언어

CREATE, ALTER, DROP, ...


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

데이터를 추가/수정/삭제하기 위한, 즉 데이터 관리를 위한 언어

SELECT, INSERT, UPDATE, DELETE,...


DCL(Data Control Language, 데이터 제어 언어)

사용자 관리 및 사용자별로 릴레이션 또는 데이터를 관리하고 접근하는 권한을 다루기 위한 언어

GRANT, REVOKE, ...


SQL 언어의 특성

  1. SQL은 대소문자를 가리지 않는다.

    (단, 서버 환경이나 DBMS 종류에 따라 데이터베이스 또는 필드명에 대해 대소문자를 구분하기도 한다)

  2. SQL 명령은 반드시 세미콜론(;)으로 끝나야 한다.

  3. 고유의 값은 따옴표('')로 감싸준다.

  4. SQL에서 객체를 나타낼 때는 백틱(``)으로 감싸준다.

  5. 주석은 일종의 도움말로, 주석 처리된 문장은 프로그램에서 동작하지 않는다.

    한줄 주석은 문장 앞에 -- 를 붙여서 사용한다.

    여러줄 주석은 /* */로 감싸준다.


스키마(Schema)

데이터베이스에 관한 모든 설계사항

  • '스키마는 만드셨나요?'

  • '이번에 앱이 업데이트되면 스키마에 큰 변화가 있을 것 같습니다.'

  • '스키마가 우리 비즈니스 상황에 최적화되지 않은 것 같군요'

어떤 데이터베이스를 새롭게 구축할 때는 가장 처음에 '스키마'를 짜야한다. 이 스키마를 짜는 것을 '데이터베이스 모델링' 또는 '데이터베이스 디자인'이라고 한다.

그런데 각 DBMS마다 스키마(Schema)를 다르게 정의하여 사용하고 있다. MySQL에서는 스키마 = 데이터베이스, Oracle에서는 스키마는 하나의 사용자가 만든 각종 객체(테이블, 뷰 등)의 집합을 의미한다.


개념적 스키마(Conceptual Schema)

하나의 조직, 하나의 기관, 하나의 서비스 등에서 필요로 하는 데이터베이스 설계사항을 의미한다. 보통 스키마라고 하면 이 개념적 스키마를 의미한다.

물리적 스키마(Physical Schema)

물리적 스키마는 데이터를 실제로 컴퓨터의 저장장치에 어떤 방식으로 저장할 것인지를 결정하는 스키마이다. 만약 member라는 테이블이 있고 그 안에 id, name, age 등의 컬럼이 있을 때 각 컬럼의 값들을 어떤 방식으로 저장할지에 관한 설계사항이다. 그래서 물리적 스키마는 저장 스키마(Storage Schema), **내부 스키마(Internal Schema)**라고도 한다.

물리적 스키마는 일반 개발자나, 사용자가 다룰 일이 없다. MySQL, Oracle과 같은 DBMS를 만드는 개발자들이 다루는 개념이다. 그리고 똑같은 개념적 스키마더라도 DBMS에 따라 물리적 스키마는 전혀 달라질 수 있다. 같은 데이터라도 컴퓨터에 실제로 어떻게 저장할지는 DBMS에 따라 다르기 때문이다.


실무에서 데이터베이스 현황 분석

기존 직원 분들의 설명을 듣고, 문서화된 자료를 읽는 것이 가장 좋다. 그리고 그것과 동시에 데이터베이스 현황을 간단하게 파악할 수 있는 SQL 문을 알고 직접 적용해보는 것이 좋다.

  1. 어떤 데이터베이스들이 있는지

    SHOW DATABASES;
  2. 각 데이터베이스 안에 어떤 테이블들이 있는지

    -- 하나의 데이터베이스 안의 테이블들(뷰도 포함) 파악
    SHOW FULL TABLES IN copang_main;
  3. 각 테이블의 컬럼 구조는 어떻게 되는지

    -- 한 테이블의 컬럼 구조 파악
    DESCRIBE item;
  4. 테이블들 간의 Foreign Key 관계는 어떤지

    • 두 테이블의 각 컬럼 간에 Foreign Key 관계가 논리적으로 성립한다고 해도, 실제 DBMS 상에서는 관리자가 그것을 Foreign Key로 설정하지 않는 경우도 많다. 관리자의 실수일 수도 있고, 데이터베이스의 성능을 고려해서 의도적으로 외래키 설정을 안했을 수도 있다.
    -- 모든 데이터베이스에서 모든 테이블간의 Foreign Key(외래키) 파악
    SELECT
    	i.TABLE_SCHEMA, i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME,
    	k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME
    FROM information_schema.TABLE_CONSTRAINTS AS i
    LEFT JOIN information_schema.KEY_COLUMN_USAGE AS k
    ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME
    WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY';

About

Database and SQL

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published