Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Seminar4.5] 화면분석 #11

Open
yeeun0702 opened this issue Nov 15, 2024 · 0 comments
Open

[Seminar4.5] 화면분석 #11

yeeun0702 opened this issue Nov 15, 2024 · 0 comments

Comments

@yeeun0702
Copy link
Collaborator

yeeun0702 commented Nov 15, 2024

ToDo

아래 화면들을 분석하고, 어떤 API 와 ERD 를 뽑아낼 수 있는지 혼자 고민해보세요.

(개인 과제임으로, 개인 레포의 이슈에 작성해주세요)

  • 클라이언트가 아래 UI 들을 그리는데, 어떤 데이터가 내려가면 좋을지 고민해보세요.
  • 어떤 부분은 클라이언트의 영역일지, 어디까지 데이터를 내려줘야할지 고민해보세요.
  • 답은 없습니다.

image

⚠️

너무 깊게 고민하지마세요!

  • 음식배달, 가게배달,.. 같은 상단 메뉴는 클라이언트에서 직접 그릴거에요.

image

⚠️

너무 깊게 고민하지마세요!

  • 기본순, 쿠폰, 배달방식은 클라이언트에서 직접 그릴거에요.
  • 배달팁 할인중, 기본순 광고, 배달 예정 소요 시간은 고민하지 않아도됩니다.

ERD

image

  • 화면 상에 보이는 것들을 위주로 고민했습니다.
  • 첫 번째 화면에 음식배달과 관련하여 음식메뉴들을 선택한 후 화면이 넘어가는 것을 보고 음식 카테고리 테이블을 하나 만들었습니다.
  • 그 후 카테고리 하나를 고른 후 (화면 상에서는 분식을 고름) 가게 정보들을 볼 수 있으므로 가게 테이블을 구성했습니다.
  • 각각의 가게 안에는 여러 메뉴가 존재하므로 메뉴 테이블도 구성했습니다.
  • 이처럼 최대한 단순하게 보이는 화면 상에서 보이는 정보들을 토대로 ERD를 짜려고 노력했습니다.

🔎 내가 가졌던 의문점

  1. 배달 관련 정보를 따로 빼야할텐데 그러면 자연스레 주문 테이블이 생기지 않을까 ?

→ 주문과 관련된 사진이 아니므로 일단 제외하고 생각함

  1. 해당 화면 자체에 접근하게 된 건 유저가 존재하기 때문 아닌가 ?

→ 유저 테이블에 들어갈만한 정보가 화면에 없으므로 제외하고 생각했음

API

image

+++ 다음은 ERD를 설계할 때 고려한 내용들에 대한 조사내용입니다.

정규형이란 ?

1️⃣ 제1정규형 (1NF, First Normal Form)

조건:

  • 모든 속성(컬럼)은 원자값(Atomic Value)을 가져야 합니다. 즉, 하나의 셀에는 하나의 값만 존재해야 하며, 배열이나 중첩된 데이터가 없어야 합니다.

목적:

  • 데이터를 단순하고 일관된 형태로 만들어 데이터 처리와 검색을 용이하게 합니다.

예시 :

  • 비정규형: 가게 테이블에서 한 칸에 여러 배달방식이 저장된 경우 (예: 배달, 포장).
  • 1NF 변환: 배달방식을 개별적으로 저장하여 가게별로 하나의 배달방식만 저장.

2️⃣ 제2정규형 (2NF, Second Normal Form)

조건:

  • 1NF를 만족해야 합니다.
  • 기본키가 아닌 속성은 기본키 전체에 완전 함수 종속이어야 합니다.
    • 기본키의 일부에만 종속된 속성이 없어야 합니다.

목적:

  • 기본키의 일부에만 종속된 속성을 제거하여 데이터의 중복과 이상현상을 방지합니다.

예시 :

  • 비정규형: 메뉴 테이블에서 메뉴 ID와 가게 ID를 기본키로 설정했는데, 메뉴 사진은 메뉴 ID에만 종속되고 가게 ID와는 무관.
  • 2NF 변환: 메뉴 사진을 별도로 분리하여 메뉴 ID만 저장되도록 설계.

3️⃣ 제3정규형 (3NF, Third Normal Form)

조건:

  • 2NF를 만족해야 합니다.
  • 기본키가 아닌 속성은 기본키에만 직접 종속해야 하며, 다른 비기본키 속성에 종속되지 않아야 합니다.
    • 이행적 종속이 없어야 함.

목적:

  • 기본키 외의 속성 간의 의존성을 제거하여 데이터 중복과 이상현상을 더 줄입니다.

예시 (배민 관련):

  • 비정규형: 가게 테이블에서 배달방식과 배달팁 정보가 저장되어 있는데, 배달팁이 배달방식에 따라 달라지는 경우.
  • 3NF 변환: 배달방식과 배달팁 정보를 별도의 테이블로 분리하여 중복 저장을 방지.

4️⃣ BCNF (Boyce-Codd Normal Form)

조건:

  • 3NF를 만족해야 합니다.
  • 모든 결정자(Determinant)는 후보키(Candidate Key)여야 합니다.

목적:

  • 후보키가 아닌 속성이 결정자로 작용하여 발생하는 이상현상을 방지합니다.

예시 :

  • 비정규형: 음식 카테고리 테이블에서 "카테고리 ID"뿐만 아니라 "카테고리 이름"도 다른 속성의 결정자로 작용하는 경우.
  • BCNF 변환: "카테고리 이름"이 결정자로 작용하지 않도록, 카테고리 ID만으로 테이블의 속성을 결정하도록 변경.

5️⃣ 제4정규형 (4NF, Fourth Normal Form)

조건:

  • BCNF를 만족해야 합니다.
  • 다치 종속(Multi-Valued Dependency)이 없어야 합니다.
    • 하나의 속성이 다른 속성의 여러 값과 독립적으로 연관될 때 발생.

목적:

  • 다치 종속성을 제거하여, 테이블에 하나의 정보만 포함되도록 설계합니다.

🔎 다치종속성이란 ?

다치 종속성(Multi-Valued Dependency)은 한 테이블에서 하나의 속성이 다른 속성 집합의 여러 값과 독립적으로 연관될 때 발생하는 관계를 말합니다. 이를 제거하려면, 독립적인 속성들(예: 배달과 가게)을 별도의 테이블로 분리하여 데이터 중복을 줄이고 무결성을 유지합니다.

예시 :

  • 비정규형: 가게가 여러 카테고리(예: "치킨", "피자")에 속할 수 있고, 동시에 여러 배달방식(예: "배달", "포장")을 가질 수 있는 경우.
  • 4NF 변환: 가게-카테고리 관계와 가게-배달방식 관계를 각각 별도의 테이블로 분리하여 독립적으로 관리.
@yeeun0702 yeeun0702 changed the title [Seminar4.5] 화면분석 및 챌린지 과제 [Seminar4.5] 화면분석 Nov 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant