훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com
우리는 지난번까지 데이터베이스의 기본 개념에 대해서 알아보았습니다.
오늘은 키에 대해서 조금 더 자세히 알아보겠습니다.
키
테이블의 레코드를 검색할 때 레코드를 특정(구별)할 수 있도록 해주는 기준입니다.
구별할 수 있게 해 준다는 것은, 유일해야 한다는 것이겠죠?
예를 들면 계정이나 이메일과 같은 것들이 해당됩니다.
하나의 칼럼이 키가 될 수도 있지만, 여러 개의 칼럼이 묶여서 키가 될 수도 있습니다.
라고 했었습니다.
키의 종류
키의 종류에는 개념적으로 여러 가지가 있지만, 기본 수준에서 꼭 알아야 할 것들만 정리해보겠습니다.
1. 기본 키 (PK)
기본이 되는 키로, 테이블에서 해당 레코드를 특정할 수 있게 해 줍니다. (유일해야 한다)
단일 칼럼일 수도 있고, 여러 칼럼이 합쳐진 형태일 수도 있습니다.
(단, 기본 키는 없을 수도 있다 ex. 테이블에 외래 키만 존재하는 형태)
2. 후보 키
기본키가 될 수 있는 가능성이 있는 키로, 여러 후보들을 뽑아놓고 이 중에 기본 키를 정합니다.
3. 외래 키 (FK)
다른 테이블에서 '기본 키'로 사용되는 칼럼이 현재 테이블에서도 칼럼으로 사용되는 것을 의미합니다.
단순 중복 칼럼이 아니라, 의도적으로 테이블 조인과 같은 목적을 수행하기 위해 넣은 키를 의미합니다.
즉, 테이블 조인 시 기준이 되는 칼럼을 의미합니다.
테이블에서 FK가 PK역할을 하는 경우 - 식별 관계
이 테이블은 menu테이블이고, restaurant_id가 외래 키이자 기본키로서 사용되고 있습니다.
테이블에서 FK가 일반 칼럼이고, 따로 PK가 존재하는 경우 - 비식별 관계
이 테이블은 restaurant 테이블이고, user_id라는 외래 키가 존재하나,
restaurant_id라는 자신의 기본 키를 갖고 있습니다.
외래 키의 참조 무결성 제약조건
이름이 참 어렵습니다.
제 수준에서 단순하게 이해하면
restaurant 테이블을 보시면,
restaurant 테이블은 user_id라는 FK를 갖고 있습니다.
그렇다면 user_id는 user테이블의 PK겠죠?
restaurant에 들어있는 레코드에 user_id (FK)로
user 테이블에서 해당 레코드를 검색한다면 반드시 존재해야 한다는 것입니다.
상식적으로 당연합니다.
restaurant에서 주인을 찾으려고 FK를 갖고 user를 찾았는데 존재하지 않는 상황?
레스토랑은 있는데 주인은 없는 상황입니다.
이런 상황이 존재해서는 안 되겠죠?
그래서 DB에서는 이런 경우 오류를 발생시킵니다.
그렇다는 것은 즉,
레코드 삽입 삭제에 테이블 간 순서가 있다.라는 것을 의미합니다.
위의 예시에서 user을 삭제하려면, 해당 user에 대한 FK를 갖고 있는
restaurant를 먼저 삭제하고, 그 이후에 user을 삭제해야 합니다.
또한 restaurant에서 FK로 user을 추가하려면, user을 먼저 생성하고 나서
존재하는 user에 대해서 FK로 이어주어야 합니다.
이것을
외래 키의 참조 무결성 제약 조건이라고 합니다.
'데이터베이스' 카테고리의 다른 글
MySQL Join 기본 (0) | 2021.03.31 |
---|---|
MySQL 기본 명령어 (0) | 2021.03.31 |
(MySQL) Selection연산 기본과 Index Performance (0) | 2021.03.24 |
데이터베이스 기본 개념 (0) | 2021.03.11 |
데이터의 종류 (0) | 2021.03.03 |