📌 1. 데이터베이스와 테이블 관계의 기초
데이터베이스를 설계할 때 가장 먼저 고려해야 할 것은 테이블 간의 관계를 어떻게 설정할 것인가이다. 이 관계 설정에는 크게 '식별 관계'와 '비식별 관계' 두 가지 방법이 있으며 각각의 관계는 테이블 사이의 연결 방식과 주요 키(Primary Key, PK) 및 외래 키(Foreign Key, FK)의 사용 방법을 결정한다.
* 키 (Key) : 고유한 식별자(identifier)로 데이터베이스에서 조건에 만족하는 관계의 행을 찾거나 순서대로 정렬할 때 다른 행과 구별할 수 있는 유리한 기준이 되는 속성의 집합으로 키의 종류로는 기본키, 슈퍼키, 후보키, 대체키, 외래키 등이 있다.
1. 슈퍼키(Super Key)
- 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다. 슈퍼키는 유일성만 만족하면 슈퍼키가 될 수 있다.
- 유일성이란 하나의 키로 특정 행을 바로 찾아낼수 있는 고유한 데이터 속성을 말한다. 예를 들면 전국에서 나를 구별할 수 있는 유일하고 고유한 속성은 주민번호이듯이 말이다. 주민번호는 전국민이 모두 겹치지 않아 유일하고 고유한 구별 방법으로 쓰인다.
2. 후보키(Candidate Key)
- 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다. 후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족해야한다.
3. 기본키 (Primary Key)
- 후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다. 테이블에서 기본키는 오직 1개만 지정할 수 있다.
- 기본키는 테이블 안에서 유일하게 각 행들을 구별할 수 있도록 쓰인다. 기본키는 NULL 값을 절대 가질수 없고, 중복된 값을 가질 수 없다.
- 각 행들을 구별하려면 값이 없어선 안되고, 중복되어서도 안되기 때문이다.
4. 대체키 (Alternate Key)
- 후보키가 두개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라한다.
- 대체키는 기본키로 선정되지 않은 후보키이다.
5. 외래키 (Foreign Key)
- 테이블이 다른 테이블의 데이터를 참조하여 테이블간의 관계를 연결하는 것이다. 데이터를 좀더 조회하기 쉽다.
- 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약을 주는 것이다.
- 참조 될 테이블(A)이 먼저 만들어지고 참조하는 테이블(B)에 값이 입력되어야 한다.
- 이때, 참조될(A) 열의 값은 참조될(A) 테이블에서 기본키(Primary Key)로 설정되어 있어야한다.
- 외래키는 참조되는 테이블의 기본키와 동일한 키 속성을 가진다.
- 참조되는 부모테이블이 먼저 생성된 뒤 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야된다.
- 부모 테이블 먼저 삭제될 수 없다. 왜냐하면 부모테이블을 참조하는데 부모테이블이 삭제되면 자식테이블은 참조하는 것이 없어지기 때문에 외래키 오류가 생긴다.
- 외래키 관계에서 부모테이블을 삭제하려면 자식테이블 먼저 삭제한 후 부모테이블을 삭제해야한다.
📌 2. 식별 관계(Indentifying Relationship)
식별 관계는 한 테이블의 기본 키가 다른 테이블의 외래 키이자 기본 키로 사용되는 관계.
즉, 부모 테이블의 기본 키가 자식 테이블에서도 기본 키로 중요한 역할을 한다. 이러한 관계는 테이블 간에 강한 의존성을 가지며, 부모 테이블 없이는 자식 테이블의 데이터가 존재할 수 없다. (의존적) 예를 들어, '회원' 테이블에서 회원 번호가 기본 키이고, '회원 상세 정보' 테이블이 회원 번호를 기본 키로 사용하여 추가적인 정보를 관리하는 경우가 이에 해당된다. 회원 상세 정보는 회원 번호 없이는 의미가 없기 때문에 식별 관계로 설정하는 것이다.
📌 3. 비식별 관계(Non-identifying Relationship)
반면, 비식별 관계는 부모 테이블의 기본 키가 자식 테이블의 외래 키로만 사용되고, 자식 테이블의 기본 키로는 사용되지 않는 관계이다. 이 관계는 상대적으로 느슨한 연결을 의미하며, 부모 테이블의 존재 유무와 상관없이 자식 테이블의 데이터가 독립적으로 존재할 수 있다.
예를 들어, '도서' 테이블이 있고, '출판사' 테이블이 있다고 할 때, 도서 테이블의 도서 ID가 기본 키이고, 출판사 ID는 외래 키로만 사용된다면 이는 비식별 관계에 해당한다. 도서는 출판사가 없어도 그 자체로 독립적인 정보를 가질 수 있기 때문이다.
📌 4. 식별 관계와 비식별 관계의 선택 기준
데이터 모델을 설계할 때 식별 관계와 비식별 관계 중 어떤 것을 선택할지는 여러 요소에 따라 달라질 수 있다. 데이터 간의 의존성, 데이터의 독립성, 조회 효율성 등을 고려하여 결정해야 하며, 경우에 따라서는 하나의 데이터 모델 내에서 두 가지 관계가 혼용되어 사용되기도 한다.
결국, 효과적인 데이터 모델링은 데이터와 비즈니스 요구 사항을 정확히 이해하고 이를 기반으로 적절한 관계를 설정하는 것에서 시작된다.
식별 관계와 비식별 관계를 잘 이해하고 적용한다면, 보다 효율적이고 견고한 데이터베이스 시스템을 구축할 수 있다.
MySQL에서 식별관계와 비식별관계를 설명하기 위해 간단한 ERD(엔티티 관계 다이어그램)를 그린다.
식별 관계의 예: '자동차' 테이블과 '바퀴' 테이블
'자동차' 테이블에서 자동차 아이디(vehicle_id)가 기본 키이다.
'바퀴' 테이블에서 자동차 아이디(vehicle_id)가 기본 키이자 외래 키로 사용된다. 이는 '자동차' 테이블의 자동차 아이디에 직접적으로 의존한다는 것을 의미한다.
비식별 관계의 예: '자동차' 테이블과 '자동차회사' 테이블
'자동차' 테이블에서 자동차 ID(vehicle_id)가 기본 키이다.
'자동차회사' 테이블에서 회사 ID(vehicle_company_id)가 기본 키이다.
'자동차' 테이블에서 회사 ID(vehicle_company_id)는 외래 키로만 사용되며, 이는 '도서' 데이터가 출판사의 존재와 독립적으로 존재할 수 있음을 나타낸다.
📌 5. 식별 관계와 비식별 관계의 장단점
식별 관계의 장점
- 데이터의 정합성 유지를 DB에서 한번 더 할 수 있다.
- 자식 테이블에 데이터가 존재한다면 부모 데이터도 반드시 존재한다고 보장할 수 있다.
식별 관계의 단점
- 요구사항이 변경되었을 경우 구조 변경이 어렵다.
비식별 관계의 장점
- 변경되는 요구사항을 유동적으로 수용할 수 있다.
- 부모 데이터와 독립적인 자식 데이터를 생성할 수 있다.
비식별 관계의 단점
- 데이터 정합성을 지키기 위해서는 별도의 비즈니스 로직이 필요하다.
- 자식 데이터가 존재해도 부모 데이터가 존재하지 않을 수 있다.
- 즉, 데이터 무결성을 보장하지 않는다.
#데이터베이스 #DB #식별관계 #비식별관계 #Mysql #테이블 #슈퍼키 #외래키 #
'SQL' 카테고리의 다른 글
<My SQL> JOIN의 종류 설명 및 사용법 & 예제 (0) | 2024.06.24 |
---|