MySQL, DB생성, data type, table설계

paikpaik·2023년 7월 14일
1

DB, SQL(MySQL)

목록 보기
3/9
post-thumbnail

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 스키마를 적절하게 정의하는 것이 중요하다.
출처 : 쉬운코드
profile
매일 앞으로 나아가는 개발자

0개의 댓글