자동 증가 숫자와 비교할 때 이메일 주소가 기본에 적합하지 않습니까?
우리 웹 애플리케이션은 시스템에서 이메일 주소가 고유해야합니다. 그래서 이메일 주소를 기본 키로 사용하려고 생각했습니다. 그러나 제 동료는 문자열 비교가 정수 비교보다 느릴 것이라고 제안합니다.
이메일을 기본 키로 사용하지 않는 것이 합당한 이유입니까?
우리는를 사용하고 PostgreSQL
있습니다.
답변
문자열 비교는 int 비교보다 느립니다. 그러나 전자 메일 주소를 사용하여 데이터베이스에서 사용자를 검색하는 경우에는 문제가되지 않습니다. 조인이 여러 개인 복잡한 쿼리가 있는지 여부는 중요합니다.
여러 테이블에 사용자에 대한 정보를 저장하면 users 테이블의 외래 키가 전자 메일 주소가됩니다. 즉, 전자 메일 주소를 여러 번 저장합니다.
답변
또한 이메일은 고유 한 분야를 만들기에는 나쁜 선택이며 이메일 주소를 공유하는 사람과 소규모 기업도 있습니다. 전화 번호와 마찬가지로 이메일도 재사용 할 수 있습니다. Jsmith@somecompany.com은 1 년 후 John Smith와 2 년 후 Julia Smith에 쉽게 속할 수 있습니다.
이메일의 또 다른 문제점은 이메일이 자주 변경된다는 것입니다. 키를 사용하여 다른 테이블에 조인하는 경우 전체 클라이언트 회사가 전자 메일을 변경하면 다른 성능을 발휘할 수있는 다른 테이블도 업데이트해야합니다.
답변
기본 키는 고유 하고 일정 해야합니다.
이메일 주소는 계절에 따라 변경됩니다. 조회에는 보조 키로 유용하지만 기본 키에는 적합하지 않습니다.
답변
이메일 주소를 기본 키로 사용하는 단점 :
-
조인을 수행 할 때 속도가 느려집니다.
-
게시 된 외래 키가있는 다른 레코드는 더 큰 값을 가지므로 더 많은 디스크 공간을 차지합니다. (오늘 디스크 공간 비용을 감안하면 레코드를 읽는 데 시간이 오래 걸리는 경우를 제외하고는 사소한 문제 일 수 있습니다. # 1 참조)
-
이메일 주소가 변경 될 수 있으며,이를 외래 키로 사용하는 모든 레코드가 업데이트됩니다. 이메일 주소는 자주 변경되지 않으므로 성능 문제는 미미합니다. 더 큰 문제는 반드시 제공해야한다는 것입니다. 코드를 작성해야하는 경우, 이것은 더 많은 작업이며 버그의 가능성을 소개합니다. 데이터베이스 엔진이 “업데이트 캐스케이드”를 지원하는 경우 사소한 문제입니다.
이메일 주소를 기본 키로 사용하는 이점 :
-
일부 조인을 완전히 제거 할 수 있습니다. “마스터 레코드”에서 필요한 모든 이메일 주소 인 경우 추상 정수 키를 사용하여 검색하려면 조인을 수행해야합니다. 키가 이메일 주소 인 경우 이미 가지고 있으며 가입 할 필요가 없습니다. 이것이 당신에게 도움이되는지 여부는이 상황이 얼마나 자주 발생하는지에 달려 있습니다.
-
임시 쿼리를 수행 할 때 사람은 어떤 마스터 레코드가 참조되는지 쉽게 알 수 있습니다. 데이터 문제를 추적 할 때 큰 도움이 될 수 있습니다.
-
어쨌든 거의 확실하게 전자 메일 주소에 대한 색인이 필요하므로 기본 키로 만들면 하나의 색인이 제거되므로 이제 삽입 할 색인이 하나만 있으므로 삽입 성능이 향상됩니다.
겸손한 의견으로는 슬램 덩크가 아닙니다. 실제 키를 사용할 수있을 때 자연 키를 사용하는 것이 더 쉬워서 사용하는 편이 좋으며 단점은 대부분의 경우 실제로 중요하지 않습니다.
답변
꽤 나쁘다. 일부 전자 메일 공급자가 업무를 중단했다고 가정합니다. 그런 다음 사용자는 전자 메일을 변경하려고합니다. 전자 메일을 기본 키로 사용한 경우 사용자의 모든 외래 키는 해당 전자 메일을 복제하여 변경하기가 어렵습니다 …
… 그리고 성능 고려 사항에 대해서도 이야기하지 않았습니다.
답변
이것이 설정에 문제가 될 수 있는지는 모르겠지만 RDBMS에 따라 열의 값은 대소 문자를 구분할 수 있습니다 . PostgreSQL 문서는 “열을 UNIQUE 또는 PRIMARY KEY로 선언하면 암시 적으로 생성 된 인덱스는 대소 문자를 구분합니다”라고 말합니다. 즉, 이메일을 기본 키로 사용하여 테이블에서 검색을위한 사용자 입력을 허용하고 사용자가 “John@Doe.com”을 제공하면 “john@doe.com”을 찾을 수 없습니다.
답변
전자 메일 주소가 개인 정보로 간주 될 수있는 가능한 문제에 대해 언급 한 사람은 없습니다. 이메일 주소가 기본 키인 경우 프로필 페이지 URL은 다음과 같습니다 ..../Users/my@email.com
. 사용자의 이메일 주소를 공개하지 않으려면 어떻게해야합니까? URL을 만들려면 고유 한 정수 값으로 사용자를 식별하는 다른 방법을 찾아야합니다 ..../Users/1
. 그런 다음 결국 고유 한 정수 값으로 끝납니다.