2011-11-23 2 views
1

고객 ID (GUID), 데이터 포인트 (문자열) 및 입력 시간을 보유 할 테이블을 작성하려고합니다. 그러나, 나는 그것을 가장 잘 키우는 방법을 이해할 수 없다. 3 튜플 ID/문자열/시간이 고유하다는 것을 보장 할 수 없습니다 (테이블에 사용자 입력이 포함될 수 있으며 일부 사용자는 양식 제출을 스크립팅하려고하므로 충분한 시간이 없을 수도 있습니다).기본 키 또는 대리 키가 없습니까?

이 표에서 조회를 자주 수행하므로 쿼리 속도가 중요합니다. 반면에 인서트를 완전히 무력화시킬 수는 없습니다.

따라서 두 가지 선택 사항이 있습니다. 기본 키없이 이동하거나 대리 자동 증가 키를 정의하십시오. 위의 요구 사항에 가장 적합한 것은 무엇입니까? 세 개의 데이터 열에 대리 키와 고유하지 않은 색인을 사용할 수 있습니까?

우리는 SQL Server 2008 R2를 사용하고 있습니다.

+3

* 기본 키가없는 경우 테이블이 아닙니다 * .... –

+3

저는 자동 증가 필드를 만들고이를 기본 키로 설정합니다. 그런 다음 다른 3 개의 열을 색인화하십시오. 하나의 색인은 표 검색 방법에 따라 충분할 수 있습니다. – Andrew

+0

고객 ID + 입력 시간이 고유 한 조합을 만들 것입니다. 그러나 그것은 당신이 자동 증가와 함께 더 나을 것 같은 무의미한 것입니다. –

답변

0

다른 이유로해야 할 특별한 경우가 아니면 자동 생성 된 기본 키 값을 생성 할 수 있도록 IDENTITY 속성 집합과 함께 smallint/int/bigint를 적절하게 사용하여 서로 게이트 기본 키를 사용하도록 데이터베이스 디자인을 기본값으로 설정합니다. 나중에 테이블의 하나 이상의 열을 사용하여 자연 키를 적용하려는 경우 UNIQUE CONSTRAINT를 작성하여 자연 키를 적용 할 수 있습니다.

테이블에 고유 한 제약 조건이 없어도 하나의 기본 키만 가질 수 있으므로 대리 키가 아닌 다른 많은 문제를 피할 수 있습니다.

0

이렇게 행이있는 테이블은 무엇을 의미합니까?

customer_id       data_point  time_entered 
-- 
6F9619FF-8B86-D011-B42D-00C04FC964FF some data  2011-11-23 10:02:12.34567 
6F9619FF-8B86-D011-B42D-00C04FC964FF some data  2011-11-23 10:02:12.34567 
6F9619FF-8B86-D011-B42D-00C04FC964FF some data  2011-11-23 10:02:12.34567 

그리고 같은 행이있는 테이블이 무엇을 의미합니까? 해당 테이블에 ID 번호를 중지하기 전에 첫 번째 질문에 좋은 답변이없는 경우

id customer_id       data_point  time_entered 
-- 
1 6F9619FF-8B86-D011-B42D-00C04FC964FF some data  2011-11-23 10:02:12.34567 
2 6F9619FF-8B86-D011-B42D-00C04FC964FF some data  2011-11-23 10:02:12.34567 
3 6F9619FF-8B86-D011-B42D-00C04FC964FF some data  2011-11-23 10:02:12.34567 

, 당신은 하나, 이후 좋은 대답을하지 않습니다.

+0

이 경우 "의미"는 무엇을 의미합니까? 둘 다 고객이 매우 빈번하게 (스크립트로 작성된) 일부 데이터를 입력했음을 의미합니다. 이러한 사용자는 아마도 매우 빨리 금지 될 것입니다. 데이터 포인트는 사용자에게 보너스를주는 토큰이며, 사용자가 입력 한 모든 토큰과 시간을 볼 수 있어야합니다. 그래서 그 같은 테이블은 나에게 의미가 있습니다. 그러나 인덱스가 없을 때 어떤 일이 발생하는지 확신 할 수 없습니다. 그리고 행이 고유하다는 것을 확신 할 수 없습니다. 대리 키는 고유성을 제외하고는 아무 것도 추가하지 않습니다. – carlpett

관련 문제