이 글은 Figma로 제공된 요구사항을 기반으로 ERD를 설계하고, 제1정규형부터 제3정규형까지 단계별로 적용하며 데이터의 중복 문제를 해결해 나가는 과정을 설명합니다.
처음에는 모든 정보를 하나의 테이블에 넣거나 반복 컬럼 형태로 구성하는 경우가 있습니다.
예를 들어 사용자 테이블(User)에 다음과 같은 구조가 있습니다.
user_id | email | password | gender | favorite_food1 | favorite_food2 | favorite_food3
이러한 형태는 다음 문제를 발생시킵니다.
1NF의 목적은 반복 컬럼을 제거하고 모든 컬럼을 원자값으로 만드는 것입니다.
User(user_id, email, password, gender)
UserFavoriteFood(user_favorite_food_id, user_id, food_id)
Food(food_id, food_name)
2NF는 복합키 중 일부에만 의존하는 속성(부분 종속)을 제거하는 것입니다.
예시로 UserMission 테이블을 봅시다.
UserMission(user_id, mission_id, status, completed_at, user_name)
여기서 user_name은 user_id에만 의존하므로 부분 함수 종속에 해당됩니다.
UserMission(user_mission_id, user_id, mission_id, status, completed_at)
User(user_id, user_name, email, password, gender)
3NF는 이행적 종속을 제거합니다. 즉, A → B, B → C 관계를 A → C 관계로 바꾸어 테이블을 나누는 과정입니다.
Store(store_id, store_name, region_name, region_code)
여기서 region_name과 region_code는 region_id에 의존합니다.
Store(store_id, store_name, region_id)
Region(region_id, region_name, region_code)
사용자가 버튼을 빠르게 여러 번 클릭할 때 중복 요청이 발생할 수 있습니다. 이를 방지하기 위한 방법:
프론트엔드에서 기본적인 중복 요청을 차단하고, 백엔드에서 멱등성 키와 유니크 제약을 통해 완전한 무결성을 보장하는 혼합 방식을 적용해야 합니다.
1NF, 2NF, 3NF를 적용하여 데이터 중복을 최소화하고, 데이터 무결성을 강화했습니다. 또한, 중복 요청 문제에 대한 다양한 해결 방법을 생각해보았습니다.