이메일 주소를 기본 키로 사용 하시겠습니까?


234

자동 증가 숫자와 비교할 때 이메일 주소가 기본에 적합하지 않습니까?

우리 웹 애플리케이션은 시스템에서 이메일 주소가 고유해야합니다. 그래서 이메일 주소를 기본 키로 사용하려고 생각했습니다. 그러나 제 동료는 문자열 비교가 정수 비교보다 느릴 것이라고 제안합니다.

이메일을 기본 키로 사용하지 않는 것이 합당한 이유입니까?

우리는를 사용하고 PostgreSQL있습니다.


5
'1 차'는 무엇을 의미합니까? 이메일 주소가 고유해야하는 경우 이는 핵심이며 고유 제한 조건이 필요합니다. 실적이 저조한 시스템을 최적화하는 실제적인 이유가없는 한, '승격'하기로 결정했는지 여부는 '1 차'가 될 수 있습니다.
언젠가

7
데이터베이스가 고유 한 전자 메일 주소를 적용하도록하려면 고유 인덱스가있는 열을 생성하되 기본 키로 사용하지 마십시오.
James Westgate

104
@robert 누군가 이메일 주소를 변경하려면 어떻게해야합니까? 외래 키도 모두 변경 하시겠습니까?
systempuntoout

3
@onedayhenhen-차이는 거의 없지만 기본 키는 기본적으로 클러스터링되지만 고유 인덱스는 그렇지 않습니다. 기본 단일 레코드 조회 키인 기본 키를 계속 정의하려고합니다. 고유 인덱스는 단순히 일반 인덱스보다 열의 고유성을 강화합니다.
James Westgate

3
@ James Westgate : 참고로 PostgreSQL에는 자동 클러스터링과 같은 것이 없습니다. PRIMARY KEY는 모든 필드가 NULL이 아닌 UNIQUE INDEX와 정확히 동일한 디스크에 구현됩니다.
Matthew Wood

답변:


283

문자열 비교는 int 비교보다 느립니다. 그러나 전자 메일 주소를 사용하여 데이터베이스에서 사용자를 검색하는 경우에는 문제가되지 않습니다. 조인이 여러 개인 복잡한 쿼리가 있는지 여부는 중요합니다.

여러 테이블에 사용자에 대한 정보를 저장하면 users 테이블의 외래 키가 전자 메일 주소가됩니다. 즉, 전자 메일 주소를 여러 번 저장합니다.


11
@ Sjoerd : 문제는 이메일 주소가 여러 번 저장되는 것이 아니라 비효율적이지만 오늘날 하드 드라이브 공간을 걱정하는 사람입니다. 대부분의 비즈니스에는 Google 규모가 없으므로 이것이 중요합니다. 문제는 이메일 주소가 기본 키이며 외래 키로 참조되기 때문에 나중에 변경할 수 없다는 것입니다.
Stefan Steiger

@StefanSteiger 누가 하드 드라이브 공간에 대해 말했습니까? 당신이 저장하는 것은 RAM의 공간을 차지할 것입니다.
Jonathan Allen

내가 궁금한 것처럼 GUID 키는 내가 생각하는 전자 메일 키와 같습니다.
tofutim

178

또한 이메일은 고유 한 분야를 만들기에는 나쁜 선택이며 이메일 주소를 공유하는 사람과 소규모 기업도 있습니다. 전화 번호와 마찬가지로 이메일도 재사용 할 수 있습니다. Jsmith@somecompany.com은 1 년 후 John Smith와 2 년 후 Julia Smith에 쉽게 속할 수 있습니다.

이메일의 또 다른 문제점은 이메일이 자주 변경된다는 것입니다. 키를 사용하여 다른 테이블에 조인하는 경우 전체 클라이언트 회사가 전자 메일을 변경하면 다른 성능을 발휘할 수있는 다른 테이블도 업데이트해야합니다.


47
계단식 업데이트 문제를 언급하면 ​​+1입니다. 그렇기 때문에 친구는 친구가 서로 게이트 키만 사용할 수 있습니다. ;-).
sleske

10
아, 나는 그 말이 마음에 들지 않습니다 ... 대리 키도 문제의 원인이 될 수 있습니다. 예, 응용 프로그램은 비즈니스 및 / 또는 무결성 규칙 변경에보다 강력하지만 정보가 조금 더 쉽게 손실 될 수 있으며 레코드의 ID가 덜 명확 해집니다. 그래서 나는 여기서 엄지 손가락의 규칙을 권장 하지 않을 것입니다 ...
Unreason

