foreign key, primary key, candidate key 는 DB 수업을 들었지만 계속해서 헷갈리는 부분이었다.
내가 본질을 잘 꿰차고 있지 못해서 발생하는 일이 아닐까 라는 생각이 들었다.
갓활코딩님의 강의를 듣고 다시 정리한 각 단어의 의미를 다음과 같은 것 같았다.
foreign key
이는 '관계' 를 표현한다. ER 다이어그램 상에서는 relationship 즉 관계로 표현이 되고 마름모로 나타나진다.
foreign key 는 종속 관계의 entity 에서 활용이 많이 되는데, 혼자서도 독자적으로 존재할 수 있는 entity(부모) 의 경우 primary key 를 갖게 하고, 부모에게 종속되어 존재하는 entity(자식) 의 경우 foreign key 를 부여해야 한다.
예를 들자면 '저자' entity 와 '휴면계정' entity 를 들 수 있다. '저자' entity 는 ID 값이 독자적으로 존재할 수 있지만, '휴면계정' entity 는 '저자' entity 의 ID 값이랑 같은것만 와야하고, 또 저자에게 없는 ID 값을 가질 수 없는 종속된 관계이다.
예를 들자면, 이런 다이어그램이 나올 수 있다.
저자 입장에서는 휴면자가 선택적이다. 없어도 된다. 하지만 왜 의무적일까? 그거는 없으면 0, 있으면 1로 표시를 해줘야 하기 때문이다.
또한, 휴면자 입장에서는 저자가 의무적이다. 휴면자ID는 무조건 저자 ID 중에 하나로 구성이 되어야 하기 때문이다.
이 관계에서 저자는 primary key, 휴면자는 저자에 대한 foreign key를 갖는다!
이 관계가 대표적인 1대 1 관계를 나타내는 entity 였다.
primary key
이는 '독립성' 을 표현한다. ER 다이어그램의 Entity 가 독립적인 지위를 갖는 용도로 사용된다.
Candidate key
이는 '독립성 후보'를 의미한다. ER 다이어그램의 entity 가 독립적인 지위를 가지게 해 줄수 있는 attribute 을 알려준다.
내가 잘 정리한지 모르겠다, 하지만 예전보다는 더 개념이 단단해지지 않았을까..?
'CS > DB' 카테고리의 다른 글
[캐글] 중복된 데이터 병합하기 (kaggle store-sales-time-series-forecasting_2) (0) | 2022.10.23 |
---|---|
[캐글] 파이썬 CSV 데이터 확인하는 2가지 방법 (kaggle store-sales-time-series-forecasting_1) (0) | 2022.10.19 |
[MySQL] First normalization, 다대다, 연결 테이블 (0) | 2022.02.05 |
[MySQL] ER 다이어그램 entity, attribute, relationship (0) | 2022.02.04 |
[MySQL] ER 다이어그램 화살표, draw.io_생활코딩 리뷰 (0) | 2022.02.04 |