복붙노트

[SQL] SQL 기본 키 VARCHAR VS 정수 [폐쇄]

SQL

SQL 기본 키 VARCHAR VS 정수 [폐쇄]

내가 결정 함께 일하고 있어요 팀은 VARCHAR 기본 키 테이블을 만들 수 있습니다. 이 테이블이 기본 키에 다른 테이블에 의해 참조됩니다.

내가 대학에서 배운 것을 다음, 정수 기본 키를 생성하는 습관을했습니다. 나는 기본 키 정수를 사용하여 성능 향상이 있음을 읽었습니다.

문제는 내가 정수 기본 키를 생성하는 다른 이유를 모르겠입니다. 당신은 어떤 조언을해야합니까?

해결법

  1. ==============================

    1.기본 키는 행에 대한 정체성을 표현하기 위해 가정하고 시간이 지남에 변경하지 마십시오.

    기본 키는 행에 대한 정체성을 표현하기 위해 가정하고 시간이 지남에 변경하지 마십시오.

    같은 엔티티의 이름, 이메일 주소, 또는 일련 번호 - 나는 VARCHAR 자연 키의 일종이라고 가정합니다. 그런 다음 자연 키를 사용하는 경우가 종종 키 필요가 있기 때문에, 예를 들어 변경하는 일이 발생할 수 있습니다 :

    대리 키를 사용하여 당신은 기본 키를 변경함으로써 발생하는 문제를 방지.

  2. ==============================

    2.VARCHAR 대 INT는 많은 얘기하지 않습니다. 무슨 일하면 액세스 패턴입니다.

    VARCHAR 대 INT는 많은 얘기하지 않습니다. 무슨 일하면 액세스 패턴입니다.

    절대에서 넓은 키는 항상 좁은 키보다 더 될 것입니다. 유형은, 전혀 중요성을 전달하지 그 문제에 폭이다. INT 생각과 비교했을 때 INT는 대개 단지 4 바이트 폭 사실에 의해 그 인수를 승리, 그래서 몇 가지 유형이 좁음에 INT를 이길 수 있습니다.

    그러나 정말 중요한 것은 클러스터 키의 선택입니다. 종종 기본 키와 혼동, 두 개의 서로 다른 개념을 나타내고 중첩하지 않아도된다. 여기에 대한 자세한 설명은 내가 VARCHAR 또는 INT의 기본 키가있는 테이블을 설계해야한다? 클러스터 키의 선택은 바로 가장 큰 실수 하나 만들 수있을 수 있습니다 거기에 테이블 디자인에서 가장 중요한 결정 및 INT 신원 (1,1)의 기계적인 적용에 관한 것입니다. 액세스 패턴의 문제는 어디에서 오는 여기에 있습니다 :

    전반적으로, 지능 IDENTITY 클러스터 키를 사용하여 엉망이 될 수있는 많은 액세스 패턴이있다. 그래서 쿠키 커터 솔루션을 적용하는 점프하기 전에, 아마도 분석의 약간이 필요합니다 ...

    좀 더 일반적인 지침 :

    당신은 기본 키 저장소 디자인의 문제가 있지만, 모델링의 문제가 아니며, 전적으로 도메인 기반이기 때문에 기본 키 디자인 가이드 라인은 없다 참조하십시오.

  3. ==============================

    3.편향 확증이에 대한 용어가있다 :

    편향 확증이에 대한 용어가있다 :

    "또한) 확증 편향 또는 myside 바이어스라는 독립적 그들은 사실 여부를 자신의 선입견이나 가설을 확인 호의 정보에 사람들을위한 경향이있다. 사람들이 결과는 선택적으로 바이어스 방법으로 증거를 해석, 새로운 증거를 수집하거나, 선택적으로 리콜 메모리에서 정보를 제공합니다. "

    물론, 첫 번째 반응은 말을 할 것이다 "그러나 그것은 사실이 아니다!" 그래, 당신은 편견있어 왜냐하면 '그런 말 것) [혀가 단단히 뺨에 포함]

    여기에 전형적인 예 : 당신은 모든 백조는 흰색이며, 과연, 당신과 당신의 친구가 지금까지 발견 된 모든 백조는 흰색 것을 당신의 동물학 교수 들었다 말한다. 이제 나중에 인생에서 동료가 아마 검은 백조와 같은 생물이 의견을 표명 가정 해 봅시다. 뭐?! 그것은 당신이 배운 게 아니에요. 당신의 세계를 누 볐어입니다! 즉시 나가서 백조 조사를 실시하고 1000 흰색 백조와 제로 검은 백조를 계산합니다. 증명! 10,000 하얀 백조를 찾았다 경우 가설 '모든 백조는 흰색이다'는 바로 10 배 더 진실 것입니까?

    다른 방법은 잠시 흰색 백조 잊고 검은 백조를 추구하려고하는 것입니다. 아마도 햇살에 Dawlish에서 바다로 휴가를 받아?

    정말 무례한 소리를 의미하지 않는다; 당신은 당신이 이야기 한 것에 대해 많이 읽는 인정하고 참으로 존경을 번다. 테이블에 정수 열을 불필요하게되어 추가하는 경우 사례를 찾아보십시오 : 그래서 여기에 도전.

    다음은 몇 가지 힌트와 스포일러 있습니다 : 다른 테이블에 의해 참조되지 않는 테이블; 단일 열 '모든 키'룩업 테이블; 많은 :)을 조회하지 않습니다 '작은'테이블

    다음은 조사하실 수 있습니다 다른 관련 항목은 다음과 같습니다 :

    '기본 키'이라는 단어는 '차'많은 의미를 가지고 또는 모든 키가 주어진 테이블에 동일합니까?

    는 '좋은'키의 자질은 무엇인가? (예를 들면 키의 값은 불변 또는 안정성 "좋은"충분해야 하는가?)

    또는 대리 키와 (아마도 다른 '좋은'자연 키의 부스트 성능에) (사용 가능한 자연 키가 '좋은'충분하지 않기 때문에 perhpas) 정수 열은 인공 키로 테이블에 추가되어 있습니까?

    대리 키 성능 근거 테이블에 추가 될 때, 이것은 실제 측정 결과 또는 단지 인식 효과 (즉 조기 최적화)에 대한인가?

    키가 논리적 비즈니스 모델에 표시하거나 단지 구현을위한 대리 하는가?

    항상 뇌 매번 참여하지 않고 (예를 들어 테이블에 정수 열을 추가) 뭔가를 할 수있는 좋은 아이디어인가? ;)

    [면책 조항 : 나는 자연 키 옹호하고 피하다 대리입니다. 나에게 그들은 비정규 같다 : 당신이 때 당신은 일반적으로 성능 문제 (구체적이고 명백한), 위해, 그것을 할 경우이 시간에 고정 할 수없는 다른 고장 거짓말 (형편 SQL 제품 버전, 논리적 설계 결함 등 ). 대리 논리적 비즈니스 모델에 표시해서는 안됩니다. 가끔 인공 식별자를 필요로하고, 심지어 그들에게 논리적 인 비즈니스 모델을 노출했다.]

  4. from https://stackoverflow.com/questions/3162202/sql-primary-key-integer-vs-varchar by cc-by-sa and MIT license