2009-11-20 5 views
1

SQL 서버 테이블을 사용하여 관련 정보를 URL로 유지하려고합니다. 따라서 "URL"로 컬럼이 있으며 그 유형은 VARCHAR입니다. 애플리케이션에서이 URL을 정보를 쿼리하는 고유 키로 사용해야합니다 (SELECT * FROM 표 WHERE URL = "www.google.com \ ig"와 같은 것을 사용)SQL Server 문자열을 고유 키로

단점이 있는지, 알려진 것은 있습니까? URL을 고유 키로 사용할 때의 단점은 무엇입니까?

답변

4

일반적으로 문자열이 아닌 테이블 키로 숫자 값을 갖는 것이 좋습니다. 이 주제에 대한 설명은 여기 Database Primary Key C# mapping - String or int을 참조하십시오.

URL을 사용하는 경우 동일한 (동일한) URL을 두 번 삽입하는 것을 피하기 위해 몇 가지 기본 규칙이있는 경우 문제가 발생하지 않아야합니다. 즉, 데이터베이스는 "www.google.com""http://www.google.com"을 다른 문자열로 해석하므로 "URL에는 프로토콜 식별자가 없습니다"또는 "URL은 슬래시 "또는 무엇이든간에 디자인에 의미가 있습니다.

0

나는 여전히 테이블에 클러스터형 열 키를 만들 것입니다. 자동 번호를 입력 한 다음 URL 열에 고유 색인을 만듭니다.

그러나 URL이 고유하지 않고 모든 것이 그대로 작동해야하는 이유는 알 수 없습니다.

0

페이징이 필요한 경우 숫자 기본 키의 이점을 활용할 수 있습니다. 그러나 앞으로도 숫자 인덱서를 추가 할 수 있습니다. 따라서 URL을 PK로 만드는 데 장애가 없습니다.

1

다른 사람들은 다음과 같이 말했습니다. SQL Server 테이블의 주/클러스터링 키로 URL과 같은 긴 문자열을 사용하지는 않지만 물론 해당 열에 고유 한 제약 조건을 넣어야합니다. 당신이 어떤 중복을 얻지 않았는지 확인하십시오!

UNIQUE CONSTRAINT 또는 UNIQUE INDEX 중 하나를 수행 할 수 있습니다. 최종 결과는 거의 동일합니다 (고유 제한 조건은 장면 뒤에서 색인도 사용합니다). 혹시에 이미 값을 삽입하는 것을 시도해야하는 경우

CREATE UNIQUE NONCLUSTERED INDEX UIX_YourTable_URL ON dbo.YourTable(urlField) 

: 고유 인덱스의 플러스 측이 별도의 테이블에 외래 키로 참조 할 수 있습니다, 그래서 나는 거의 항상이 방법을 사용한다는 것입니다 테이블, 삽입 문을 SQL 오류와 거부되며 아무것도 나쁜 일이 발생할 수 있습니다.

관련 문제