본문 바로가기
DB/스키마 설계

스키마 설계 - 카페 리뷰 서비스

by ssury94 2024. 12. 8.

 

-- 화면을 보고, 데이터베이스 스키마를 설계하세요.

-- 화면에 필요한 SQL문을 작성하세요.

 


-- 회원가입 화면

INSERT into user (email,password,nickname)
values ('abc@mail.com','1234','홍길동');

 -- 로그인 화면

SELECT *
FROM user
WHERE email ='fglover@howard.com';

 


-- 카페 리스트 화면

-- 카페 갯수는 20개씩 가져옵니다.

필요 컬럼: 카페이름, 주소, 설명, 평균별점

SELECT c.id ,c.name ,c.address, c.description , IFNULL(avg(r.rating),0) avg_rating 
FROM cafe c 
left join review r 
on c.id =r.cafe_id 
group by c.id 
order by c.id 
limit 0,20;

 별점이 없는 카페도 있기때문에 ifnull 사용


-- 카페 상세 화면

-- 가정: 카페 아이디는 2이다.

 

 

SELECT c.id, c.name ,
concat(c.operating_days ,' ',SUBSTR( c.opening_hour,1,5) ,'-', SUBSTR( c.closing_hour ,1,5)) Operating_hours,
c.phone_number ,avg(r.rating), c.description 
FROM cafe c 
left join review r 
on c.id =r.cafe_id 
where c.id=2
group by c.id ;

 

 

SELECT u.id,u.nickname ,r.created_at ,r.content , r.rating 
FROM cafe c 
left join review r 
on r.cafe_id =c.id 
join `user` u
on u.id =r.user_id 
where c.id=2
order by r.created_at desc;

 


-- 리뷰 작성 화면

-- 가정: 내 아이디는 1, 카페 아이디는 50, 1카페당 1개 리뷰만 남길 수 있다.

 

INSERT into review (user_id,cafe_id,rating,content)
values (1,50,4,'분위기 좋아요.');

-- 내가 작성한 리뷰 리스트 화면

-- 가정: 내 아이디는 1이다.

SELECT r.id ,r.cafe_id , c.name, r.created_at ,r.content ,r.rating 
FROM review r
join cafe c 
on c.id =r.cafe_id 
where user_id=1
order by r.created_at desc;

 


 

-- 리뷰 수정화면

-- 내 아이디는 1, 카페 아이디는 50

 

 UPDATE review 
 set rating =4, content = '분위기 좋긴 좋아요 '
 where user_id =1 and cafe_id =50;