본문 바로가기
AWS/MySQL

MySQL 인스타그램 클론 스키마 디자인

by leopard4 2022. 12. 12.

인스타 그램 클론 DB를 만들어보자.

 

프로필, 좋아요, 해쉬태그 기능이있다.

 

작성한 글에 댓글이 달린 모습

 

프로필에 팔로우, 팔로잉 숫자 카운트 

 

 

자, 이제 테이블을 만들어보자

 

유저의 정보를 기록할 users 테이블과

사진을 관리할 테이블을 아래와 같이 만든다.

photos 테이블의 user_id 는 users 테이블의 id를 참조하기위해 Foreign Keys(연결) 설정을 한다.

 

 

 

 

 

사진에 태그를 불러오는 원리 설명

 

 

 

더미 데이터가 있다고 가정하고 

아래와 같이 SQL문을 작성 및 테스트 해볼 수 있다.

 

-- 1. 가장 오래된 회원 5명은???
select created_at, id 
from users
order by created_at 
limit 0,5;

-- 2. 회원가입을 가장 많이 하는 요일은???
select dayname(created_at),count(id) as id
from users
group by dayname(created_at)
order by id desc;

-- 3. 회원가입은 했지만, 사진은 한번도 올린적 없는, 유령회원들의 데이터를 가져오시오.
select *users
from users u 
left join photos p
on u.id = p.user_id
where p.id is null;

-- 4. 좋아요를 가장 많이 받은, 유명한 사진은 무엇인지,
-- 그 사진의 id, 유저이름, 사진url, 좋아요 수 를 가져오세요.
select l.photo_id, count(l.photo_id), p.image_url, u.username
from likes l
join photos p
on l.photo_id = p.id
join users u
on p.user_id = u.id
group by photo_id
order by count(l.photo_id) desc;


-- 5. 가장 많이 사용된 해쉬태그가 있을것이다.
-- 가장 많이 사용된 상위 5개의 해쉬태그 이름과, 갯수를 조회하시오.
select count(pt.tag_id) as count, t.tag_name
from photo_tags pt
join tags t
on pt.tag_id = t.id
group by t.id
order by count desc
limit 0,5;

-- 좋아요를 80개 이상 한 사람들의 이름과 그사람이 누른 좋아요 수를 나타내세요.
select l.user_id, count(l.user_id) as count, username
from likes l 
join users u
on l.user_id = u.id
group by l.user_id having count >= 80
order by count desc;