코딩 개발/ORACLE

ORACLE - Foreign Key 제약

호소세 2023. 5. 9. 22:41
728x90
반응형

https://pabeba.tistory.com/137

 

DB 정규화

정규화 이상현상이 있는 관계를 분해하여 이상현상을 없애는 과정입니다. 이상현상이 존재하는 관계를 분해하여 여러개의 table을 생성합니다. 이를 단계별로 구분하여 정규형이 높아질수록 이

pabeba.tistory.com

위의 글에 나오는 제3정규화에 해당하는 내용입니다.

 

회사 내의 사원들을 테이블에 저장하려고 하는데 만일 테이블이 하나이면 어떤 일이 일어날까요?

 

맞습니다. 중복이 일어나는 안좋은 현상이 일어날 것입니다. 개발 직무, 인사팀, 품질관리팀... 등등 회사가 커지면 무조건 한 부서에는 여러명의 사람이 있을 것입니다.

 

따라서 테이블 하나로 만들게 되면

이름 부서 deptno 연봉
IU 개발 010 500
JOHN 개발 010 600
JACK 개발 010 700
BETTY 인사 011 800

이런식으로 개발, 개발, 개발 , 010 , 010 , 010 을 다 작성해야합니다. 하지만 제3정규화를 이용해서 테이블을 두개로 만들게 된다면 중복을 줄일 수 있지 않겠습니까?

 

예제를 보면서 이해를 해보도록 하겠습니다.

 

예제

CREATE TABLE k_department(
	deptno NUMBER PRIMARY KEY,
	dname VARCHAR2(100) NOT NULL,
	loc VARCHAR2(100) NOT NULL,
	tel VARCHAR2(100) NOT NULL
)
CREATE TABLE k_employee(
	empno NUMBER PRIMARY KEY,
	ename VARCHAR2(100) NOT NULL,
	sal NUMBER NOT NULL,
	job VARCHAR2(100) NOT NULL,
	deptno NUMBER NOT NULL,
	CONSTRAINT fk_k_emp FOREIGN KEY(deptno) REFERENCES k_department(deptno)
)

부서 table이 부모 테이블이고 직원 table 이 자식 테이블입니다. 

 

위에서 deptno를 FOREIGN KEY로 사용하는 모습을 볼 수 있는데

이렇게 제약조건을 넣을 수 있습니다.

 

이름 deptno 연봉
IU 010 500
JOHN 010 600
JACK 010 700
BETTY 011 800

부서 번호 하나로 어디 부서인지 알 수 있고 아마 다음 시간에는 이 나뉘어진 table로 join문을 사용하여 붙이지 않을까 생각이 듭니다. 아주 흥미 진진한 다음 시간이 기다려집니다.

 

소감

오늘의 소감은 foreign key에 대한 것보다 중용에 대한 것을 이야기하고 싶습니다. 뭐를 꾸준히 할 수 있다는 것이 정말 대단하다고 생각합니다. 

중용 : 지나치거나 모자라지 아니하고 한쪽으로 치우치지도 아니한, 떳떳하며 변함이 없는 상태나 정도.

이 중용을 지키기 위해서는 체력이 가장 중요하고, 마인드가 뒷받쳐 줘야한다고 생각합니다. 개발 공부를 하면서 스트레칭도 자주하고 먼곳을 바라보라고 하시더라고요.

여러분도 여러분의 꿈을 향해 미친듯이 달려가더라도 조금씩 쉬어가면서 가는 것을 추천드립니다. (저는 bed guy라서 침대에 자주 누워있습니다.)

반응형