2026/06/27 7

Ch07. 논리적 모델링(4) - 현대적인 설계 트랜드

현대적인 애플리케이션 개발과 데이터베이스 설계에서는 비식별 관계를 사용하는 것이 사실상 표준이다. 과거: 식별 관계가 선호되었던 이유과거에는 식별 관계를 선호하는 경향이 있었다.논리적 명확성: "부모 없이는 자식이 존재할 수 없다"는 논리적 관계를 데이터 구조에 직접적으로 표현할 수 있다는 점을 높이 평가했다.저장 공간 절약: 지금과 달리 저장 공간이 비쌌던 시절에는 "AUTO_INCREMENT"를 위한 별도의 ID 컬럼을 만드는 것을 낭비라고 생각하는 경향이 있었다.쿼리 최적화: 특정 시나리오(예: 부모와 자식을 항상 함께 조회)에서 별도의 인덱스 없이도 PK 인덱스를 바로 활용할 수 있다는 점이 장점으로 여겨졌다.하지만 이러한 장점들은 소프트웨어의 복잡성이 기하급수적으로 증가하고, 변화의 속도가 빨라..

Ch07. 논리적 모델링(4) - 식별, 비식별 관계의 다대다

주문(orders)과 상품(product)의 다대다 관계를 해결하는 order_item 테이블을 예로 들어보자. 비즈니스 규칙"하나의 주문에는 동일한 상품이 중복으로 들어가면 안 된다"는 아주 일반적인 비즈니스 규칙이 있다고 생각해보자. 예를 들어, "주문번호 100번(order_id)"에 "청바지(product_id)" 상품이 두 번 기록되면 안 된다. 데이터가 중복으로 쌓이면 나중에 통계를 낼 때나 재고를 계산할 때 심각한 오류를 유발할 수 있다. 식별 관계 (Identifying)DROP TABLE IF EXISTS order_item_identifying;DROP TABLE IF EXISTS product_identifying;DROP TABLE IF EXISTS orders_identifying..

Ch07. 논리적 모델링(4) - 식별, 비식별 관계의 일대일

비식별 관계 (Non-identifying) DROP TABLE IF EXISTS member_detail_non_identifying;DROP TABLE IF EXISTS member_non_identifying;CREATE TABLE member_non_identifying ( member_id BIGINT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY (member_id));CREATE TABLE member_detail_non_identifying ( member_detail_id BIGINT NOT NULL AUTO_INCREMENT, -- 독립적인 PK member_id BIGINT NOT NULL, -- 일반 컬럼 + FK ..

Ch07. 논리적 모델링(4) - 식별, 비식별 관계의 SQL 쿼리/성능

단순 SQL 쿼리요구사항: 특정 댓글 하나의 내용을 조회하라 비식별 관계 쿼리-- comment_id가 500번인 댓글 조회SELECT content FROM comment_non_identifying WHERE comment_id = 500;댓글의 고유 ID 하나만 알면 되므로 매우 단순하고 직관적이다.식별 관계 쿼리-- 10번 게시글의 3번째 댓글 조회SELECT content FROM comment_identifying WHERE board_id = 10 AND comment_no = 3;댓글을 찾기 위해 부모 ID와 자식 번호를 모두 알아야 한다. 애플리케이션에서 관리해야 할 값이 더 많아진다. SQL 조인과 조회식별 관계는 손자 테이블을 조회할 때 조인 없이 데이터를 찾을 수 있다.요구사항: "..

Ch07. 논리적 모델링(4) - 식별 관계의 문제점

식별 관계는 부모의 식별자를 자식이 물려받는다는 점에서 논리적으로 명확해 보일 수 있다. "게시글 없는 댓글은 없다"와 같은 비즈니스 규칙을 데이터 구조에 직접적으로 표현하는 것처럼 느껴지기 때문이다. 하지만 이런 강한 결합(Tight Coupling)은 실무적인 관점에서 여러 심각한 문제점을 만드는데, 이는 애플리케이션의 유연성과 확장성을 크게 저해하는 원인이 된다. 식별 관계의 핵심적인 문제점은 다음과 같다.유연성 부족 부모와 자식이 PK로 강하게 묶여 있기 때문에, 한번 맺어진 관계를 변경하는 것이 매우 어렵다.예를 들어 댓글을 다른 게시글로 옮기는 등의 비즈니스 요구사항 변경에 유연하게 대처할 수 없다.기본 키(PK) 컬럼의 전파와 복잡성 증가관계의 깊이가 깊어질수록(자식, 손자 테이블로 내려갈수..

Ch07. 논리적 모델링(4) - 식별, 비식별 관계의 일대다

게시글(BOARD)과 댓글(COMMENT)의 관계를 예로 들어보자. 하나의 게시글에는 여러 댓글이 달릴 수 있다. (1:N) 이 관계를 식별 관계, 비식별 관계로 각각 모델링 해보면서 장단점을 알아보자. 비식별 관계이 방식은 자식 테이블인 COMMENT가 자신만의 고유한 기본 키(comment_id)를 가지는 구조다.ERD에서 비식별 관계는 점선으로 표시된다. 식별 관계는 실선으로 표시된다.DROP TABLE IF EXISTS comment_non_identifying;DROP TABLE IF EXISTS board_non_identifying;CREATE TABLE board_non_identifying ( board_id BIGINT NOT NULL AUTO_INCREMENT, title VARCHA..

Ch07. 논리적 모델링(4) - 식별, 비식별 관계의 개념

외래 키를 어떻게 사용하느냐에 따라 관계는 크게 다음 두 종류로 나뉜다.식별 관계(Identifying Relationship)비식별 관계(Non-identifying Relationship)이 둘을 구분하는 기준은 단 하나다. "부모 테이블의 기본 키를 물려받아 자식 테이블의 "기본 키(PK)의 일부"로 사용하는가(식별 관계), 아니면 부모 테이블의 기본 키를 단순히 "일반 컬럼"으로만 사용하느냐?(비식별 관계)"물론 두 경우 모두 부모의 기본 키를 알고 있으므로 받아온 부모의 키는 외래 키(FK)가 된다. 이 선택은 데이터베이스 모델의 구조, 유연성, 확장성에 큰 영향을 미치므로, 두 방식의 차이점과 장단점을 명확히 이해해야 한다. 식별 관계, 비식별 관계 예시1) 아파트와 호수: 식별 관계의 예시 ..