Abstract
웹 프로젝트 킥오프 때 가장 많이 고민하고 시간을 소요하는 것이 서비스에 적합하면서 확장성을 가지고 있는 DB Structure Design 이다.
한번 Production 환경에 올라가면 수정하기 거의 불가능에 가까운 것이 DB이기 때문에 프로젝트 첫 페이즈일때 실제 데이터 수정이 빈번하게 일어나게 된다.
이때 자주 사용하게 되는 기본 Query 들을 이번 포스팅에서 소개하고자 한다.
사실 부족한 내 기억력을 대비하고자 작성한 나만을 위한 포스팅이다.
Queries
Database
데이터베이스 생성 및 제거
/* create */
CREATE DATABASE database_name;
/* remove */
DROP DATABASE database_name;
Table
테이블 생성 및 제거
/* create */
CREATE TABLE table_name (
  /* primary key */
  id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Primary Key',
  /* nullable or not nullable */
  key_name_1 VARCHAR(100) NOT NULL,
  key_name_2 VARCHAR(100) NOT NULL,
  key_name_3 TEXT DEFAULT NULL,
  /* for managing CRUD history */
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Create Time',
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Update Time',
  deleted_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Delete Time'
) COMMENT 'Table Description';
/* remove */
DROP TABLE table_name;
/* rename */
ALTER TABLE table_name RENAME new_table_name;
테이블 전체 데이터 조회
SELECT * FROM table_name;
Data
데이터 생성 및 수정
/* create */
INSERT INTO table_name (key_name_1, key_name_1, key_name_1)
VALUES
  ('value_1', 'value_2', 'value_3'),
  ('value_1', 'value_2', 'value_3'),
  ('value_1', 'value_2', 'value_3');
/* change */
ALTER TABLE table_name
CHANGE table_name new_table_name;
관계 생성 및 제거
/* create foreign key */
ALTER TABLE table_name
ADD FOREIGN KEY (table_1_id) REFERENCES table_1(id);
/* remove foreign key */
ALTER TABLE table_name
DROP FOREIGN KEY table_ibfk_1;
Naming Convention
Table
테이블 이름은
Singular테이블 이름은
Lowercase- 
Join Table (Relationship Table)이름은 테이블 관계에 따라_has_,_and_사용- 
todo테이블 하위 개념인task테이블일 경우Join Table이름은todo_has_task - 
keyboard테이블과 동등 개념인mouse테이블일 경우Join Table이름은keyboard_and_mouse - 
ball테이블과ball_type테이블일 경우ball_has_type 
 - 
 - 
테이블에는 무조건 히스토리를 관리
- 
created_at,updated_at,deleted_at 
 - 
 
Data
- 키 이름은 
snake case - 
foreign key의 경우 관계되는 테이블의 이름을 참조- 
book테이블에 연결할foreign key는book_id관계 대상은book(id) - 
Join Table의 경우 - 
ball_has_type테이블의 경우ball테이블foreign key는ball_id,ball_type테이블의foreign key는type_id 
 - 
 Boolean값은is_로 시작
Conclusion
서문에서 언급한대로 이번글은 부족한 기억력을 보완하고자 쓴 포스팅이기 때문에 따로 언급할만한 내용은 없다.
앞으로 계속 추가 예정...
    
Top comments (0)