12
@onedaywhen과 @jay, 당신이 그것을 독특하다고 생각하기 때문에 그것을 독특하게 만들지 마십시오. 그리고 남편과 아내는 다른 고객 일 수 있습니다. 이전에 실행하지 않았기 때문에 이것이 발생하지 않는다는 의미는 아닙니다. 나는 그것에 부딪쳤다. 그리고 그것이 당신이 생각해야하는지의 여부에 상관없이 이메일이 고유 한 것으로 간주되어서는 안되는 이유이다. 이것은 본질적으로 잘못 되었기 때문에 되돌려 야 할 요구 사항입니다.
HLGEM

15
@ HLGEM : 끝없는 논쟁에 들어가고 싶지 않지만 제안 된 키가 컨텍스트를 알지 못하면 가설을 기반으로 고유하지 않다고 말할 수는 없습니다. 예를 들어 전화 회사의 관점에서 볼 때 전화 번호는 고객을 고유하게 식별합니다. 예, "하지만 전화를 걸 때 응답 할 사람이 2-3 명이라면 어떻게해야합니까?" 그러나 이것은 관련이 없습니다. 전화 회사의 관점에서 볼 때 이것은 정의상 하나의 고객입니다. (계속 ...)
Jay

14
(계속) 마찬가지로, 전자 메일 통신 (메시지 디스패치 시스템 또는 알림 전달 시스템)과 주로 관련된 시스템을 구축하는 경우 전자 메일 주소가 사용자를 고유하게 식별 할 수 있습니다. 여러 사람이 해당 이메일 주소를 공유하는 경우에는 관련이 없습니다. 단일 메시지 대상이므로 단일 사용자입니다. "사용자"와 "고객"은 "개별 인간"과 동의어 일 필요는 없습니다.
Jay

99

기본 키는 고유 하고 일정 해야합니다.

이메일 주소는 계절에 따라 변경됩니다. 조회에는 보조 키로 유용하지만 기본 키에는 적합하지 않습니다.


17
좋은 키의 속성은 안정적이어야하지만 반드시 불변 인 것은 아니라는 것입니다.
14:55에 언젠가

5
@onedaywhen : p! 그렇지 않으면 왜 SQL이 계단식 업데이트를 지원합니까?
Bill Karwin

18
선택할 수 있다면 상수 / 불변 키를 찾으십시오. 길에서 당신을 위해 일을 덜; SQL이 계단식 업데이트를 지원한다고해서 항상 좋은 생각은 아닙니다!
Steven A. Lowe

7
@Vincent Malgrat : "계단식 업데이트 ... 제동 db 정규화"-정규화 개념을 잘못 이해 한 방법!
onedaywhen

5
@Vincent Malgrat : 정규화 개념을 실제로 잘못 이해했음을 확인해 주셔서 감사합니다. "여러 행에 동일한 정보를 반복해서 가져 와서는 안됩니다"- "정보"라고 말했습니까? 복합 키에는 일반적으로 여러 행에서 반복되는 값이 포함됩니다. 외래 키의 경우 값이 큰 "반복"이 아니라 참조됩니다. 두 개의 값이있는 단일 열 도메인 (예 : '예'및 '아니오')은 세 개 이상의 행이있는 경우 참조 테이블의 여러 행에서 동일한 값을 갖습니다. 이것은 정말 기본적인 것들입니다!
onedaywhen

64

