Attribute 후보에 대한 예외 경우

2025. 9. 29. 15:30·데이터 분석/06. 데이터 모델링

데이터 모델링을 할 때, 비즈니스 룰에서 Attribute를 찾아내는 과정이 있습니다.
일반적으로 "하나의 값으로 표현할 수 있는 명사"는 Attribute 후보로 봅니다.

하지만, 이 규칙에는 예외가 있습니다.
바로 하나의 값으로 표현할 수 있는 명사라도, Entity로 만들어야 하는 경우입니다.


1. Attribute가 아닌 Entity로 만들어야 하는 경우

조건: 동일한 속성을 한 Entity 안에서 여러 개 저장해야 할 때

예를 들어,

"유저는 여러 개의 주소를 가질 수 있다."

라고 가정해봅시다.

이 상황에서 주소를 단순히 User 테이블의 Attribute로 넣으면 어떤 문제가 생길까요?


2. 잘못된 모델링이 초래하는 문제점

문제 1. Null 값 증가

  • 유저가 주소를 여러 개 가질 수 있다면, 주소를 address_1, address_2, address_3 … 이런 식으로 컬럼을 만들어야 합니다.
  • 하지만 대부분의 유저가 주소를 하나만 갖고 있다면 나머지 컬럼들은 Null로 채워지게 됩니다.
  • Null은 DB 공간을 낭비하고, 데이터 해석을 애매하게 만들어 부정적입니다.

문제 2. 컬럼 수 확장 문제

  • 유저가 주소를 3개만 가질 거라 가정하고 컬럼을 3개 만든다고 해도,
    만약 어떤 유저가 4개를 등록하고 싶다면 DB 구조 자체를 변경해야 합니다.
  • 이렇게 되면 테이블 구조가 불필요하게 자주 바뀌고, 확장성이 떨어집니다.

문제 3. 조회(Query) 복잡성

  • 특정 유저의 주소를 조회하거나, 모든 유저의 주소를 검색하려고 하면 SQL이 복잡해집니다.
  • 특히 특정 주소만 조건으로 검색할 때 WHERE 절이 난잡해집니다.

3. 올바른 모델링 방법

주소를 User 테이블에 직접 넣지 말고, Address라는 별도의 Entity로 분리합니다.

user 테이블 Address 테이블
user_id (PK) address_id (PK)
name user_id (FK)
email address_detail
... ...
  • Address 테이블은 user_id를 Foreign Key로 갖습니다.
  • 이렇게 하면 유저가 주소를 여러 개 등록해도 Address 테이블에 행(Row)만 추가하면 되므로 확장성이 뛰어납니다.

💡 장점

  1. Null 값 최소화
  2. 테이블 구조 변경 불필요
  3. SQL 조회 간단화
하나의 값으로 표현할 수 있는 명사는 attribute 후보이다. 단 여러값을 가질 수 있다면 entity후보다.

'데이터 분석 > 06. 데이터 모델링' 카테고리의 다른 글

카디널리티 관계 유형  (0) 2025.09.29
식별자의 종류와 주식별자의 특성  (0) 2025.09.29
데이터 모델링 초안 : 비즈니스 룰에서 ERD까지  (0) 2025.09.29
[데이터 모델링] 모델링의 시작! 비즈니스 룰 이해하기  (0) 2025.09.29
[데이터 모델링] 데이터를 어떻게 저장해야할까  (0) 2025.09.25
'데이터 분석/06. 데이터 모델링' 카테고리의 다른 글
  • 카디널리티 관계 유형
  • 식별자의 종류와 주식별자의 특성
  • 데이터 모델링 초안 : 비즈니스 룰에서 ERD까지
  • [데이터 모델링] 모델링의 시작! 비즈니스 룰 이해하기
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코테
    rank
    윈도우함수
    streamlit
    SQL
    git
    DENSE_RANK
    ROW_NUMBER
    tableaubootcamp
    revert
    cross_join
    solvesql
    AARRR
    tableau
    코드잇스프린트후기
    쿼리테스트
    프로그래머스
    Reset
    이행성
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
Attribute 후보에 대한 예외 경우
상단으로

티스토리툴바