불필요한 디자인은 좋은 습관이 아닙니다. 즉, 필요하지 않은 경우 항상 자동 증분 int 기본 키를 갖는 것이 좋지 않습니다.
필요하지 않은 예를 보자.
기사 테이블이 있습니다. 여기에는 int 기본 키 id
와 이름이 varchar 열이 title
있습니다.
또한 기사 카테고리 ( id
int 기본 키 varchar)로 가득 찬 테이블이 있습니다 name
.
기사 테이블의 한 행 id
에는 5가 있고 title
"버터로 거위를 요리하는 방법"이 있습니다. 카테고리 테이블의 "Fowl"( id : 20), "Goose"( id : 12), "Cooking"( id : 2), "Butter"(id : 9) 행과 해당 기사를 연결하려고합니다. .
이제 기사와 카테고리의 2 가지 테이블이 있습니다. 둘 사이의 관계를 어떻게 만드나요?
id (기본 키), article_id (외부 키), category_id (외부 키)의 3 개 열이있는 테이블이있을 수 있습니다. 그러나 이제 다음과 같은 것이 있습니다.
| 아이디 | a_id | c_id |
| 1 | 5 | 20 |
| 2 | 5 | 12 |
| 3 | 5 | 2 |
더 나은 솔루션은 2 개의 열로 구성된 기본 키를 갖는 것입니다.
| a_id | c_id |
| 5 | 20 |
| 5 | 12 |
| 5 | 2 |
다음을 수행하여 수행 할 수 있습니다.
create table articles_categories (
article_id bigint,
category_id bigint,
primary key (article_id, category_id)
) engine=InnoDB;
자동 증분 정수를 사용하지 않는 또 다른 이유는 기본 키에 UUID를 사용하는 경우입니다.
UUID는 고유 한 정의에 따라 고유 정수를 사용하는 것과 동일한 기능을 수행합니다. 또한 정수보다 장점과 단점이 있습니다. 예를 들어 UUID를 사용하면 참조하는 고유 문자열이 특정 데이터 레코드를 가리키는 것입니다. 이 기능은 중앙 데이터베이스가 1 개가 아니거나 응용 프로그램에서 데이터 레코드를 오프라인으로 생성 한 다음 나중에 데이터베이스에 업로드 할 수있는 경우에 유용합니다.
결국 기본 키에 대해 생각할 필요가 없습니다. 그것들을 그들이 수행하는 기능으로 생각해야합니다. 기본 키가 왜 필요한가요? 향후 변경되지 않을 필드를 사용하여 테이블에서 특정 데이터 세트를 고유하게 식별 할 수 있습니다. id
이를 수행하기 위해 호출 된 특정 열이 필요 합니까, 아니면 다른 (불변의) 데이터에서이 고유 식별을 기반으로 할 수 있습니까?