CLOB(Character Large Object)와 TEXT의 차이를 설명해드리겠습니다:
-- TEXT
장점:
- MySQL에 최적화
- 간단한 사용
- 인덱싱 가능 (일부)
단점:
- 최대 크기 제한 (65,535 bytes)
- DB 이식성 낮음
-- CLOB
장점:
- 대용량 텍스트 저장 (최대 4GB)
- DB 표준 타입
- 이식성 높음
단점:
- 처리 속도 상대적 느림
- 복잡한 처리 로직
CREATE TABLE posts (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL, -- TEXT 추천
...
);
추천 이유:
1. 일반적인 게시글은 TEXT 크기로 충분
2. MySQL에서 더 나은 성능
3. 간단한 구현
4. 검색 기능 구현 용이
결론:
NUMBER와 INT의 차이를 설명하고 추천 타입을 알려드리겠습니다:
-- NUMBER
특징:
- Oracle DB의 타입
- 정수/소수 모두 저장 가능
- 정밀도 지정 가능
- 더 많은 저장공간 사용
-- INT
특징:
- MySQL의 기본 정수 타입
- 정수만 저장
- 4바이트 고정
- -21억 ~ +21억 범위
CREATE TABLE posts (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
view_count INT DEFAULT 0, -- INT 추천
like_count INT DEFAULT 0, -- INT 추천
dislike_count INT DEFAULT 0, -- INT 추천
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
추천 이유:
1. 정수값만 필요
2. 21억건 이하 예상
3. MySQL 최적화
4. 단순한 연산
CREATE TABLE posts (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
view_count BIGINT DEFAULT 0, -- 대규모용
like_count BIGINT DEFAULT 0, -- 대규모용
dislike_count BIGINT DEFAULT 0, -- 대규모용
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
결론:
식별/비식별 관계와 ERD의 관계 표현을 설명해드리겠습니다:
-- 식별관계: 부모테이블의 PK가 자식테이블의 PK이면서 FK
CREATE TABLE comments (
post_id BIGINT, -- PK + FK
comment_id BIGINT, -- PK
content TEXT,
PRIMARY KEY (post_id, comment_id) -- 복합키
);
-- 비식별관계: 부모테이블의 PK가 자식테이블의 FK로만 사용
CREATE TABLE comments (
id BIGINT PRIMARY KEY, -- PK
post_id BIGINT, -- FK만
content TEXT
);
1. 유저-게시글 (1:N, 비식별)
Users ----<- Posts
- 한 유저가 여러 게시글 작성 가능
- 게시글은 독립적인 PK 가짐
2. 게시글-댓글 (1:N, 비식별)
Posts ----<- Comments
- 한 게시글에 여러 댓글 가능
- 댓글은 독립적인 PK 가짐
3. 작품-태그 (N:M, 비식별)
Works >----<- Tags
- 한 작품이 여러 태그 가능
- 한 태그가 여러 작품에 사용 가능
- 중간 테이블 필요
1. 1:N 관계 (유저-게시글)
-- Users 테이블 (1)
CREATE TABLE users (
id BIGINT PRIMARY KEY,
nickname VARCHAR(50)
);
-- Posts 테이블 (N)
CREATE TABLE posts (
id BIGINT PRIMARY KEY,
user_id BIGINT, -- FK
title VARCHAR(200),
FOREIGN KEY (user_id) REFERENCES users(id)
);
2. N:M 관계 (작품-태그)
-- Works 테이블
CREATE TABLE works (
id BIGINT PRIMARY KEY,
title VARCHAR(200)
);
-- Tags 테이블
CREATE TABLE tags (
id BIGINT PRIMARY KEY,
name VARCHAR(50)
);
-- 중간 테이블
CREATE TABLE work_tags (
work_id BIGINT,
tag_id BIGINT,
PRIMARY KEY (work_id, tag_id),
FOREIGN KEY (work_id) REFERENCES works(id),
FOREIGN KEY (tag_id) REFERENCES tags(id)
);
3. 1:1 관계 (유저-프로필)
-- Users 테이블
CREATE TABLE users (
id BIGINT PRIMARY KEY,
email VARCHAR(100)
);
-- Profiles 테이블
CREATE TABLE profiles (
user_id BIGINT PRIMARY KEY, -- PK이자 FK
bio TEXT,
profile_image VARCHAR(255),
FOREIGN KEY (user_id) REFERENCES users(id)
);
1:1 관계
- 실선 연결
- 양쪽 모두 1
1:N 관계
- 실선 연결
- 한쪽은 1, 다른쪽은 까마귀발(N)
N:M 관계
- 실선 연결
- 양쪽 모두 까마귀발(N)
- 중간 테이블 필요
이러한 관계를 고려하여 ERD를 설계하면:
1. 데이터 무결성 보장
2. 효율적인 데이터 관리
3. 명확한 관계 표현
4. 유지보수 용이성
을 확보할 수 있습니다! 👍
이 ERD에서의 관계들을 자세히 설명해드리겠습니다:
-- 다대다 관계는 중간 테이블 필요
CREATE TABLE webtoon_tags (
webtoon_id INT, -- FK
tag_id INT, -- FK
PRIMARY KEY (webtoon_id, tag_id), -- 복합키
FOREIGN KEY (webtoon_id) REFERENCES webtoons(id),
FOREIGN KEY (tag_id) REFERENCES tags(id)
);
관계 특징:
- 하나의 웹툰이 여러 태그 가능
- 하나의 태그가 여러 웹툰에 사용 가능
- 비식별관계 (각자 독립적인 PK 가짐)
Webtoons >------< Tags
^
|
|
Posts
표기법:
> : 1개 (one)
< : 여러개 (many)
--- : 비식별관계
=== : 식별관계
-- Webtoons (부모 테이블)
CREATE TABLE webtoons (
id INT PRIMARY KEY, -- 독립 PK
title VARCHAR(200) NOT NULL,
author VARCHAR(100) NOT NULL
);
-- Tags (부모 테이블)
CREATE TABLE tags (
id INT PRIMARY KEY, -- 독립 PK
name VARCHAR(50) UNIQUE
);
-- Webtoon_Tags (자식 테이블, N:M 중간 테이블)
CREATE TABLE webtoon_tags (
webtoon_id INT,
tag_id INT,
PRIMARY KEY (webtoon_id, tag_id), -- 복합키
FOREIGN KEY (webtoon_id) REFERENCES webtoons(id),
FOREIGN KEY (tag_id) REFERENCES tags(id)
);
-- Posts (자식 테이블, 1:N 관계)
CREATE TABLE posts (
id INT PRIMARY KEY, -- 독립 PK
webtoon_id INT, -- FK (비식별)
title VARCHAR(200),
content TEXT,
FOREIGN KEY (webtoon_id) REFERENCES webtoons(id)
);
1. Webtoons - Tags (N:M, 비식별)
- 중간 테이블로 관계 구현
- 각각 독립적인 PK
- 유연한 태그 관리 가능
2. Webtoons - Posts (1:N, 비식별)
- 하나의 웹툰에 여러 게시글
- Posts는 독립적인 PK
- webtoon_id는 FK로만 사용
3. 전체 구조
- 모두 비식별관계 사용
- 독립적인 PK 체계
- 유연한 확장 가능
이러한 구조의 장점:
1. 데이터 독립성 보장
2. 유연한 관계 변경 가능
3. 쉬운 유지보수
4. 명확한 관계 표현
이 구조로 설계하면 효율적인 데이터 관리가 가능합니다! 👍