Skip to content
Hwangwonuk edited this page Jan 23, 2022 · 9 revisions

💾 ERD

📚 Used RDBMS

  • MySQL 8.0.x

🔑 Primary Key

  • MEMBER 테이블의 member_id 같은 유일한 값으로 지정된 컬럼이 있다면, PK를 숫자 형태로 지정 하지않았습니다.
  • 만약 숫자 형태의 INDEX 이외의 데이터들이 중복이 가능한 값 이라면 숫자 형태로 지정 하였습니다.
  1. MEMBER 테이블의 member_id

  2. PRODUCT 테이블의 product_idx - 해당 글에대한 고유한 값이 필요함

  3. HOPE 테이블 - 정책상 고유한 값이 필요하지 않음
    필요한 두 컬럼 모두 PK설정이 불가능하고 불필요한 IDX제거 -> 이후 쿼리문 COUNT 사용예정 아래 MySQL View 참조 👇

  4. COMMENT 테이블 - comment_idx - 해당 댓글에대한 고유한 값이 필요함

  5. REPLY 테이블 - reply_idx - 해당 대댓글에 대한 고유한 값이 필요함

  6. FILE 테이블 - file_idx - 해당 파일에 대한 고유한 값이 필요함

  7. BIG_CATEGORY 테이블 - big_category_name - 대분류명은 중복될 수 없습니다.

  8. SMALL_CATEGORY 테이블 - small_category_name - 소분류명은 중복될 수 없습니다.

👀 MySQL View 적용

  • 판매글 메인페이지 조회 및 검색을 위한 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
    );
  • 실행결과
    1

  • 판매글 상세조회를 위한 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
    );
  • 실행결과
    2

❓ MySQL View란?

  • View는 데이터베이스에 존재하는 일종의 가상 테이블입니다.
  • 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하지 않습니다.
  • MySQL 에서 뷰는 다른 테이블이나 다른 뷰에 저장되어 있는 데이터를 보여주는 역할만 수행합니다.

📦 테이블 구조