PK, FK 관계 궁금합니다 0 4 1,847

by 케빈재브라위너 [Oracle 기초] 마농 [2021.01.13 13:14:00]


A테이블

글No  - PK

B테이블

담당자ID - PK

글NO - ????

 

A테이블과 B테이블을 join하려하는데 글No를 이용해서 조인하려고합니다

B테이블에서 글No 를 PK랑 FK둘다 지정을 해야할까요? 아니면 FK로만 지정하면 되나요??

구글검색을 통해서도 개념만 나와있고 실전에 적용을 어떻게 해야할지가 안나와있어서 ㅠㅠ

PK, FK 동시지정과   FK만 지정하는거의 차이가 어떻게 있을까요?

by 마농 [2021.01.13 14:48:57]

테이블의 의미 및 관계에 따라 다릅니다.
글이 있고 그 글에 대한 담당이 있을 때
이 둘 사이 관계가 1:1 인지? 1:n 인지? n:1인지? m:n 인지에 따라 다릅니다.
A(게시글) PK 글NO
B(담당자) PK 담당자ID
1. A:B=N:1 -> 글 여러개를 한명이 담당, 한 담당자 여러 글 담당 가능 -> A 테이블에 담당ID 를 FK 로
2. A:B=1:N -> 글 하나를 여러명이 담당, 단, 한 담당자는 하나의 글만 담당 -> B 테이블에 글NO 를 FK 로
3. A:B=M:N -> 글 하나를 여러명이 담당, 한 담당자 여러 글 담당 가능 -> C 테이블(게시글_담당자_지정) 필요, C 테이블에 FK_A, FK_B 2개 필요하고, 2개 컬럼 결합한 1개의 PK 생성
4. A:B=1:1 -> 글 하나를 한명이 담당, 한 담당자는 하나의 글만 담당 -> 현실적으로 이런 경우는 없을 듯?
3번이 현실적으로 가장 유력해 보입니다.


by 케빈재브라위너 [2021.01.15 09:19:39]

3번에서 C테이블을 하나 더만들어서  FK를 A랑 B테이블에 설정하는건 알겠는데

2개 컬럼 결합한 1개의 PK생성이라는게

컬럼을 글NO_담당자ID 이런식으로 만들라는건가요?

예시 하나만 보여주실수있나요 

 

원래는 A테이블의 글NO와 B테이블의 글NO를 조인해서 쓸라했는데

 

이제는 그냥 C테이블하나에서만 조회하면 된다는 것같이 말씀하셔서 

제가 제대로 이해한게 맞나요??


by 마농 [2021.01.15 09:28:44]

A(게시글) : PK(글NO), 글제목, 글내용, 글쓴이, 등등...
B(담당자) : PK(담당자ID), 담당자명, 소속, 등등...
C(게시글_담당자_지정) : PK(글NO, 담당자ID), 지정일자, 등등...
게시글에 대한 담당자를 알려면 C 를 조회하면 되고,
그에 대한 상세정보(글제목이나, 담당자명 등)를 함께 조회하려면 A, B 를 조인해야죠.


by 케빈재브라위너 [2021.01.15 14:41:53]

아 이제이해했습니다

마농님 진짜 대단한 DB컨트롤러세요;;;

완벽이해됬습니다 감사합니다 테이블 만들어볼게요!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입