2009-09-16 3 views
0

저는 small-ish SQL Server '08 데이터베이스를 구현할 때 전화를 걸려고합니다.데이터 또는 여러 열 키를 비정규 화 하시겠습니까?

플랫 파일 데이터베이스의 출력 텍스트 파일을 이전 COBOL 시스템에서 앞서 언급 한 SQL Server 데이터베이스로 변환합니다. 대출자 ID (7 자리 숫자), 은행 계좌 번호 (15 자리) 및 "계정 접미사"(2 자리)의 조합으로 고유하게 식별 할 수있는 차량 및 부동산 대출 데이터베이스입니다.

고백 나는 데이터베이스 관리에 관해서 솔직히 말하면 고백한다. (솔직히 말해서, 나는 현재까지 나의 위치까지 그것을 해냈다.) 나는 두 가지 접근법 중 어느 것이 최선인지 결정하려고 노력하고있다.

1) 위 값의 3 열 키 또는
을 사용하여 각 대출을 식별합니다. 2) "키"열을 구현하여 데이터를 비정규 화합니다. 세 값을 결합한 24 자 문자열

비정규 화는 어렵지만 허용되지만, 대출이 은행 간을 왕래하거나 대출 접미사를 변경할 수 없기 때문에 업데이트 이상이 발생할 것으로 예상 할 수 없습니다. 이러한 값의 변경은 다른 계정으로 보장됩니다.

복합 키는 좀 더 우아하지만, 나는 그것이 나쁜 것임을 암시하는 몇 가지 논문을 읽었습니다.

그래서 어떤 옵션이 더 나은 선택 일 수 있으며 더 중요한 이유는 무엇입니까?

답변

3

자동 생성 된 서로 게이트 키를 사용하고 고유 키를 고유 키에 넣습니다. 이런 식으로 자연 키가 변경되면 (예를 들어 은행이 다른 은행에서 매수 한 경우) 한 곳에서 변경하면됩니다. 대리 키를 사용할 때 가장 많이 사용되는 것은 자연 키가 고유한지 확인하고 고유 인덱스가이를 수행 할 경우 자연 키의 고유성을 보장하는 것입니다.

0

자동 증가 숫자 대리 키를 사용하는 것이 좋습니다. 왜 다른 세 "핵심"열의 매쉬업이 필요한가?

+0

키를 자동으로 증가시키는 대신 열을 GUID로 만들 수도 있습니다. 이렇게하면 독창성을 유지하면서 새로운 레코드에 대해 자동 생성되는 키 필드에 대해 걱정할 필요가 없습니다. –

+0

GUID를 사용하려면 NEWID()가 아닌 NEWSEQUENTIALID()로 채 웁니다. –

1

자주 업데이트되지 않는 참조 데이터 인 경우 다중 부분 키를 사용해도됩니다.

트래픽이 많은 트랜잭션 데이터 인 경우 서로 게이트 키 (int identity, 클러스터 된 기본 키)를 추가하고 세 부분 키를 대체 키로 만듭니다.

옵션 2를 전혀 구현하지 않는 것이 좋습니다.

관련 문제