2012-05-04 6 views
1

모범 사례와 데이터베이스 엔진 작동 방식에 대해 의심이갑니다.Mysql - ID 열을 사용해야합니까?

가정하자 나는 다음과 같은 열이, 직원라는 테이블을 만들 :

  • SS ID (기본 키)
  • 이름을
  • 섹스
  • 나이

는 것은입니다 .. 나는 그것의 모든 테이블에있는 많은 데이터베이스와 일련 번호 인 ID라는 aditional 컬럼을 보았다. 내 테이블에 ID 필드를 넣어야합니까? 즉, 이미 색인 생성 할 기본 키가 있습니다. 시퀀서 ID 필드로 데이터베이스가 더 빨리 작동합니까? 나는 그것이 테이블을 연결하거나 연구하기 위해 그것을 사용하지 않으면 그것이 어떻게 도움이되는지 안다.

도움이 되었습니까? 그렇다면 왜 데이터베이스에서 어떤 일이 발생합니까?

감사합니다.

EDIT ----- 이것은 바보 같은 예입니다. SS_ID를 잊어 버리면 기본 키를 선택할 수있는 더 나은 방법이 있다는 것을 알고 있습니다. 필자가 알고있는 어떤 사람들은 ID라는 이름의 컬럼을 추가하라고 요청하기 때문에 주요 topi가있다. Microsoft Access와 같은 일부 데이터베이스 도구는 항상이 새로운 열을 추가 할 것인지 묻습니다.

잘못 되었습니까?

+0

"가 기본 키 인덱스 할 이미이"하나? 당신은 당신이 null'd가 아닌 유일하고 다른 것을 만들 수 있다고 확신합니까? 그렇다면 int 기본 키가 필요하지 않습니다 – Niranjan

답변

4

id 순차가있는 실제 성능 향상은 테이블 사용 방법에 따라 크게 달라집니다.

  • 일부 ORM 프레임 워크를 사용하는 경우 일반적으로 정수 ID가 [1] 인 순차적 ID를 사용하는 것이 더 효율적입니다.이 ID는 일반적으로 순차적 ID 열을 사용하여 얻을 수 있습니다.
  • ORM 프레임 워크를 사용하지 않으면 절대 사용하지 않는 id 키와 대리 문자 ss_id 키를 사용하여 항상 사용하는 것이 의미가 없습니다.
  • 다른 데이터베이스 테이블 (외래 키)에서 employees을 참조하는 경우 id 열을 저장하는 것이 더 효율적입니다.이 정수는 저장하는 것보다 하위 테이블에서 더 적은 공간을 차지하므로 저장하는 것이 더 효율적입니다. ss_id (나는 CHAR 또는 VARCHAR이라고 가정합니다). 내 대답은 당신이 할 타당한 이유가 있습니까 가정 - 그것은 사회 보장 번호 (이 될 것 같습니다)있어 가정 ss_id

은, 당신이 걱정해야 첨부 법적 & 개인 정보 보호 문제가있을 수 있습니다 귀하의 데이터베이스에 사회 보장 번호가 포함되어 있고 합법적으로는 &을 사용할 수 있습니다.

[1] 이것은 일반적으로 ORM 프레임 워크가 일반적인 ORM 사용에 맞게 조정 된 고도로 특수화 된 캐시 메커니즘을 사용한다는 사실에 의해 설명됩니다. 보통 id 순차 키를 포함하고 실제 비즈니스 정체. 이것은 실제로 이러한 "외래 키"고려 사항과 매우 유사한 고려 사항과 관련이 있습니다.

+0

SS_ID는 단지 예일뿐입니다 (나쁜 것, 미안합니다). 왜냐하면 우리는 어떤 SQL 쿼리에 대해서도 사용하지 않을 것이라는 것을 안다면, 내가 아는 어떤 사람들은 ID라는 이름의 칼럼을 추가하라고 요구하기 때문이다. 그들은 단지 데이터베이스의 성능을 어떤 식 으로든 돕는다 고 생각합니다. 이건 잘못된거야, 그렇지? –

+0

글쎄, 내 대답에 상태로, DB 성능을 도움이 * * 그것은 크로스 테이블 관계 (외래 키)의 일부로 사용되는 경우 * if * 대부분의 SQL은'id' 열에서 테이블 필터에 대해. – Romain

+0

@Romain : "일반적으로 정수형의 순차적 ID가 있으면 더 잘 작동합니다"라는 주석을 정당화 할 수 있습니까? – Cylindric

5

SS가 "사회 보장"을 의미하는 경우, 나는 그것을 PK로 사용하는 것을 강력히 권합니다. 자동 증가 ID는 이동 방법입니다.

비즈니스 로직이있는 키를 사용하는 것은 좋지 않습니다. 많은 사람들이 SS 정보를 제공하는 것에 대해 민감합니다. SS를 기본 키로 사용하면 앱에서 잠재 고객의 일부를 제거 할 수 있습니다. HIPPA와 같은 법률은 귀하가 사용하는 것을 불가능하게 만들 수 있습니다.

+1

+1은 주민 등록 번호를 저장하는 것에 대해 조언합니다. – Romain

+0

저장하기 전에 SS id를 해시하거나 난독 화해야합니다. 그래서 기본 키로 사용할 수 없습니다. 비효율적이며 불안정합니다. – Niranjan

+1

@ngen 기본 키로 사용할 수있는 방식으로 암호화 할 수 있습니다. 그렇게하는 성과는 일반적으로 매우 짧기 때문에 그다지 크지 않습니다. – Romain

2

중요한 것은 (분명히) 기본 키를 사용하는 데이터를 고유하게 식별 할 수있는 한 기본 키를 가지고 있다는 것입니다. 귀하의 예에서 SSN은 고유하게 식별 할 수 있기 때문에 은행이이를 사용하고 작동하게됩니다. 이 예제의 문제점은 직원 ID가 다른 테이블의 외래 키로 사용될 가능성이 있다는 것입니다. 즉, 법적으로 보호 된 개인 정보를 가져 와서 데이터 모델에 스프레이하는 것을 의미합니다. 이 경우 Auto Incremented 필드를 사용하면 더 잘 수행 할 수 있습니다.

3

미국 사회 보장 번호는 이 아니며, 충분히 식별 할 수 없습니다. 그리고 확실히 은행 그런 식으로 그들을 사용하지 마십시오. 모든 사람이 그런 것은 아닙니다. 오류로 인해 중복이 발생합니다. 외국인에게는 그런 것이 없습니다. 그것들은 너무 약해 데이터베이스 PK로 사용할 수 없습니다.

가장 중요한 : 은이

일부 연구 수행 죽음 이후 resused됩니다 SSN as Primary Key

+0

+1 -이 물개가 물개라고 생각합니다. – duffymo

+0

유스 케이스에 따라 다릅니다. 또한, 그들이 미국 숫자를 말하는 것만을 "추측"할 수는 없습니다. 따라서이 대답은 극도로 불완전한 IMO입니다. – Romain

+0

아마도 불완전하지만, 내게있어 결정적인 것으로 보이는 부분조차도있을 것입니다. 다른 국가들도 똑같은 문제에 직면해야합니다. – duffymo