데이터베이스

[데이터베이스] 정규화 : 이상(Anomaly), 함수적 종속성 (Functional Depenency)

4Legs 2021. 3. 25. 17:52

데이터베이스 이상 (Anomaly)

관계형 데이터베이스의 잘못된 설계에서 발생하는 데이터 중복으로 인해 발생하는 부작용을 이상(Anomaly)이라 한다.

이상 현상의 종류를 회원의 정보를 저장하는 예시 테이블을 보며 알아보자.

ID NAME ORDER_ID SHIPMENT_ID MEMBERSHIP
0001 Lee 18254382 46257892 True
0002 Kim 18254383 37282462 False
0003 Park 18254384 24235423 False
0003 Park 18254385 68872151 False
0003 Park 18254386 68753212 False
0004 Choi 18254387 78951231 True

위 테이블의 기본 키는 ID + ORDER_ID 이다.

 

삽입 이상 (Insert)

만약 아직 아무 주문도 하지 않은 회원을 테이블에 추가하려 할 때, 삽입 이상이 발생한다.

위 테이블의 기본 키는 ID와 ORDER_ID의 복합 키이므로, ORDER_ID가 NULL이 될 수 없기 때문이다.

이런 회원을 추가하기 위해서는 미주문을 의미하는 ORDER_ID를 따로 지정하는 등의 비효율이 발생한다.

 

갱신 이상 (Update)

배송 무료 서비스를 받기 위해 ID = 0003인 Park 회원이 멤버쉽에 가입했다.

이제 Park 회원의 MEMBERSHIP 데이터를 True로 바꿔줘야 하는데, 총 3개의 행을 수정해야 한다.

만약 0003번 회원의 모든 행을 변경해주지 않는다면 데이터 간의 불일치가 발생하게 된다. 이를 갱신 이상이라 한다.

 

삭제 이상 (Delete)

ID = 0002인 Kim 회원이 현재 주문 18254383번을 취소했다.

주문 취소를 반영하기 위해 해당 행을 삭제한다면, 위 테이블은 더 이상 Kim에 대한 정보를 담지 못한다.

이처럼 튜플을 삭제할 때 데이터 손실이 발생하는 경우를 삭제 이상이라 한다.

 

함수적 종속성 (Functional Dependency)

함수적 종속성은 일반적으로 다음과 같이 표현한다.

X → Y

X를 결정자, Y를 종속자라 하며, 위 관계에서 Y는 X에 함수적 종속되었다고 한다. 반대로, X가 Y를 결정한다고 한다.

PRODUCT_ID PRODUCT_NAME COMPANY CATEGORY PRICE
4453215 KBD-142 ABC.Corp KEYBOARD 150000
5532482 MS-1523 ABC.Corp MOUSE 30000
7865428 WKBD-51 DEF.Corp KEYBOARD 200000
2211542 SPK-35 DEF.Corp SPEAKER 30000

 

  • 우리는 제품의 ID(PRODUCT_ID)를 알면, 해당 제품의 이름, 제조사, 제품유형, 가격 모두를 알 수 있다. 즉, 제품의 ID가 나머지 요소를 결정한다. (PRODUCT_ID가 기본 키이기 때문에 당연히 성립)

PRODUCT_ID → (PRODUCT_NAME, COMPANY, CATEGORY, PRICE)

  • 위는 곧, PRODUCT_NAME ~ PRICE는 PRODUCT_ID에 종속된다는 것과 같은 말이다.
  • 동일 회사에서 동일한 모델명을 가진 다른 제품이 존재하지 않는다고 가정하자. 이 경우에는 제품명과 제조사를 안다면 반드시 그 제품의 유형과 가격을 알 수 있다. (PRODUCT_ID도 알 수 있지만, 여기서는 제외한다.)

(PRODUCT_NAME, COMPANY) → (CATEGORY, PRICE)

주의할 점은 함수적 종속을 값이 아닌 개념으로 판단해야 한다는 것이다.

예를 들어, 위 테이블에는 PRICE = 150000인 제품이 하나밖에 없다. 그렇다고 PRICE가 PRODUCT_NAME을 결정한다고 말할 수 있을까? 제품의 가격을 안다고 해서 그 제품의 이름을 알 수 있을까?

그렇지 않다. 가격이 150000인 제품은 언제든 추가될 수 있기 때문이다. 이처럼, 값이 아닌 개념적으로 함수적 종속성을 판단해야 한다.