2012-05-14 4 views
0

저는 직원 데이터베이스, emp_person 테이블 (이름, 국적, 성별, ... .etc 정보) 및 emp_contract 테이블 (hiredate, 계약 유형, 급여 ...)을 구축하고 있습니다. 기본 키를 할당 할 곳이 궁금 해서요. 이것이 가장 좋은 방법입니까?assign Pk and FK

답변

1

디자인 할 때 Emp_Id로 명명 된 서로 게이트 키 (일련 번호)를 만들고 emp_person 테이블의 기본 키로 정의하십시오. emp_contract 테이블에 데이터를 저장하는 동안 동일한 키를 사용하십시오.

숫자 열에 생성 된 기본 키는 수행하는 중첩 연습입니다. 레코드를 고유하게 인식 할 수있는 열이 없으면 테이블에 서로 게이트 키를 만듭니다.

  1. 기본 키가 필요한만큼 작아야한다 :

    나는 규칙의 몇 가지 사항을 따르십시오. 숫자 형식은 문자 형식보다 훨씬 더 압축 된 형식으로 저장되기 때문에 숫자 형식 을 선호하십시오. 이는 대부분의 기본 키가 다른 테이블의 foreign 키가 될뿐만 아니라 여러 인덱스에 사용되기 때문입니다. 키가 작을수록 인덱스가 작을수록 캐시의 페이지 수가 적습니다. 을 사용하게됩니다.

  2. 기본 키는 절대 변경하면 안됩니다. 기본 키를 업데이트하면 은 항상 문제가되지 않습니다. 이는 복수 인덱스에서 이 가장 많이 사용되어 외래 키로 사용되기 때문입니다. 단일 기본 키를 업데이트하면 변경의 파급 효과가 발생할 수 있습니다.

대리모 대 자연 키 위의 규칙을 참조하십시오. 자연 키가 작고 변경되지 않으면 기본 키로 사용할 수 있습니다. 자연 키가 크거나 변경할 가능성이 큰 경우 대리 키를 사용합니다. 프라이 머리 키가 없다면, 나는 대리 키를 만든다. 경험에 의하면 당신은 항상 당신의 스키마에 테이블을 추가 할 것이고 당신은 PK를 놓기를 원하기 때문이다.

아만다, 당신의 의견에 대한

솔루션은 "내 문제는 내가 이미 NVARCHAR의 PK (SQL 서버 2008)와 함께 오래 된 직원 테이블이 내가 다른 두 테이블을 생성하고 싶지만 번호로 PK를 변경 한 후 및 그것은 이미 FK 관계 많은 테이블에 connectiong입니다. 고유 한 PK char (일련 번호 부분)에서 부분 문자열을 가져올 계획이며 새 테이블에있는 PK ...하지만 나는 거의 12 레코드가 중복되었습니다. 동일한 고유 일련 번호가 있고 기본 키를 업데이트하고 모든 FK 테이블에 대한 업데이트를 캐스케이드하고 싶습니다. 그러나 기본 키 제약 조건을 제거했습니다. 도와주세요. "

새 테이블 만들기 그 안에 이전 및 새로운 pk 값이 있습니다. 지금까지 아무 것도 깨지 않았는지 확인하려면 두 열에 고유 한 제약 조건을 적용하십시오.

이 키를 PK 또는 FK로 사용하는 모든 테이블에서 제약 조건을 해제합니다.

모든 테이블에 대해 업데이트를 실행하여 이전 값을 새 값으로 수정합니다.

PK를 활성화 한 다음 FK를 활성화하십시오.

+0

큰 대답 - 나는 미국 사회 보장 번호/납세자 ID와 같이 독창적이고 변하지 않는 '기본'키를 사용하려고하는 앱을 보았지만 사람들이 자신이 쓰는 것을 깨닫게되면 혼란을 겪습니다. 잘못된 SSN이거나 다른 사람이 잘못 입력 한 경우 변경해야합니다. – nvuono

+0

이 경우 자동 번호 및 타임 스탬프 필드도 있으므로 두 레코드가 같을 수 없습니다. –

+0

네 대답을 내 고마워, 내 문제는 이미 nvarchar PK (SQL Server 2008)와 함께 오래된 직원 테이블을 가지고 있고 다른 두 테이블을 만들고 싶지만 PK를 번호로 변경 한 후 이미 FK로 많은 테이블에 연결되어있다. 관계. 고유 한 부분 인 PK char (일련 번호 부분)에서 하위 문자열을 가져 와서 새 테이블의 PK로 만들 계획입니다. 하지만 나는 거의 12 개의 레코드가 동일한 고유 한 시리얼 넘버로 복제되었고 기본 키를 업데이트하고 모든 FK 테이블에 대한 업데이트를 캐스케이드하고 싶습니다. 그러나 PRIMARY KEY 제약 조건의 아이소 레이션이 있습니다. 제발 도와주세요 – Amanda

관련 문제