데이터 모델링을 하며 ERD(Entity Relationship Diagram: 개체관계도)에 테이블을 만들면서 테이블간의 관계 연결에 대해 어려움을 겪었다.
요약하면 부모와 자식/ 참조하는 테이블과 참조되는 테이블로 간단하지만 실제 모델링을 하면 이러한 기준이 모호하여 구분이 어려워진다.
우선 테이블간의 관계에 대해 간단히 알아보면 1:1, 1:N, N:M(여러개랑 여러개)의 관계들이 있다.

아래 그림은 학생과 수업의 관계를 나타내는 테이블인데 다대다의 관계를 가지고 있다

위 그림처럼 여러명의 학생과 여러개의 수업을 테이블로 나타내면 경우의 수가 어마무시하게 많아져 어떤 정보를 찾을 때 매우 어려워지게 된다.
따라서 각 테이블에는 해당테이블에 필요한 정보를 나타내도록 하고 테이블 행(여러 학생 또는 수업)을 식별할 수 있는 것만 뽑아내서 두 테이블의 관계를 표현하는 아래 그림과 같이 관계를 나타내 주는 새 테이블을 만들어 1:N관계로 나눠준다.

이렇게 하면 학생들의 정보와 수업들의 정보를 담은 두 테이블과 학생_수업과의 관계를 나타내는 테이블이 만들어 지며 학생테이블과 학생-수업테이블 // 수업테이블과 학생-수업테이블은 각각 1:N관계를 가지게 된다.
위 그림에서 이러한 관계를 표현하는 과정에서 눈에 띄는 것이 PK,FK이다.
PK(primary key: 기본키)는 학생과 수업의 테이블에서 각 행의 정보들을 식별할 수 있는 정보(학생코드, 수업코드)를 표현한다.
PK는 테이블 행의 여러 정보들 중 행을 식별할 수 있어야 하는 때문에 비어있으면 안되고(NOT NULL) 중복되어서도 안된다(Unique). 그리고 식별을 할 때 테이블의 정보를 최대한 빠르게 검색해야 하므로 간단한 정보일 수록 좋다.
FK(foreign key:외래키)는 테이블과 연결되는 테이블의 관계를 나타낸다. 쿼리 -> (foreign key 자식)
그림에서 학생-수업 테이블은 학생테이블과 수업테이블의 관계를 1:N 관계로 나타내기위한 테이블이므로 학생테이블과 수업테이블을 참조하여 만들어야 한다.
그러기 위해서 학생정보를 식별하는 학생코드(PK), 수업정보를 식별하는 수업코드(PK)로 테이블이 구성되며 이렇게 다른 테이블의 정보를 참조하기위한 학생코드와 수업코드는 학생_수업테이블 내에서 FK(외래키)가 된다.
학생과 수업 테이블의 PK가 학생-수업 테이블에서는 FK가 되며
이는 학생-수업테이블은 학생과 수업테이블을 참조하는 테이블이라는 의미를 표현하며
동시에 학생과 수업테이블은 학생-수업테이블에 의해 참조되는 테이블로 서로의 관계를 알 수 있게 된다.
출처
https://velog.io/@jch9537/DATABASE-PK-FK
[DATABASE] 기본키(PK), 외래키(FK)
데이터 모델링을 하며 ERD(Entity Relationship Diagram: 개체관계도)에 테이블을 만들면서 테이블간의 관계 연결에 대해 어려움을 겪었다.요약하면 부모와 자식/ 참조하는 테이블과 참조되는 테이블로
velog.io
데이터 베이스
개체
개체는 현실 세계에서 구별되는 모든 것을 의미한다. 즉, 저장할 만한 가치가 있는 중요 데이터를 가지고 있는 사람이나 사물 등이며, 개념적 모델링에 있어서 가장 중요한 요소이다.
개체는 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태(속성)을 하나 이상 가지고 있다.
개체를 고유의 이름과 속성들로 정의한 것을 개체 타입이라고 한다.
테이블 = 클래스
테이블은 집합적 속성
외래키는 FK를 사용
데이터베이스의 생성과 운영 특징
1.요구사항 수집및 분석 2.설계 3.구현 4.운영 5.감시 및 개선
개념적 모델링
요구사항을 수집하고 분석한 결과로 전체적인 뼈대를 만드는 과정
논리적 모델링
개념적 모델링에서 만든 ER 다이어그램을 DBMS로 변경하여 실제 데이터 베이스 모델을 만드는 과정
ER 다이어그램
개체와 개체 간의 관계를 그림으로 나타냄
사각형 : 개체
동그라미 : 속성
마름모 : 관계
관계 대응수
두 개체 타입의 관계에 참여하는 개체 수

(1:1) 관계
개체와 개체가 일대일로 대응하는 관계
(1:N , N:1) 관계
한쪽 개체 타입이 다른 개체에게 여러 관계를 맺음
(M:N) 관계
각 개체들이 서로 임의의 개수의 개체들과 복합적인 관계
IE 표기법

데이터 모델링
테이블 : 릴레이션
속성 : Column 칼럼
각 속성 사이에는 의존성이 존재한다.
어떤 속성 A의 값을 알면 다른 속성의 B값이 유일하게 정해지는 의존 관계는
속성 B는 속성A에 종속한다.
속성 A는 속성 B를 결정한다.
'A -> B' : A는 B를 사용한다. 그러기에 A를 B의 결정자이다.
릴레이션의 속성 : 직사각형
속성 간의 함수 종속성: 화살표
복합 속성 : 직사각형으로 묶어서 그림
정규화
정규화는
중복되는 것과
null을 없애기 위해 한다.
정규화는 제 3정규화 까지로 이루어져 있다.
제 1정규화 : 반복되는 속성이나 Group 속성을 제거하고
새로운 실체를 추가한 뒤 기존의 실체와 1 : N의 관계를 형성한다.
제 2정규화: 복합키(Composit Primary Key)로 구성된 경우 해당 테이블 안의 모든 칼럼들은 복합키
전체에 의존적이어야 한다.
제 3정규화: 한 테이블 안의 모든 키가 아닌 칼럼들은 기본키(Primary Key)에 의존해야 한다. 만일 키가 아닌
칼럼에 종속되는 속성이 존재한다면 제거한다.