MySQL, DB생성, data type, table설계
SQL 기본 개념
SQL 뜻
- Structured Query Language
- 현업에서 쓰이는 relational DBMS의 표준 언어
- 종합적인 database 언어 : DDL + DML + VDL
SQL 주요 용어
SQL에서 relation이란?
- multiset(= bag) of tuples @ SQL
- 중복된 tuple을 허용한다.
SQL & RDBMS
- SQL은 RDBMS의 표준 언어지만, 실제 구현에 강제가 없기 때문에 RDBMS마다 제공하는 SQL의 스펙이 조금씩 다르다.
- 즉, MySQL과 PostgreSQL, Oracle 등의 문법이 다를 수 있다는 의미.
예제를 통해 SQL로 DB 정의하기
IT 회사 관련 RDB 만들기
- 부서, 사원, 프로젝트 관련 정보들을 저장할 수 있는 관계형 데이터베이스를 만들자.
- 사용할 RDBMS는 MySQL (InnoDB)
database 정의하기
mysql의 기본 명령어
- SHOW DATABASES; (어떤 database가 있는지 보여줌)
- CREATE DATABASE company[database 이름]; (database 생성)
- SELECT database(); (현재 활성화, 사용하려고 지정한 database가 뭔지 알고 싶을때)
- USE company[database 이름]; (database 활성화, 사용하려고 지정할 때)
- DROP DATABASE company[database 이름]; (database 비활성화, 사용해제 할 때)
DATABASE vs SCHEMA
- MySQL에서는 DATABASE와 SCHEMA가 같은 뜻을 의미
- CREATE DATABASE company = CREATE SCHEMA company
- 다른 RDBMS에서는 의미가 다르게 쓰임
- i.g. PostgreSQL에서는 SCHEMA가 DATABASE의 namespace를 의미
table 정의하기
IT 회사 RDB 만들기
- 부서, 사원, 프로젝트 관련 정보들을 저장할 수 있는 관계형 데이터베이스!
DEPARTMENT
- create table DEPARTMENT(); (table 생성 명령어)
attribute data type : 숫자
attribute data type : 문자열
attribute data type : 날짜와 시간
attribute data type : 그 외
Key constraints : PRIMARY KEY
- primary key : table의 tuple을 식별하기 위해 사용, 하나 이상의 attribute(s)로 구성
- primary key는 중복된 값을 가질 수 없으며, NULL도 값으로 가질 수 없다. 아래 이미지는 제약을 위반한 primary key에 해당한다.
- primary key를 선언하는 방법은 아래와 같다.
Key constraints : UNIQUE
- UNIQUE로 지정된 attribute(s)는 중복된 값을 가질 수 없다.
- 단, NULL은 중복을 허용할 수도 있다. (RDBMS 마다 다름)
- UNIQUE를 선언하는 방법은 아래와 같다.
NOT NULL constraint
- attribute가 NOT NULL로 지정되면 해당 attribute는 NULL을 값으로 가질 수 없다.
- NOT NULL을 선언하는 방법은 아래와 같다.
- 일반적으로 NOT NULL과 UNIQUE를 같이 사용한다.
EMPLOYEE
- create table EMPLOYEE();
attribute DEFAULT
- attribute의 default 값을 정의할 때 사용.
- 새로운 tuple을 저장할 때 해당 attribute에 대한 값이 없다면 default 값으로 저장.
- DEFAULT를 선언하는 방법은 아래와 같다.
CHECK constraint
- attribute의 값을 제한하고 싶을 때 사용.
- CHECK를 선언하는 방법은 아래와 같다.
Referential integrity constraint : FOREIGN KEY
- attribute(s)가 다른 table의 primary key나 unique key를 참조할 때 사용.
- FOREIGN KEY를 선언하는 방법은 아래와 같다.
constraint 이름 명시하기
- 이름을 붙이면 어떤 constraint를 위반했는지 쉽게 파악할 수 있다.
- constraint를 삭제하고 싶을 때 해당 이름으로 삭제 가능.
PROJECT
- create table PROJECT();
WORKS_ON
- create table WORKS_ON();
DEPARTMENT table 수정
- 처음에 DEPARTMENT를 생성할 때는 F.K를 지정할 수가 없었는데 이제 F.K를 지정할 table들이 만들어졌기 때문에 수정하려고 함.
- ALTER TABLE [변경하려는 table 이름][변경하려는 내용];
ALTER TABLE
- table의 schema를 변경하고 싶을 때 사용
- 이미 서비스 중인 table의 schema를 변경하는 것이라면 변경 작업 때문에 서비스의 백엔드에 영향이 없을지 검토한 후에 변경하는 것이 중요
DROP TABLE
- table을 삭제할 때 사용
- DROP TABLE table_name;
database 구조를 정의할 때 중요한 점
- 만들려는 서비스의 스펙과 데이터 일관성, 편의성, 확장성, 등등을 종합적으로 고려하여 DB 스키마를 적절하게 정의하는 것이 중요하다.
출처 : 쉬운코드