2016-08-08 5 views
1

가독성을 위해 문자열 기반의 기본 키를 사용하는 것이 좋습니까? 또는 항상 정수를 사용해야합니까?SQL : 성능 대 가독성

정수와 문자열 비교의 복잡성에 대해 알고 있습니다. 그러나 이것은 현대 하드웨어의 문제일까요? 중간 크기 웹 응용 프로그램 (50-100 명의 동시 사용자)에 대해 생각하고 있습니다.

편집 : "가독성"이란 테이블 사이의 관계를 쉽고 빠르게 이해할 수 있음을 의미합니다.

적은 읽을 수 :

# UserID|DepartmentID 
# ------|------------ 
# 732 |5 
# 812 |3 

INSERT INTO `UserDepartment` VALUES ('732','5'); 
INSERT INTO `UserDepartment` VALUES ('812','3'); 

더 읽기 :

# UserID |DepartmentID 
# ----------|------------ 
# Bill Gates|R&D 
# Steve Jobs|Finance 

INSERT INTO `UserDepartment` VALUES ('Bill Gates','R&D'); 
INSERT INTO `UserDepartment` VALUES ('Steve Jobs','Finance'); 
+0

가독성을 위해이 점을 자세히 설명해주십시오. 사용중인 DBMS에 태그를 붙이십시오 – TheGameiswar

+0

아이디어를 좀 더 설명해주십시오. 기본적으로 조기 최적화를 수행하지 마십시오. 현실성 문제가 아니라면 실력은 핵심입니다. 그러나 아이디어가 실제로 더 읽기 쉽는지 확실하지 않습니다. 당신은 최선의 관행을 반대하고 있습니다. 명심하십시오. – BigM

+0

누군가가 타이핑 오류를 만든 경우해야 할 일을 상상해보십시오. 당신은 그것을 고칠 필요가 있습니다. ('Bill Gates'- >> 'Gill Bates') 이제이 PK가 다른 테이블에서도 FK로 사용된다고 가정하십시오 ...) – joop

답변

0

당신이 그것을 읽을 왜 문제입니다. 기본 키는 기술적 인 기능이므로 가능한 한 효과적으로 사용하십시오. 다른 필드를 사용하여 가독성 문자열을 추가하십시오.

일 수 있습니다. 그러나 성장의 경우 큰 고통이 될 수 있으며 데이터 구조를 변경하는 것이 쉽지는 않습니다. 또한 일부 복잡한 쿼리에서는 문제가 될 수 있습니다. 동시 접속에 관한 것이 아니라 데이터에 관한 정보를 잊지 마십시오. 3 개의 문자열을 저장할 수 있으며 예 - 괜찮을 것입니다. 하지만 수백만 개의 아이템이있을 때 어떤 일이 발생합니까? 단순한 SELECT조차도 느리고 모든 50 명의 사용자가 화가납니다.

대답은 '아니오'입니다. 좋은 생각이 아닙니다. 그들은 이유가 있기 때문에 그것을 베스트 프랙티스라고 부릅니다. 그래서 처음부터 제품을 훌륭하게 만드십시오.

+0

예를 들어'status'라는 추가 테이블이 있다면 다음과 같이해야합니다 : 다른 테이블에있는'ID'로부터'status_name'을 얻기 위해 그 테이블에 매번 참여하십시오. 이름을 기본 키로 사용하면 쿼리에 상태 이름을 얻기 위해 조인 할 필요가 없습니다. –

+0

귀하의 기여에 감사드립니다. 기본 키는 기술적 인 기능이며 어쨌든 읽지 않을 것이라고 말하고 있습니다. 그렇다면 데이터베이스를 어떻게 초기화합니까? INSERT INTO \'XYZ \ 'VALUES ('732 ','5 ','76 ');와 같은 수천 줄의 라인을 생성하는 것은 시간이 많이 걸리고 에러가 발생하기 쉽다. – Lugaxx

+0

@Lugaxx 사용 가치가있는 DBMS는 고유 한 기본 키를 자동으로 생성하기위한 자동 증가 (또는 유사한) 기능을 가지고 있습니다. 예 : MySQL : http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – evsheino

0

이것은 합성 기본 키 대 자연 기본 키 사이의 선택입니다. 내가 합성 기본 키의 큰 지지자임을 밝히자. 그렇다고 자연스러운 기본 키가 결코 유용하지 않다는 것을 의미하는 것은 아니지만 나는 편견을 인정합니다.

왜 합성 키 (예 : 자동 증가 숫자 키)를 선호합니까? 나에게 말하게한다 :

  • 그들은 유일 함을 보장한다.
  • 테이블에 삽입 순서에 대한 레코드를 제공합니다.
  • 일반적으로 4 바이트이며 고정 바이트 필드가 인덱스에 더 효율적입니다.
  • 이들은 단일 열입니다. 복합 기본 키는 매우 복잡 할 수 있습니다.

물론 오버 헤드가 적을 수 있습니다.

또 다른 큰 문제는 "자연스러운"키가 변경 될 수 있다는 것입니다. 예를 들어 두 계정이 실제로 같은 사람이라는 것을 알게되면 계좌 번호 같은 것이 바뀔 수 있습니다. "자연"기본 키를 특성으로 사용하면 쉽게 수정할 수 있습니다. 그냥 테이블의 값을 변경하십시오. 물론 계단식 업데이트 외래 키는 다른 솔루션을 제공합니다.

자연 기본 키가 유용한 경우를 생각해 볼 수 있습니다. 때로는 상태에 대해 "열림"또는 "닫음"과 같은 문자열 값의 유효성을 검사하려고합니다. 이것은 참조 테이블에 대한 외래 키를 사용하여 처리 할 수 ​​있습니다. 물론 이는 테이블의 check 제약 조건을 사용하여 처리 할 수도 있습니다.

+0

대개 데이터베이스를 값으로 어떻게 초기화합니까? INSERT INTO \'XYZ \ 'VALUES ('732 ','5 ','76 ');와 같은 명령을 포함하는 "원시".sql 파일을 사용합니까? 아니면 모든 "로우 레벨"INSERT 명령어를 처리하는 "하이 레벨"인터페이스 (예 :'createUser (user, department, ...)')를 사용합니까? – Lugaxx

+0

한 번에 하나의 테이블에 삽입 한 다음'join'을 사용하여 다른 테이블의 ID를 조회합니다. –