2011-07-30 8 views

답변

5

그것은 나중에 특정 행을 찾는 데 유용

여기에 간단한 소개입니다. 각 행에 대해 고유 한 다른 값이있는 경우 다른 열을 기본 (고유 한) 키로 사용할 수 있기 때문에 추가 ID 열이 반드시 필요하지는 않습니다.

그러나, 자동 증가 id 컬럼의 장점은
이 가) 각 행에 대한 고유하고
b)는 변경되지 않습니다 점이다.

예를 들어 StackOverflow를 가져옵니다. 모든 질문에는 ID (이 중 하나는 6886017)가 있으며 URL에 ID와 제목을 모두 사용합니다. ID가 여전히 고유하기 때문에 동일한 제목의 두 가지 질문이있을 수 있습니다. StackOverflow가 실제로보고있는 것이기 때문에 질문의 제목을 변경할 수도 있습니다. 이전의 링크도 계속 작동합니다. 제목 부분이 아닌 URL의 ID 부분입니다.

+1

+1은 고유 식별자라는 것을 강조합니다. –

3

아니요, 실제로 필요하지는 않지만 다른 테이블의 행이 해당 행을 참조해야하는 경우 해당 행을 고유하게 식별하는 고유 한 방법이 있습니다.

+0

감사합니다. 그게 네가 필요로하는 유일한 경우 야? – Laura

+0

크로스 테이블 참조 외에도 행을 식별하는 방법이 필요한 다른 것들에 유용합니다. 예를 들어, 삭제하려는 특정 행이있는 경우'id = 1234 '또는 ID가'where' 절에 추가 될 수 있습니다. – icktoofay

+0

다른 테이블뿐만 아니라 문서에도이 ID가 필요할 수 있습니다. 예 : HTML 페이지를 만들 때 양식 요소의 ID가이 값이므로 사용자 # 123을 삭제하거나 페이지 # 345를 입력 할 수 있습니다. –

1

편리하고 (WHERE name = 'blah' and somethingelse = 'foo' 대신 WHERE id = 123) 그 외에 정수 인덱스는 일반적으로 예를 들어. 문자열 인덱스. 그 외에도

+0

하지만 대개 데이터베이스에서 무언가를 얻으면 이름이나 다른 관련 필드로 처리하려고합니다. ID는 뭔가 "내부"처럼 보입니다 – Laura

+0

@ laura : 그것은 시스템 측면에서 "내부"이지만 시스템 내부에 있습니다. 데이터베이스 내부에는 없습니다. 나는. MySQL은 ID 열을 사용하는지 여부는 신경 쓰지 않지만 모든 것에 대해 고유 한 ID를 사용하는 것은 큰 도움이됩니다. – Flambino

+0

이름으로 열을 가져 오려면 해당 열에 인덱스를 넣으십시오. 그러나 예를 들어 실제 이름을 가진 사용자를 저장하는 테이블을 가져 가야합니다. 두 명의 사용자가 같은 이름을 가진 것은 거의 없습니다. 따라서 ID를 고유 한 방식으로 식별하려면 ID가 필요합니다. – ThiefMaster

0

필수는 아니지만 매우 좋습니다. 또한, 업데이트, 색인에 대한 고유 행을 유지하는 데 매우 유용 삭제 등

여기에 몇 가지 유용한 정보입니다 : http://en.wikipedia.org/wiki/Unique_key

0

의 ID 필드는 일반적으로 필드에 대한 기본 키입니다. 특정 테이블의 특정 필드를 식별하고 기본 키를 반복 할 수 없습니다. 테이블 조인에 도움이되는 외래 키로 사용할 수도 있습니다. HTTP : //www.opensourcevarsity.com/mysqldba/l8primaryforeignkey

+0

왜 투표가 늦습니까? 간단한 질문, 간단한 대답. – Phil

+0

"필드의 기본 키"? 키는 일련의 속성입니다. 필드가 아니라 테이블의 속성입니다. 기본 키는 "특정 필드"를 식별하지 못하며, 필드가 아닌 고유 한 * 튜플 * (즉, 행)을 식별하는 값의 속성 집합입니다. – sqlvogel

1

관계형 데이터베이스로 작업 할 때 각 행을 고유하게 식별 할 수 있어야합니다. 대부분의 경우 행을 고유하게 식별 할 하나 또는 모드 데이터 열을 선택할 수 있습니다. 이를 natural key이라고합니다. 각 행을 쉽게 식별 할 수있는 방법이 없으면이 식별을하기위한 목적으로 고유 한 열을 소개 할 수 있습니다. 그게 synthetic key이고 그게 당신이 물어 보는 자동 증가가있는 id 열입니다.

각 행을 식별 할 수있는 다른 방법이있는 경우에는 필요하지 않습니다. 서로 구별 할 수없는 행을 가질 수도 있지만 관계형 데이터베이스 패러다임의 가치를 크게 떨어 뜨릴 수 있습니다. 또한 자동 증가 숫자 일 필요는 없습니다. 종종 UUID와 같이 고유 ID 문자열이 사용됩니다.

1

"ID"는 식별자를 의미합니다. 관계형 데이터베이스 설계의 컨텍스트에서 관계 내의 튜플 (행)은 키에 의해 고유하게 식별되며 모든 관계에는 하나 이상의 키가 있어야합니다.

키가없는 테이블은 중복 행을 허용하여 모호성, 부정확 한 결과 및 행이 설명하려는 실제 엔티티를 정확하게 식별하는 문제를 초래합니다. 따라서 키는 모든 데이터베이스 테이블에 대한 데이터 무결성의 중요한 측면입니다.

그러나 키는 이 아니며이 아니어야하며 "자동 증가"하지 않아야합니다. 이러한 기능은 테이블에 적합한 키를 선택하는 것과 관련이 없습니다.

+1

중복 된 행을 허용하지 않고 중복 된 데이터를 허용하는 유일한 * 키 * ID 인 테이블을 추가합니다. 응용 프로그램에 따라 가능한 모든 세계에서 최악의 상황 일 수 있습니다. –

+1

@Catcall, "ID 번호"의 의미에 달려 있습니다. 많은 것들이 숫자로 식별됩니다. "ID 번호"는 대용 암호뿐만 아니라 자연 키를 의미 할 수 있습니다. – sqlvogel

+0

좋은 지적. 나는 "키가 인공 * ID 번호 인 테이블은 복제 행을 허용하지 않고 중복 데이터를 허용합니다." (자연 키를 대신하는 키를 설명하기 위해 * 대리 키 *라는 용어를 예약하려고합니다. 항상 성공하지는 않습니다.) –

관련 문제