이메일 주소를 기본 키로 사용하는 단점 :

  1. 조인을 수행 할 때 속도가 느려집니다.

  2. 게시 된 외래 키가있는 다른 레코드는 더 큰 값을 가지므로 더 많은 디스크 공간을 차지합니다. (오늘 디스크 공간 비용을 감안하면 레코드를 읽는 데 시간이 오래 걸리는 경우를 제외하고는 사소한 문제 일 수 있습니다. # 1 참조)

  3. 이메일 주소가 변경 될 수 있으며,이를 외래 키로 사용하는 모든 레코드가 업데이트됩니다. 이메일 주소는 자주 변경되지 않으므로 성능 문제는 미미합니다. 더 큰 문제는 반드시 제공해야한다는 것입니다. 코드를 작성해야하는 경우, 이것은 더 많은 작업이며 버그의 가능성을 소개합니다. 데이터베이스 엔진이 "업데이트 캐스케이드"를 지원하는 경우 사소한 문제입니다.

이메일 주소를 기본 키로 사용하는 이점 :

  1. 일부 조인을 완전히 제거 할 수 있습니다. "마스터 레코드"에서 필요한 모든 이메일 주소 인 경우 추상 정수 키를 사용하여 검색하려면 조인을 수행해야합니다. 키가 이메일 주소 인 경우 이미 가지고 있으며 가입 할 필요가 없습니다. 이것이 당신에게 도움이되는지 여부는이 상황이 얼마나 자주 발생하는지에 달려 있습니다.

  2. 임시 쿼리를 수행 할 때 사람은 어떤 마스터 레코드가 참조되는지 쉽게 알 수 있습니다. 데이터 문제를 추적 할 때 큰 도움이 될 수 있습니다.

  3. 어쨌든 거의 확실하게 전자 메일 주소에 대한 색인이 필요하므로 기본 키로 만들면 하나의 색인이 제거되므로 이제 삽입 할 색인이 하나만 있으므로 삽입 성능이 향상됩니다.

겸손한 의견으로는 슬램 덩크가 아닙니다. 실제 키를 사용할 수있을 때 자연 키를 사용하는 것이 더 쉬워서 사용하는 편이 좋으며 단점은 대부분의 경우 실제로 중요하지 않습니다.


@Conrad : ON UPDATE CASCADE를 지원하는 엔진이 있으면 PITA가 아니라고 지적합니다. 코드 측면에서는 문제가되지 않습니다. 유일한 실제 문제는 업데이트가 얼마나 광범위하고 핵심이 얼마나 넓은 지입니다. 이메일 주소는 다소 많을 수 있지만 2 자리 국가 코드의 PK에 대한 CASCADE UPDATE는 큰 문제가 아닙니다.
Matthew Wood

5
@Matthew IMHO는 여전히 PITA입니다. 예를 들어, 국가 테이블을 설계 할 때이를 참조하는 테이블이 두 개 뿐이고 더 크지 않다고 가정하지만 시간이 지남에 따라 수십만 개의 레코드가있는 20 개의 테이블이되었습니다. 일부 참조없이 일부. 이로 인해 단일 논리 쓰기가 수만 번의 쓰기가되고, 테이블을 추가 할 때 누군가가 참조를 잊었 기 때문에 모든 테이블에이를 작성하지는 않습니다. 이것은 내가 당신을 놀리지 않는 2 문자 국가 코드 테이블에서 나에게 일어난 정확한 일입니다.
Conrad Frix

@Wood & Conrad : 최악의 경우는 내장 DB 지원이없는 경우입니다. 그런 다음 게시 된 참조가있는 모든 테이블에 대해 코드를 작성해야하며 이는 버그가 들어가기위한 고통과 문입니다. 계단식으로 각 테이블에 하나의 절을 추가해야합니다. 큰일.
Jay

2
이점 1과 3은 조기 최적화이며, 이점 2는 매우 작은 이점이며 모든 적절한 쿼리 도구로 완전히 극복됩니다.
애쉬

4
@Ash : "최적화"와 "최적 최적화"의 차이점입니다. 그러나 동일한 추론으로 내가 언급 한 모든 단점은 조기 최적화라는 것입니다. 그래서 어디로 떠나나요? # 2와 관련하여 임시 쿼리를 수행하려고 할 때 추가 조인을 입력하면 큰 고통을 겪습니다. 레코드에는 종종 여러 개의 외래 키가 있으므로 이해하기 쉬운 데이터를 얻으려면 여러 개의 조인이 필요할 수 있습니다. "괜찮은 쿼리 도구"라는 말은 사용자가 말하지 않고보고 싶은 데이터를 파악하고 마술처럼 조인을 수행하는 것을 의미하는 경우 어떻게 작동하는지 확인하고 싶습니다.
Jay

12

꽤 나쁘다. 일부 전자 메일 공급자가 업무를 중단했다고 가정합니다. 그런 다음 사용자는 전자 메일을 변경하려고합니다. 전자 메일을 기본 키로 사용한 경우 사용자의 모든 외래 키는 해당 전자 메일을 복제하여 변경하기가 어렵습니다 ...

... 그리고 성능 고려 사항에 대해서도 이야기하지 않았습니다.


이메일 주소를 변경하면 어떻게 중복이 발생합니까? 사용자 A가 전자 메일 주소를 변경 한 후 사용자 B가 전자 메일을 사용자 A의 이전 값과 동일하게 변경하지 않으면 업데이트가 순서대로 수행되지 않습니다. 원격으로 가능하다고 생각합니다.
Jay

2
외래 키 참조에는 정의에 따라 참조하는 행의 기본 키 값이 포함됩니다. 다르게 말하면 기본 키의 값을 복제합니다. (따라서 중복은 값을 변경하여 발생하는 것이 아닙니다. 그러나이 중복과 그로 인한 제약으로 인해 변경이 더 어렵습니다).
meriton

5
"일부 이메일 제공 업체가 업무를 중단했다고 가정합니다."+1
레디

이것은 문제가되지 않습니다. 이 문제를 해결하기 위해 외래 키 계단식이 존재합니다. 사용자가 전자 메일을 변경하면 변경 내용이 전자 메일을 외래 키로 사용하여 모든 테이블에 캐스케이드됩니다.
Rafa

1
@rafa, 계단식 업데이트를 사용하고 전체 공급자가 사업을 중단하거나 이름을 변경하면 (Yahoo.com이 HooYa.com이 됨)이 단계가 진행되는 동안 몇 시간 또는 며칠 동안 데이터베이스가 모든 사용자에게 고정됩니다. 시스템을 통해. 그것은 매우 유효한 문제입니다 (그리고 많은 양의 데이터가 있고 키가 변경 될 가능성이있는 경우 계단식 업데이트를 사용하는 것이 좋지 않은 이유입니다)
HLGEM

12

이것이 설정에 문제가 될 수 있는지는 모르겠지만 RDBMS에 따라 열의 값은 대소 문자를 구분할 수 있습니다 . PostgreSQL 문서는 "열을 UNIQUE 또는 PRIMARY KEY로 선언하면 암시 적으로 생성 된 인덱스는 대소 문자를 구분합니다"라고 말합니다. 즉, 이메일을 기본 키로 사용하여 테이블에서 검색을위한 사용자 입력을 허용하고 사용자가 "John@Doe.com"을 제공하면 "john@doe.com"을 찾을 수 없습니다.


7
이와 관련하여 John@Doe.com과 john@Doe.com은 동일한 사서함이거나 다른 사서함 일 수 있으며 사용자에게 말할 방법이 없다고 언급 할 가치가 있습니다. 민감한.
telent

이는 기본 키로 사용되어야하는지 여부보다는 전자 메일 주소 의 고유성 시행에서 보다 일반적인 문제입니다 . 동일한 문제가 어느 쪽이든 있습니다. 여전히 유용한 포인트이므로 +1

11

전자 메일 주소가 개인 정보로 간주 될 수있는 가능한 문제에 대해 언급 한 사람은 없습니다. 이메일 주소가 기본 키인 경우 프로필 페이지 URL은 다음과 같습니다 ..../Users/my@email.com. 사용자의 이메일 주소를 공개하지 않으려면 어떻게해야합니까? URL을 만들려면 고유 한 정수 값으로 사용자를 식별하는 다른 방법을 찾아야합니다 ..../Users/1. 그런 다음 결국 고유 한 정수 값으로 끝납니다.


9

상기 논리적 수준 , 이메일은 자연의 열쇠입니다. 상기 물리적 수준, 관계형 데이터베이스를 사용하는 주어진 자연 키는 기본 키로 잘 맞지 않습니다. 그 이유는 주로 다른 사람들이 언급 한 성능 문제 때문입니다.

이러한 이유로 디자인을 조정할 수 있습니다. 자연 키는 대체 키 (UNIQUE, NOT NULL)가되며, 대리 / 인공 / 기술 키 를 기본 키로 사용하며,이 경우 자동 증분이 될 수 있습니다.

systempuntoout가 물었다.

누군가 이메일 주소를 변경하려면 어떻게해야합니까? 외래 키도 모두 변경 하시겠습니까?

그것이 계단식 입니다.

숫자 대체 키를 기본 키로 사용하는 또 다른 이유는 플랫폼에서 인덱싱이 작동하는 방식과 관련이 있습니다. 예를 들어 MySQL의 InnoDB에서 테이블의 모든 인덱스에는 기본 키가 미리 추가되어 있으므로 PK를 가능한 한 작게 (속도와 크기를 위해) 원합니다. 이와 관련하여 InnoDB는 기본 키가 순서대로 저장 될 때 더 빠르며 문자열이 도움이되지 않습니다.

문자열을 대체 키로 사용할 때 고려해야 할 또 다른 사항은 원하는 실제 문자열의 해시를 사용하면 더 빠를 수 있으며 일부 문자의 대소 문자를 건너 뛸 수 있다는 것입니다. (방금 말한 것을 확인하기 위해 참조를 찾는 동안 실제로 여기에 도착했습니다.


5

예, 사용자가 이메일 주소를 업데이트하려고하기 때문에 잘못된 기본 키입니다.


1
캐스케이드가 문제가되지 않는다고 생각했습니다.
malhal

4

예, 대신 정수를 사용하는 것이 좋습니다. 이메일 열을 고유 제한 조건으로 설정할 수도 있습니다.

이처럼 :

CREATE TABLE myTable(
    id integer primary key,
    email text UNIQUE
);

8
왜 "더 나은"가요? 이유나 출처가 있습니까?
Sjoerd

20
그것에 대해 자세히 설명해 주시겠습니까?
Sjoerd

3

정수 기본 키가 더 좋은 또 다른 이유는 다른 테이블에서 전자 메일 주소를 참조 할 때입니다. 주소 자체가 기본 키인 경우 다른 테이블에서 해당 키를 키로 사용해야합니다. 따라서 이메일 주소를 여러 번 저장합니다.


3

나는 postgres에 익숙하지 않습니다. 기본 키는 큰 주제입니다. 이 사이트 (stackoverflow.com)에서 훌륭한 질문과 답변을 보았습니다.

숫자 기본 키를 사용하고 전자 메일 열에 UNIQUE INDEX를 사용하면 성능이 향상 될 수 있다고 생각합니다. 이메일의 길이는 다양하며 기본 키 색인에 적합하지 않을 수 있습니다.

여기여기에 약간의 독서 .


3

개인적으로 데이터베이스를 설계 할 때 기본 키에 대한 정보를 사용하지 않습니다. 나중에 정보를 변경해야 할 가능성이 높기 때문입니다. 기본 키를 제공하는 유일한 이유는 클라이언트 측에서 대부분의 SQL 작업을 수행하는 것이 편리하고 그에 대한 나의 선택은 항상 자동 증가 정수 유형이었습니다.


2

동료가 맞습니다. 기본 키에 자동 증가 정수를 사용하십시오.

응용 프로그램 수준에서 전자 메일 고유성을 구현하거나 전자 메일 주소 열을 고유 한 것으로 표시하고 해당 열에 색인을 추가 할 수 있습니다.

필드를 고유 한 이름으로 추가하면 조인 및 외래 키 제약 조건 검사를 수행 할 때가 아니라 해당 테이블에 삽입 할 때만 문자열 비교가 필요합니다.

물론 데이터베이스 수준에서 응용 프로그램에 제약 조건을 추가하면 앱이 융통성이 없어 질 수 있습니다. 응용 프로그램이 고유하거나 비어 있지 않아야하기 때문에 필드를 "고유"또는 "널이 아님"으로 만들기 전에 항상 적절한 고려를하십시오.


1
"응용 프로그램에 요구 사항 x가 필요하기 때문에 요구 사항 x를 구현하기 전에 항상 적절한 고려를하십시오." -꽤 오랫동안 읽은 최악의 조언.
언젠가

나는 당신의 "인수"에 대해 확신하지 못합니다. 실제 생활에서 일부 필수 데이터 (예 : 전화 번호)를 즉시 사용할 수없는 상황이 종종있을 수 있습니다. 이러한 필드가 데이터베이스에서 NOT NULL로 표시되면 사용자는 데이터를 비워 두지 않고 더미 필드 (예 : 123)로 데이터를 오염시켜야합니다. 응용 프로그램이 제약 조건을 처리하게하는 것이 더 실용적입니다 (이 경우 응용 프로그램은 빈 필드를 작업 항목으로 표시 할 수 있음).
jrharshath

5
"널이 아닌"필드를 정의하는 것은 신중하게 수행해야한다는 데 동의합니다. "항상 고객의 전화 번호가 필요합니다"와 같은 요구 사항을 신중하게 고려해야합니다. 지금 전화 번호를 모르더라도 나중에 다시 가져와도 고객 레코드를 작성하는 것은 바람직하지 않을 수 있습니다. 그러나 "이 필드는 고유해야합니다"는 다른 범주입니다. "두 명의 직원이 동일한 사회 보장 번호를 갖는 것은 괜찮습니다. 나중에 알아 보겠습니다." 데이터를 어떻게 정리 하시겠습니까?
Jay

1
늑대가 되십시오 : 나는 자신의 전화 번호가없는 여자를 한 번 알고있었습니다. 그럼 어떻게합니까?
David Thornley

@DavidThornley 더 많은 운동을하거나 친숙한 태도를 취해야 할 것 같습니다.
Philip Schiff

2

GUID를 기본 키로 사용하십시오. INSERT를 수행 할 때 프로그램에서 GUID를 생성 할 수 있으며 기본 키가 무엇인지 찾기 위해 서버에서 응답을받을 필요가 없습니다. 또한 고유 한 전체 테이블과 데이터베이스가 될 것이며 언젠가 테이블을 자르고 자동 증분이 1로 재설정되면 어떻게 될지 걱정할 필요가 없습니다.


2
성능에 거의 관심이 없다면 GUID를 사용하십시오. 확장이 필요한 시스템을 구축하는 경우 No-No # 1입니다
Micah


3
진정한 Microsoft-Kool-Aid-drinking 방식으로 말했다!
게리 챔버

2

나는 이것이 약간의 늦은 항목이라는 것을 알고 있지만 사람들이 이메일 계정을 포기하고 서비스 제공 업체가 다른 사람이 사용할 수 있도록 주소를 복구한다고 덧붙이고 싶습니다.

@HLGEM이 지적했듯이 "Jsmith@somecompany.com은 1 년 후 John Smith와 2 년 후 Julia Smith에 쉽게 속할 수 있습니다." 이 경우 John Smith가 서비스를 원할 경우 그의 이메일 주소 사용을 거부하거나 Julia Smith와 관련된 모든 기록을 삭제해야합니다.

현지 법에 따라 기록을 삭제해야하고 사업의 재무 이력과 관련이있는 경우 뜨거운 물에서 자신을 찾을 수 있습니다.

따라서 이메일 주소, 번호판 등과 같은 데이터를 기본 키로 사용하지는 않을 것입니다.이 키는 고유하지 않더라도 처리 할 수없는 몇 가지 흥미로운 과제를 제공 할 수 있기 때문입니다.


2

적용 가능한 데이터 규제 법률을 고려해야 할 수도 있습니다. 이메일은 개인 정보이며, 사용자가 예를 들어 GDPR에 따라 EU 시민 인 경우 기록에서 정보를 삭제하도록 지시 할 수 있습니다 (귀하가 거주하는 국가에 관계없이 적용됨).

참조 무결성이나 감사와 같은 기록적인 이유로 레코드 자체를 데이터베이스에 보관해야하는 경우 대리 키를 사용하면 모든 개인 데이터 필드를 NULL로 지정할 수 있습니다. 개인 데이터가 기본 키라면 쉽지 않습니다.


1

정수 기본 키를 사용하여 성능을 향상시킬 수 있습니다.


1

정수 기본 키를 사용해야합니다. 전자 메일 열이 고유해야하는 경우 해당 열에 고유 색인을 설정하지 않는 이유는 무엇입니까?


1

기본 키로 int 값이 아닌 값을 사용하면 큰 데이터에서 삽입 및 검색 속도가 매우 느려집니다.


1
아니오, 생성 된 기본 키와 이메일 주소에 각각 하나씩 두 개의 고유 인덱스 가 필요하므로 삽입 속도느려집니다 .
a_horse_with_no_name

1

기본 키는 정적 속성으로 선택해야합니다. 이메일 주소는 고정적이지 않으며 여러 후보가 공유 할 수 있으므로 기본 키로 사용하는 것은 좋지 않습니다. 또한 이메일 주소는 일반적으로 특정 길이의 문자열이며 [len (email_address)> len (unique_id)]를 사용하려는 고유 ID보다 클 수 있으므로 더 많은 공간이 필요하며 최악의 경우 외래 키로 여러 번 저장됩니다 . 결과적으로 성능이 저하됩니다.


0

테이블에 따라 다릅니다. 표의 행이 이메일 주소를 나타내는 경우 이메일이 가장 좋은 ID입니다. 그렇지 않은 경우 이메일은 좋은 ID가 아닙니다.


0

이메일이 고유해야하는 문제 일 경우 해당 열을 사용하여 고유 한 인덱스를 만들면됩니다.


0

이메일은 고유 한 인덱스 후보이지만 기본 키에는 적합하지 않습니다. 기본 키인 경우 연락처의 이메일 주소를 변경할 수 없습니다. 조인 쿼리도 느려질 것이라고 생각합니다.


0

이메일 주소를 기본 키로 사용하지 말고 이메일을 고유하게 유지하지만 기본 키로 사용하지 말고 사용자 ID 또는 사용자 이름을 기본 키로 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.