[SQL] 기본 키를 사용하여 이메일 주소?
SQL기본 키를 사용하여 이메일 주소?
자동으로 숫자를 증가에 비해 이메일 주소는 차에 대한 나쁜 후보인가?
우리의 웹 응용 프로그램은 시스템에서 고유해야하는 이메일 주소를 필요로한다. 그래서, 기본 키로 이메일 주소를 사용하여 생각했다. 하지만 내 동료는 문자열 비교는 정수 비교보다 느린 것 제안합니다.
기본 키로 이메일을 사용하지 않는 것이 타당한 이유인가?
우리는 PostgreSQL을 사용하고 있습니다.
해결법
-
==============================
1.문자열 비교 INT 비교보다 느립니다. 당신은 단순히 전자 메일 주소를 사용하여 데이터베이스에서 사용자를 검색 할 경우,이 문제가되지 않습니다. 여러 조인을 사용하면 복잡한 쿼리를이 경우에 상관 없습니다.
문자열 비교 INT 비교보다 느립니다. 당신은 단순히 전자 메일 주소를 사용하여 데이터베이스에서 사용자를 검색 할 경우,이 문제가되지 않습니다. 여러 조인을 사용하면 복잡한 쿼리를이 경우에 상관 없습니다.
당신이 여러 테이블에서 사용자에 대한 정보를 저장하는 경우, 사용자 테이블에 외래 키는 전자 메일 주소가됩니다. 그 말은 당신은 전자 메일 주소를 여러 번 저장하는 것이.
-
==============================
2.나는 또한 이메일에 고유 한 필드를 만들 수있는 나쁜 선택이라고 지적한다, 사람과 이메일 주소를 공유하더라도 중소기업이있다. 그리고 전화 번호와 같은 이메일은 다시 사용할 수 있습니다. Jsmith@somecompany.com 쉽게 2 년 후 존 스미스 1 년 줄리아 스미스에 속할 수 있습니다.
나는 또한 이메일에 고유 한 필드를 만들 수있는 나쁜 선택이라고 지적한다, 사람과 이메일 주소를 공유하더라도 중소기업이있다. 그리고 전화 번호와 같은 이메일은 다시 사용할 수 있습니다. Jsmith@somecompany.com 쉽게 2 년 후 존 스미스 1 년 줄리아 스미스에 속할 수 있습니다.
이메일의 또 다른 문제는 그들이 자주 변경되는 것입니다. 당신이 열쇠로 그와 다른 테이블에 가입하는 경우 전체 클라이언트 회사가 자신의 이메일을 변경하는 경우에, 당신은 꽤 성능 저하 될 수 있습니다뿐만 아니라 다른 테이블을 업데이트해야합니다 (내가 본 일이.)
-
==============================
3.기본 키는 고유하고 일정해야
기본 키는 고유하고 일정해야
이메일 주소는 계절과 같이 변경합니다. 조회에 대한 보조 키,하지만 기본 키에 대한 빈약 한 선택으로 유용합니다.
-
==============================
4.기본 키와 같은 이메일 주소를 사용의 단점 :
기본 키와 같은 이메일 주소를 사용의 단점 :
기본 키로 이메일 주소를 사용의 장점 :
내 소견에서는 슬램 덩크 어느 쪽이든 아니다. 나는 그들이 함께 일하는 그냥 쉽게이기 때문에 실제 하나를 사용할 수있을 때 자연 키를 사용하는 것을 선호하는 경향이 있고, 단점은 대부분의 경우 문제가 많은 정말하지 않는 경향이.
-
==============================
5.그것은 꽤 나쁘다. 일부 전자 메일 공급자가 폐업 가정합니다. 그런 다음 사용자는 전자 메일을 변경하려는 것입니다. 당신은 기본 키와 같은 전자 메일을 사용하는 경우, 사용자에 대한 모든 외래 키는 변화에 굉장히 열심히 그것을 만드는, 그 전자 메일을 중복 것입니다 ...
그것은 꽤 나쁘다. 일부 전자 메일 공급자가 폐업 가정합니다. 그런 다음 사용자는 전자 메일을 변경하려는 것입니다. 당신은 기본 키와 같은 전자 메일을 사용하는 경우, 사용자에 대한 모든 외래 키는 변화에 굉장히 열심히 그것을 만드는, 그 전자 메일을 중복 것입니다 ...
... 그리고 난 성능 고려 사항에 대해 이야기를 시작하지 않았습니다.
-
==============================
6.즉 셋업에서 문제가 될 수 있을지 모르겠지만, 당신의 RDBMS에 따라 컬럼의 값은 대소 문자를 구별 할 수도있다. PostgreSQL의 문서 말 : "당신은 UNIQUE 또는 PRIMARY KEY로 열을 선언 할 경우, 암시 적으로 생성 된 인덱스는 대소 문자를 구분합니다." 즉, 기본 키와 같은 이메일과 테이블의 검색에 대한 사용자 입력을 받아, 사용자는, 당신은 "john@doe.com"찾을 수 없습니다 "John@Doe.com"를 제공합니다.
즉 셋업에서 문제가 될 수 있을지 모르겠지만, 당신의 RDBMS에 따라 컬럼의 값은 대소 문자를 구별 할 수도있다. PostgreSQL의 문서 말 : "당신은 UNIQUE 또는 PRIMARY KEY로 열을 선언 할 경우, 암시 적으로 생성 된 인덱스는 대소 문자를 구분합니다." 즉, 기본 키와 같은 이메일과 테이블의 검색에 대한 사용자 입력을 받아, 사용자는, 당신은 "john@doe.com"찾을 수 없습니다 "John@Doe.com"를 제공합니다.
-
==============================
7.아무도 이메일 주소는 개인으로 간주 될 수있는 가능한 문제를 언급 한 것 같다. 이메일 주소가 기본 키의 경우는, 프로필 페이지의 URL은 대부분 ... / Users/my@email.com 같이 보일 것입니다. 당신은 사용자의 이메일 주소를 노출하지 않으려면 어떻게해야하나요? 당신은 URL이 / 사용자 / 1 .... 좋아 할 가능성이 고유 한 정수 값으로, 사용자를 식별하는 다른 방법을 찾아야한다. 그럼 당신은 결국 고유 한 정수 값으로 끝낼 것입니다.
아무도 이메일 주소는 개인으로 간주 될 수있는 가능한 문제를 언급 한 것 같다. 이메일 주소가 기본 키의 경우는, 프로필 페이지의 URL은 대부분 ... / Users/my@email.com 같이 보일 것입니다. 당신은 사용자의 이메일 주소를 노출하지 않으려면 어떻게해야하나요? 당신은 URL이 / 사용자 / 1 .... 좋아 할 가능성이 고유 한 정수 값으로, 사용자를 식별하는 다른 방법을 찾아야한다. 그럼 당신은 결국 고유 한 정수 값으로 끝낼 것입니다.
-
==============================
8.논리적 수준에서 이메일은 자연의 열쇠입니다. 물리적 수준에서 관계형 데이터베이스를 사용하는 주어진 자연 키는 기본 키로 잘 맞지 않습니다. 그 이유는 주로 다른 사람에 의해 언급 된 성능 문제입니다.
논리적 수준에서 이메일은 자연의 열쇠입니다. 물리적 수준에서 관계형 데이터베이스를 사용하는 주어진 자연 키는 기본 키로 잘 맞지 않습니다. 그 이유는 주로 다른 사람에 의해 언급 된 성능 문제입니다.
이 때문에, 디자인이 적용 할 수 있습니다. 자연 키는 다른 키 (UNIQUE, NOT NULL)이되고, 당신은 귀하의 경우 자동 증가 될 수있는 기본 키와 같은 대리 / 인공 / 기술 키를 사용합니다.
systempuntoout 물었다
무엇을 계단식의를위한 것이라고.
기본 키가 인덱싱 플랫폼에서 작동하는 방법과 관련 될 때 또 다른 이유는 숫자 대리 키를 사용합니다. MySQL의의 이노에서, 예를 들어, 테이블의 모든 인덱스는 PK가 가능한 (속도의 크기의 연고로) 작게 할 수 할 수 있도록 기본 키가 그들에게 사전에 보류합니다. 기본 키가 순차적으로 저장되고, 문자열이 도움이되지 것이다 때 또한이 관련, InnoDB는 빠릅니다.
다른 키와 같은 문자열을 사용할 때 고려해야 할 또 다른 것은, 당신이 어떤 글자의 대문자와 소문자를 같은 것들을 건너 뛰기, 빨리 될 수하고자하는 실제 문자열의 해시를 사용하여 해당. (가만히보고 ... 내가 방금 말한 것을 확인에 대한 참조를 찾는 동안 나는 실제로 여기 도착)
-
==============================
9.대신 정수를 사용하는 경우 예, 좋습니다. 당신은 또한 고유 제한 조건 등의 이메일 열을 설정할 수 있습니다.
대신 정수를 사용하는 경우 예, 좋습니다. 당신은 또한 고유 제한 조건 등의 이메일 열을 설정할 수 있습니다.
이 같은 :
CREATE TABLE myTable( id integer primary key, email text UNIQUE );
-
==============================
10.예, 사용자가 자신의 이메일 주소를 업데이트 할 것이기 때문에 잘못된 기본 키입니다.
예, 사용자가 자신의 이메일 주소를 업데이트 할 것이기 때문에 잘못된 기본 키입니다.
-
==============================
11.당신이 다른 테이블에 이메일 주소를 참조 할 때 정수 기본 키가 더 나은 또 다른 이유이다. 주소 자체가 기본 키는 다른 테이블에있는 다음의 경우 당신은 키로 사용합니다. 그래서 당신은 이메일 주소를 여러 시간을 저장합니다.
당신이 다른 테이블에 이메일 주소를 참조 할 때 정수 기본 키가 더 나은 또 다른 이유이다. 주소 자체가 기본 키는 다른 테이블에있는 다음의 경우 당신은 키로 사용합니다. 그래서 당신은 이메일 주소를 여러 시간을 저장합니다.
-
==============================
12.나는 포스트 그레스에 너무 익숙하지입니다. 기본 키가 큰 주제입니다. 이 사이트 (stackoverflow.com)에서 눈부신 질문과 답변을 보았다.
나는 포스트 그레스에 너무 익숙하지입니다. 기본 키가 큰 주제입니다. 이 사이트 (stackoverflow.com)에서 눈부신 질문과 답변을 보았다.
난 당신이 숫자 기본 키를함으로써 더 나은 성능을 가질 수있다 생각하고 이메일 컬럼에 UNIQUE INDEX를 사용합니다. 이메일은 길이 변화 경향 및 기본 키 인덱스에 대한 적절한되지 않을 수 있습니다.
일부 여기와 여기에 읽기.
-
==============================
13.데이터베이스를 설계 할 때 매우 가능성이 나중에 정보를 변경해야 할 수도 있기 때문에 개인적으로, 나는, 기본 키에 대한 정보를 사용하지 않습니다. 나는 기본 키가 제공하는 유일한 이유는, 클라이언트 측에서 대부분의 SQL 작업을 할 수있는 편리하고, 그 내 선택은 항상 자동 증가 정수형하고있다.
데이터베이스를 설계 할 때 매우 가능성이 나중에 정보를 변경해야 할 수도 있기 때문에 개인적으로, 나는, 기본 키에 대한 정보를 사용하지 않습니다. 나는 기본 키가 제공하는 유일한 이유는, 클라이언트 측에서 대부분의 SQL 작업을 할 수있는 편리하고, 그 내 선택은 항상 자동 증가 정수형하고있다.
-
==============================
14.귀하의 동료 권리 : 사용 기본 키의 autoincrementing 정수입니다.
귀하의 동료 권리 : 사용 기본 키의 autoincrementing 정수입니다.
당신은 응용 프로그램 수준에서 어느 이메일 고유성을 구현하거나 고유 한 귀하의 이메일 주소 열을 표시하고 해당 컬럼에 인덱스를 추가 할 수 있습니다.
독특한으로 필드를 추가하면 수행 조인 및 외래 키 제약 조건을 검사 할 때 해당 테이블에 삽입, 그리고시에만 문자열 비교를 요할 것이다.
물론, 당신은 데이터베이스 수준에서 응용 프로그램에 어떤 제약 조건을 추가하면 앱이 유연성 질 수 있습니다 점에 유의해야합니다. 당신은 어떤 분야 "독특한"또는 응용 프로그램이 고유하거나 비어 있어야해서 "NOT NULL"하기 전에 항상 충분히 고려.
-
==============================
15.당신이 INSERT를하고 당신이 기본 키가 무엇인지 알아 보려면 서버에서 응답을받을 필요가 없을 때 ... 기본 키로 당신이 당신의 프로그램을 생성 할 수 방법을 GUID를 사용합니다. 또한 독특한 전체의 테이블 및 데이터베이스 될 것입니다 그리고 당신은 당신이 언젠가 테이블을 절단하고 자동 증가 1로 리셋을 얻는 경우에 어떻게되는지에 대해 걱정할 필요가 없습니다.
당신이 INSERT를하고 당신이 기본 키가 무엇인지 알아 보려면 서버에서 응답을받을 필요가 없을 때 ... 기본 키로 당신이 당신의 프로그램을 생성 할 수 방법을 GUID를 사용합니다. 또한 독특한 전체의 테이블 및 데이터베이스 될 것입니다 그리고 당신은 당신이 언젠가 테이블을 절단하고 자동 증가 1로 리셋을 얻는 경우에 어떻게되는지에 대해 걱정할 필요가 없습니다.
-
==============================
16.나는이 늦은 항목의 조금 알고하지만 난 사람들이 이메일 계정을 포기하고 서비스 제공 업체를 사용하는 다른 사람을 허용 주소를 복구하는 것을 추가하고 싶습니다.
나는이 늦은 항목의 조금 알고하지만 난 사람들이 이메일 계정을 포기하고 서비스 제공 업체를 사용하는 다른 사람을 허용 주소를 복구하는 것을 추가하고 싶습니다.
@HLGEM는 "Jsmith@somecompany.com 쉽게 속하는 존 스미스 1 년 줄리아 스미스 2 년 후에."지적 이 경우 존 스미스는 어느 줄리아 스미스에 관한 모든 기록을 자신의 이메일 주소를 사용하거나 삭제하는 것을 거부해야 서비스를하고자한다.
당신이 레코드를 삭제해야하고 그들이 현지 법에 따라 사업의 금융 역사에 관련된 경우에 당신은 뜨거운 물에 자신을 찾을 수 있습니다.
나는 차 키와 같은 등 이메일 주소, 번호판, 같은 데이터를 사용하지 않을 것입니다 그래서 그들이 당신의 통제 밖에있는 당신이 처리 할 시간이 없을 수 있다는 흥미로운 도전을 제공 할 수있는 것 같다 방법 독특한 상관없이 때문이다.
-
==============================
17.당신은 기본 키 정수를 사용하여 성능을 높일 수 있습니다.
당신은 기본 키 정수를 사용하여 성능을 높일 수 있습니다.
-
==============================
18.당신은 정수 기본 키를 사용해야합니다. 당신이 고유하게 이메일 열을 필요로하는 경우, 당신은 왜 단순히 열에 고유 색인을 설정하지?
당신은 정수 기본 키를 사용해야합니다. 당신이 고유하게 이메일 열을 필요로하는 경우, 당신은 왜 단순히 열에 고유 색인을 설정하지?
-
==============================
19.당신이 기본 키 같은 비 int 값이있는 경우 다음 삽입과 취득에서는 큰 데이터에 매우 느려집니다.
당신이 기본 키 같은 비 int 값이있는 경우 다음 삽입과 취득에서는 큰 데이터에 매우 느려집니다.
-
==============================
20.일차 키는 정적 속성을 선택해야한다. 이메일 주소가 고정되지 않고 다수의 후보가 공유 할 수 있기 때문에 그것은 기본 키로 사용할 수있는 좋은 아이디어가되지 않도록. 또한 이메일 주소는 우리가 사용하고자하는 고유 ID보다 클 수 있습니다 일반적으로 특정 길이의 문자열 [LEN (EMAIL_ADDRESS)> LEN (UNIQUE_ID)]는 외부 키로 더 많은 공간 심지어 최악가 저장되어 여러 번 필요하므로 . 그리고 결과적으로는 성능을 저하 이어질 것입니다.
일차 키는 정적 속성을 선택해야한다. 이메일 주소가 고정되지 않고 다수의 후보가 공유 할 수 있기 때문에 그것은 기본 키로 사용할 수있는 좋은 아이디어가되지 않도록. 또한 이메일 주소는 우리가 사용하고자하는 고유 ID보다 클 수 있습니다 일반적으로 특정 길이의 문자열 [LEN (EMAIL_ADDRESS)> LEN (UNIQUE_ID)]는 외부 키로 더 많은 공간 심지어 최악가 저장되어 여러 번 필요하므로 . 그리고 결과적으로는 성능을 저하 이어질 것입니다.
-
==============================
21.당신은 모든 적용 가능한 데이터 규제 법안을 고려할 필요가있다. 이메일은 개인 정보이며, 사용자가 GDPR에서 다음 예를 들어 EU 시민을 경우 그들은 (이에 관계없이 당신이 기반이되는 국가의 적용 기억) 당신이 당신의 기록에서 자신의 정보를 삭제하도록 지시 할 수 있습니다.
당신은 모든 적용 가능한 데이터 규제 법안을 고려할 필요가있다. 이메일은 개인 정보이며, 사용자가 GDPR에서 다음 예를 들어 EU 시민을 경우 그들은 (이에 관계없이 당신이 기반이되는 국가의 적용 기억) 당신이 당신의 기록에서 자신의 정보를 삭제하도록 지시 할 수 있습니다.
당신은 NULL로 모든 개인 데이터 필드를 당신을 수 있도록 해주는 대리 키를 사용하여, 참조 무결성 또는 감사와 같은 역사적인 이유로 데이터베이스에 기록 자체를 유지해야합니다. 자신의 개인 정보는 기본 키가 있다면 이것은 분명히 쉽지 않다
-
==============================
22.이 테이블에 따라 달라집니다. 테이블의 행이 이메일 주소를 나타낼 경우, 이메일 최고의 ID입니다. 그렇지 않다면, 이메일 좋은 ID가 없습니다.
이 테이블에 따라 달라집니다. 테이블의 행이 이메일 주소를 나타낼 경우, 이메일 최고의 ID입니다. 그렇지 않다면, 이메일 좋은 ID가 없습니다.
-
==============================
23.단순히 고유하게 이메일을 필요로하는 문제의 경우에 당신은 단지 열이 고유 인덱스를 만들 수 있습니다.
단순히 고유하게 이메일을 필요로하는 문제의 경우에 당신은 단지 열이 고유 인덱스를 만들 수 있습니다.
-
==============================
24.이메일 좋은 고유 인덱스 후보이지만, 기본 키 인 경우 기본 키, 당신은 예를 들어 연락처의 이메일 주소를 변경할 수 없습니다 없습니다. 나는 당신의 가입 querys이 너무 느릴 것이라 생각합니다.
이메일 좋은 고유 인덱스 후보이지만, 기본 키 인 경우 기본 키, 당신은 예를 들어 연락처의 이메일 주소를 변경할 수 없습니다 없습니다. 나는 당신의 가입 querys이 너무 느릴 것이라 생각합니다.
-
==============================
25.돈은 기본 키와 같은 이메일 주소를 사용하여 독특한로 이메일을 유지하지만, 기본 키 등 기본 키, 사용하는 사용자 ID 또는 사용자 이름으로 사용하지 DON하지
돈은 기본 키와 같은 이메일 주소를 사용하여 독특한로 이메일을 유지하지만, 기본 키 등 기본 키, 사용하는 사용자 ID 또는 사용자 이름으로 사용하지 DON하지
from https://stackoverflow.com/questions/3804108/use-email-address-as-primary-key by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL에서 효율적으로 열 값의 발생을 계산하려면? (0) | 2020.04.17 |
---|---|
[SQL] 어떻게 내가 업데이트 위로에게 SQL 서버 (100) 기록을 할 수 (0) | 2020.04.17 |
[SQL] 2008 SQL 서버를 사용하는 경우 조건이 어떻게 여러 CASE해야합니까? (0) | 2020.04.17 |
[SQL] 동적 정렬 SQL 저장 프로 시저 내에서 (0) | 2020.04.17 |
[SQL] RANK ()와 DENSE_RANK () 오라클 함수의 차이점은 무엇입니까? (0) | 2020.04.17 |