Today I Learned
오늘은 저번 erd 설계 정리한거에 이어서 실제로 인스타를 클론코딩한다고 가정하고 erd를 작성해봤다.
ERD 설계
엔티티 구조
Users (사용자)
- user_id (PK): BIGINT AUTO_INCREMENT
- email: VARCHAR(100) UNIQUE NOT NULL
- username: VARCHAR(50) UNIQUE NOT NULL
- password: VARCHAR(255) NOT NULL
- profile_picture: VARCHAR(255)
Posts (게시물)
- post_id (PK): BIGINT AUTO_INCREMENT
- user_id (FK): BIGINT
- image_url: VARCHAR(255) NOT NULL
- content: TEXT
- created_at: DATETIME DEFAULT CURRENT_TIMESTAMP
Comments (댓글)
- comment_id (PK): BIGINT AUTO_INCREMENT
- post_id (FK): BIGINT
- user_id (FK): BIGINT
- content: TEXT
- created_at: DATETIME DEFAULT CURRENT_TIMESTAMP
Likes (좋아요)
- like_id (PK): BIGINT AUTO_INCREMENT
- post_id (FK): BIGINT
- user_id (FK): BIGINT
- created_at: DATETIME DEFAULT CURRENT_TIMESTAMP
Tags (태그)
- tag_id (PK): BIGINT AUTO_INCREMENT
- name: VARCHAR(50) UNIQUE NOT NULL
Post_Tags (게시물-태그 관계)
- post_id (FK): BIGINT
- tag_id (FK): BIGINT
Follows (팔로우)
- follow_id (PK): BIGINT AUTO_INCREMENT
- follower_id (FK): BIGINT
- following_id (FK): BIGINT
- created_at: DATETIME DEFAULT CURRENT_TIMESTAMP
관계 정의
엔티티 1 | 관계 | 엔티티 2 | 설명 |
---|
Users | 1:N | Posts | 한 사용자는 여러 게시물을 작성할 수 있음 |
Users | 1:N | Comments | 한 사용자는 여러 댓글을 작성할 수 있음 |
Users | 1:N | Likes | 한 사용자는 여러 게시물에 좋아요를 할 수 있음 |
Posts | 1:N | Comments | 한 게시물에 여러 댓글이 달릴 수 있음 |
Posts | 1:N | Likes | 한 게시물에 여러 좋아요가 달릴 수 있음 |
Posts | N:M | Tags | 한 게시물은 여러 태그를 가질 수 있고, 한 태그는 여러 게시물에 사용될 수 있음 |
Users (follower) | N:M | Users (following) | 한 사용자는 여러 사용자를 팔로우할 수 있고, 여러 팔로워를 가질 수 있음 |
주요 제약사항
- 모든 PK는 자동 증가(Auto Increment) 설정
- username은 유니크 값
- created_at은 기본값으로 현재 시간 설정
- 외래키(FK)는 참조 무결성 유지