Step-by-Step

[5] 기획 - SQL문 작성 본문

프로젝트/Dreamers (Blog)

[5] 기획 - SQL문 작성

희주(KHJ) 2023. 2. 14. 22:27

📜이전📜

[4] 기획 - 플로우 차트 (Flow Chart)

 

 

MySQL

https://www.mysql.com/

 

MySQL

Over 2000 ISVs, OEMs, and VARs rely on MySQL as their products' embedded database to make their applications, hardware and appliances more competitive, bring them to market faster, and lower their cost of goods sold. Learn More »

www.mysql.com

가장 친숙한 RDBMS인 MySQL을 사용했으며, 

터미널에서 HomeBrew 설치 > mysql 설치 순으로 진행하였다. ※ 참조

 

 

Database 네이밍 룰 (Naming Rule)

참조 : https://sabarada.tistory.com/49

위 링크를 참조해서 내가 구성한 몇가지 규칙들 ↓

- 테이블 명, 컬럼 명 모두 소문자로 통일

- 단어 사이에 언더바(_) 사용

- PK는 대부분 컬럼 명이 {   }_id 형식으로 구성

- 컬럼 명을 최대한 {테이블 명} 넣어서 구성

- 컬럼 명에 {타입 명} 최대한 배제 

 

 

 

SQL문 작성

CREATE TABLE user (
user_id VARCHAR(10) PRIMARY KEY,
user_pw VARCHAR(255) NOT NULL,
user_name VARCHAR(30) NOT NULL
);

CREATE TABLE post (
post_id INT PRIMARY KEY AUTO_INCREMENT,
user_id VARCHAR(10) NOT NULL,
post_ident INT NOT NULL,
FOREIGN KEY(user_id) REFERENCES user(user_id) ON DELETE CASCADE
);

CREATE TABLE origin_post (
post_id INT PRIMARY KEY,
post_title VARCHAR(50) NOT NULL,
post_content VARCHAR(1000) NOT NULL,
post_date DATETIME NOT NULL,
FOREIGN KEY(post_id) REFERENCES post(post_id) ON DELETE CASCADE
);

CREATE TABLE drawing_post (
post_id INT PRIMARY KEY,
post_content VARCHAR(1000) NOT NULL,
post_template INT NOT NULL,
post_date DATETIME NOT NULL,
FOREIGN KEY(post_id) REFERENCES post(post_id) ON DELETE CASCADE
);

CREATE TABLE level (
level_id INT PRIMARY KEY,
post_cnt INT NOT NULL
);

CREATE TABLE hashtag (
post_id INT,
tag_name VARCHAR(20),
PRIMARY KEY(post_id, tag_name),
FOREIGN KEY(post_id) REFERENCES post(post_id) ON DELETE CASCADE
);

CREATE TABLE tag_ranking (
tag_name VARCHAR(20) PRIMARY KEY,
tag_cnt INT NOT NULL
);

CREATE TABLE user_details (
user_id VARCHAR(20) PRIMARY KEY,
user_email VARCHAR(50) NOT NULL
);

CREATE TABLE grant_level (
user_id VARCHAR(20) PRIMARY KEY,
user_level INT NOT NULL ,
FOREIGN KEY(user_id) REFERENCES user(user_id) ON DELETE CASCADE
);

ALTER TABLE grant_level ADD FOREIGN KEY(user_level) REFERENCES level(level_id) ON DELETE CASCADE;

- FOREIGN KEY를 이중으로 사용하려고 했는데, 에러가 나서 따로 ALTER문을 이용하여 추가하였음

- ON DELETE CASCADE 사용해서 참조되는 필드가 값이 사라질 경우 해당 ROW를 삭제하도록 하였음

- SMALLDATETIME을 이용하고 싶었으나, MySQL에서는 지원하지 않아서 DATETIME으로 사용

- 테이블 명으로는 예약어(grant) 사용이 불가능해서 (grant_level으로) 수정함

 

설정 완료!

 

 

 

 

Comments