1. SQL 시작하기 > 1-5. KEY

KEY

데이터베이스에서 사용하는 KEY는 기본적으로 TABLE의 열 (COLUMN)에 해당하며, 여러 종류가 있습니다. 이 KEY를 전부 아실 필요는 없지만, PRIMARY, FOREIGN KEY의 관계 는 꼭 알아가시길 바랍니다.

  • CANDIDATE KEY (후보키): TABLE의 COLUMN 중 유일하게 식별할 수 있는 열 (아직 KEY 아님)
  • PRIMARY KEY(기본키): TABLE의 COLUMN 중 유일하게 식별하기 위해 사용하는 열(KEY). Python dictionary의 key를 떠올리시면 됩니다. 빈 값이 있어서는 안되고NOT NULL, 모든 값은 UNIQUE해야합니다. → 주민번호, 고객 번호, 제품 코드 등 유일한 값으로 이루어져 있다.
  • ALTERNATE KEY(대체키): 기본키PK를 제외한 후보키
  • FOREIGN KEY(외래키): 다른 TABLE의 기본키 PK를 참조하는 열. 한 테이블에 여러 FOREIGN KEY가 있을 수 있음(여러 열 참조 가능)

candidate = 후보, 후보자. 따라서 CANDIDATE KEY는 PRIMARY KEY(기본키)가 될 수 있는 컬럼들을 의미합니다. 모든 UNIQUE, NOT NULL 특징을 갖는 COLUMN이라고 PRIMARY KEY가 될 수는 없습니다. CANDIDATE KEY 중 하나만이 PRIMARY KEY가 될 수 있습니다. 그 테이블을 대표하는 KEY이기 때문에 하나만 가능합니다.

PRIMARY KEY (PK)와 FOREIGN KEY (FK)에 대해서 조금 더 자세히 알아보도록 하겠습니다. 예컨대 이러한 상품과 관련된 'PRODUCT' TABLE이 있다고 합시다.

img

CATEGORY, TYPE, BRAND, PRODUCT_NAME, PRICE는 유일하지 않기 때문에 PK가 되기에 부적절합니다. 따라서 각 ROW가 완벽히 유일한 COLUMN인 'PRODUCT_CODE'를 PK로 설정해 줄 수 있습니다.

이번엔 판매와 관련된 'SALES' TABLE이 있다고 합시다.

img

고객정보를 뜻하는 MEM_NO, 주문한 제품을 의미하는 PRODUCT_CODE는 여러 주문을 할 수 있으니 PK로 적절하지 않습니다. ORDER_DATE, SALES_QTY도 PK로는 부적절 합니다. 이때, 'PRODUCT' TABLE의 PK였던 PRODUCT_CODE COLUMN이 'SALES' TABLE에도 사용되고 있습니다. 하지만 PK역할을 하지는 않죠? 이렇게 다른 테이블의 PK를 가져다가 참조하는 경우를 FOREIGN KEY라고 합니다. FK인 경우에는 꼭 유일UNIQUE하지 않아도 괜찮습니다. 즉, 한 테이블에 FK는 여러개일 수 있습니다.

복잡해 보이는 PK, FK를 사용하는 이유는 무엇일까요? 바로 모든 데이터를 한 TABLE에 저장하지 않기 위해서입니다. 만약 제품, 고객, 판매와 관련된 모든 데이터를 한 TABLE에 저장한다면 어떻게 될까요? 고객 입장에서 어떤 제품을, 몇 개, 몇 시에 주문했는지, 전화번호, 주소는 어떻게 되는지 등등 중복되는 값이 너무 많을겁니다. 그러면 데이터베이스의 NULL값이 커지고 데이터베이스의 용량이 커집니다. 가독성은 떨어지고, 비용은 늘어나죠. 결론적으로 PK와 FK를 사용하는 이유는

  1. 전체 데이터의 양을 줄이고, 효과적으로 메모리, 저장 공간(서버) 관리를 하기 위해!
  2. 각각의 주제에 대한 최소한의 TABLE을 만들고, 서로 참조하게 만들기 위해!

정도로 정리할 수 있습니다.

참고자료

마지막으로 업데이트 된 날짜:
2022년 9월 24일