DEV Community

soom
soom

Posted on • Edited on

Introducing popular SQL Queries & SQL Naming Convention

Abstract

웹 프로젝트 킥오프 때 가장 많이 고민하고 시간을 소요하는 것이 서비스에 적합하면서 확장성을 가지고 있는 DB Structure Design 이다.

한번 Production 환경에 올라가면 수정하기 거의 불가능에 가까운 것이 DB이기 때문에 프로젝트 첫 페이즈일때 실제 데이터 수정이 빈번하게 일어나게 된다.

이때 자주 사용하게 되는 기본 Query 들을 이번 포스팅에서 소개하고자 한다.
사실 부족한 내 기억력을 대비하고자 작성한 나만을 위한 포스팅이다.


Queries

Database

데이터베이스 생성 및 제거

/* create */
CREATE DATABASE database_name;

/* remove */
DROP DATABASE database_name;
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

테이블 전체 데이터 조회

SELECT * FROM table_name;
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

관계 생성 및 제거

/* 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;
Enter fullscreen mode Exit fullscreen mode

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 keybook_id 관계 대상은 book(id)
    • Join Table의 경우
    • ball_has_type 테이블의 경우 ball 테이블 foreign keyball_id, ball_type 테이블의 foreign keytype_id
  • Boolean 값은 is_로 시작


Conclusion

서문에서 언급한대로 이번글은 부족한 기억력을 보완하고자 쓴 포스팅이기 때문에 따로 언급할만한 내용은 없다.
앞으로 계속 추가 예정...

Top comments (0)