MySQL 컨벤션(Convention)은 코드의 일관성과 가독성을 높이기 위해 주로 사용하는 규칙입니다.
최신으로 많이 사용하는 MySQL 컨벤션을 몇 가지 카테고리로 나누어 설명하겠습니다. (24년 기준)
1. 테이블 및 컬럼 이름
• 소문자 사용: 테이블과 컬럼 이름은 소문자로 작성합니다.
• 스네이크 케이스: 단어 사이를 밑줄(_)로 구분합니다.
• 예: user_accounts, order_details
• 단수형 사용: 테이블 이름은 단수형으로 합니다.
• 예: user, order
• 명확한 이름: 테이블 및 컬럼 이름은 가능한 한 명확하고 직관적으로 작성합니다.
• 예: created_at, updated_at
2. 데이터 타입
• 정확한 타입 선택: 데이터 타입은 저장하려는 데이터에 가장 적합한 것을 선택합니다.
• 예: INT 대신 TINYINT를 사용할 수 있으면 사용하고, 날짜는 DATETIME이나 TIMESTAMP로 저장합니다.
• VARCHAR 길이: VARCHAR 타입의 길이는 실제 필요한 만큼만 지정합니다.
• 예: 이메일 주소를 저장할 때 VARCHAR(255) 대신 VARCHAR(100)로 충분합니다.
3. 인덱스 및 키
• 기본 키 (Primary Key): 모든 테이블에 기본 키를 지정합니다.
• 예: id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
• 외래 키 (Foreign Key): 관계형 데이터베이스의 무결성을 위해 외래 키를 사용합니다.
• 예: FOREIGN KEY (user_id) REFERENCES users(id)
• 인덱스 (Index): 자주 조회되는 컬럼에 적절한 인덱스를 설정합니다.
• 예: INDEX (created_at)
4. SQL 문법
• 키워드 대문자: SQL 키워드는 대문자로 작성합니다.
• 예: SELECT, INSERT, UPDATE, DELETE
• 들여쓰기: 복잡한 쿼리의 경우 읽기 쉽게 들여쓰기를 사용합니다.
• 예:
SELECT
user_id,
user_name
FROM
users
WHERE
status = 'active'
ORDER BY
created_at DESC;
• 문장 끝 세미콜론: 모든 SQL 문은 세미콜론으로 끝냅니다.
• 예: SELECT * FROM users;
5. 주석
• 단일 행 주석: 단일 행 주석은 --를 사용합니다.
• 예: -- This is a comment
• 다중 행 주석: 다중 행 주석은 /* */를 사용합니다.
• 예:
/*
This is a multi-line comment
It can span multiple lines
*/
6. 트랜잭션
• 트랜잭션 사용: 중요한 데이터 변경 작업은 트랜잭션을 사용하여 일관성을 유지합니다.
• 예:
START TRANSACTION;
-- Your SQL operations
COMMIT;
예시
아래는 위의 컨벤션을 CRUD로 (Create, Read, Update, Delete) 적용한 예제입니다.
1. 테이블 구조
먼저 예제로 사용할 user와 order 테이블을 정의합니다.
CREATE TABLE user (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE `order` (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED NOT NULL,
order_date DATETIME NOT NULL,
total DECIMAL(10, 2) NOT NULL,
status VARCHAR(20) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id)
);
2. Create (생성)
새 사용자 추가
INSERT INTO user (first_name, last_name, email)
VALUES ('John', 'Doe', 'john.doe@example.com');
새 주문 추가
INSERT INTO `order` (user_id, order_date, total, status)
VALUES (1, '2024-06-28 12:34:56', 99.99, 'pending');
3. Read (조회)
모든 사용자 조회
SELECT
id,
first_name,
last_name,
email,
created_at
FROM
user
ORDER BY
created_at DESC;
특정 사용자의 주문 조회
SELECT
o.id,
o.order_date,
o.total,
o.status,
u.first_name,
u.last_name
FROM
`order` o
JOIN
user u ON o.user_id = u.id
WHERE
o.user_id = 1
ORDER BY
o.order_date DESC;
4. Update (수정)
사용자의 이메일 업데이트
UPDATE user
SET email = 'john.new@example.com'
WHERE id = 1;
주문 상태 업데이트
UPDATE `order`
SET status = 'completed'
WHERE id = 1;
5. Delete (삭제)
사용자 삭제
DELETE FROM user
WHERE id = 1;
주문 삭제
DELETE FROM `order`
WHERE id = 1;
추가 예시
사용자의 성과 이름을 업데이트하고, 업데이트된 행 수를 반환
UPDATE user
SET first_name = 'Jane', last_name = 'Doe'
WHERE id = 1;
상태가 ‘pending’인 모든 주문 조회
SELECT
id,
user_id,
order_date,
total,
status
FROM
`order`
WHERE
status = 'pending';
특정 이메일을 가진 사용자를 삭제
DELETE FROM user
WHERE email = 'john.new@example.com';
이 예시들은 일관된 네이밍 규칙, 키워드 대문자 사용, 적절한 들여쓰기 및 명확한 주석을 포함한 MySQL 컨벤션을 따릅니다.
이러한 컨벤션을 따르면 코드의 가독성과 유지보수성이 높아집니다. 또한, 팀 내에서 일관된 스타일을 유지할 수 있습니다.
'Database > MySQL, MariaDB' 카테고리의 다른 글
[MySQL] 데이터타입 datetime, timestamp 차이 (0) | 2024.06.28 |
---|---|
[MySQL, MariaDB] MySQL과 MariaDB의 차이, 공통점 (0) | 2024.06.28 |