MySQL : PK, FK, Natural Key, Surrogate Key, AI 의미 & 관련 에러해결!

Benjamin·2022년 8월 17일
0

DB

목록 보기
2/8

PK?

Primary Key(주키, 주식별자)
결정 인자
테이블의 모든 데이터를 유일하게 식별해주는 컬럼
테이블은 무조건 PK를 가지고 있다.

함수적 종속

레코드 내에 존재하는 항목(컬럼)들 중에 '속성 B가 속성 A에 함수적 종속관계에 있다'는 것은 A를 이용해서 B를 식별할 수 있다는 뜻이다.
A->B의 형태 사용.
A : 결정인자 PK

Natural Key?

자연키
실제로 어떤 개체가 갖고있는 속성을 나타내는 컬럼이 PK가 되었을 때, 이를 Natural Key라 한다.
예 ) 주민등록번호

Surrogate Key?

대체키
어떤 개체의 실제 속성은 아니지만, PK로 쓰기 위해 추가한 컬럼
주로 1부터 순차적으로 증가하는 숫자가 들어감

FK?

Foreign Key(외부키, 외부식별자)
테이블간 관계를 의미.
테이블은 참조를 당하는 경우가 아니면 무조건 FK를 가지고있다.

AI?

Auto Increment
설정 시, DBMS가 자동으로 증가하는 값을 넣어준다.
PK가 Surrogate Key인경우 보통 이런식으로 AI가 설정되어있다.


Error Code: 1075. Incorrect table definition; there can be only one auto column and it must be defined as a key	0.016 sec

에러가 났다!

-> 어떤 테이블에서 1)해당 테이블에서 AI로 설정한 컬럼을 PK로 하고, 2)FK로 참조하는 컬럼이 부모테이블에서 AI인데, 해당 테이블에서 PK로 설정하면 위와 같은 에러가 난다.

이 사진처럼 말이다..

아래 사진처럼 두 개의 PK가 모두 각각 부모테이블에서 AI로 설정되어있더라도, 해당 테이블에서 둘 다 FK이면 문제없다.
또한, 원하는 여러값들(A,A 와 A,B 둘 다)을 저장하려면 하나의 컬럼만 FK인 동시에 PK로 설정하는게 아니라, 두개의 컬럼을 모두 PK,FK로 설정해야 내가 원하는 여러 값들을 저장할 수 있다.
PK는 유일성을 만족하므로!!

그래서 생각해보면,해당 테이블에서 한 컬럼에 대해 AI를 직접 설정하는거라면 FK인 컬럼을 굳이 PK로 하지않아도, 내가 원하는 여러값들에대해 저장이 가능하다.

(예를 들어, [사용자 = A, playlistId = 1] 과 [사용자 = A, playlistId = 2]는 사용자가 A로 동일하더라도 playlist(PK)의 값이 다르기때문에 다른 컬럼으로 인식된다. )

0개의 댓글