-
Notifications
You must be signed in to change notification settings - Fork 1
ERD
Hwangwonuk edited this page Jan 23, 2022
·
9 revisions
- MySQL 8.0.x
- MEMBER 테이블의 member_id 같은 유일한 값으로 지정된 컬럼이 있다면, PK를 숫자 형태로 지정 하지않았습니다.
- 만약 숫자 형태의 INDEX 이외의 데이터들이 중복이 가능한 값 이라면 숫자 형태로 지정 하였습니다.
-
MEMBER 테이블의 member_id
-
PRODUCT 테이블의 product_idx - 해당 글에대한 고유한 값이 필요함
-
HOPE 테이블 - 정책상 고유한 값이 필요하지 않음
필요한 두 컬럼 모두 PK설정이 불가능하고 불필요한 IDX제거 -> 이후 쿼리문 COUNT 사용예정 아래 MySQL View 참조 👇 -
COMMENT 테이블 - comment_idx - 해당 댓글에대한 고유한 값이 필요함
-
REPLY 테이블 - reply_idx - 해당 대댓글에 대한 고유한 값이 필요함
-
FILE 테이블 - file_idx - 해당 파일에 대한 고유한 값이 필요함
-
BIG_CATEGORY 테이블 - big_category_name - 대분류명은 중복될 수 없습니다.
-
SMALL_CATEGORY 테이블 - small_category_name - 소분류명은 중복될 수 없습니다.
- 판매글 메인페이지 조회 및 검색을 위한 View
CREATE VIEW V_PRODUCT_MAIN AS(
SELECT
a.product_idx, a.big_category_name, a.small_category_name, a.title, a.price, a.member_id, a.status, a.updatetime,
COUNT(b.member_id) AS hope,
c.storefilename
FROM product a
LEFT JOIN hope b
ON a.product_idx = b.product_idx
LEFT JOIN file c
ON a.thumbnail_file_idx = c.file_idx
WHERE status = 'a' OR status = 'b'
GROUP BY a.product_idx
ORDER BY updatetime DESC
);
-
실행결과
-
판매글 상세조회를 위한 View
CREATE VIEW V_PRODUCT_DETAIL AS(
select
a.product_idx, a.member_id, a.title, a.content, a.price, a.delivery_price, a.status, a.updatetime,
GROUP_CONCAT(DISTINCT b.storefilename) images,
GROUP_CONCAT(DISTINCT c.comment_idx) comments,
CONCAT(GROUP_CONCAT(DISTINCT d.comment_idx, "/", d.reply_idx)) replies
FROM product a
LEFT JOIN file b
ON a.product_idx = b.product_idx
LEFT JOIN comment c
ON a.product_idx = c.product_idx
LEFT JOIN reply d
ON c.comment_idx = d.comment_idx
WHERE a.status = 'a' OR a.status = 'b'
group by a.product_idx
);
-
실행결과
- View는 데이터베이스에 존재하는 일종의 가상 테이블입니다.
- 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하지 않습니다.
- MySQL 에서 뷰는 다른 테이블이나 다른 뷰에 저장되어 있는 데이터를 보여주는 역할만 수행합니다.