저는 직원 데이터베이스, emp_person 테이블 (이름, 국적, 성별, ... .etc 정보) 및 emp_contract 테이블 (hiredate, 계약 유형, 급여 ...)을 구축하고 있습니다. 기본 키를 할당 할 곳이 궁금 해서요. 이것이 가장 좋은 방법입니까?assign Pk and FK
답변
디자인 할 때 Emp_Id로 명명 된 서로 게이트 키 (일련 번호)를 만들고 emp_person 테이블의 기본 키로 정의하십시오. emp_contract 테이블에 데이터를 저장하는 동안 동일한 키를 사용하십시오.
숫자 열에 생성 된 기본 키는 수행하는 중첩 연습입니다. 레코드를 고유하게 인식 할 수있는 열이 없으면 테이블에 서로 게이트 키를 만듭니다.
- 기본 키가 필요한만큼 작아야한다 :
나는 규칙의 몇 가지 사항을 따르십시오. 숫자 형식은 문자 형식보다 훨씬 더 압축 된 형식으로 저장되기 때문에 숫자 형식 을 선호하십시오. 이는 대부분의 기본 키가 다른 테이블의 foreign 키가 될뿐만 아니라 여러 인덱스에 사용되기 때문입니다. 키가 작을수록 인덱스가 작을수록 캐시의 페이지 수가 적습니다. 을 사용하게됩니다.
- 기본 키는 절대 변경하면 안됩니다. 기본 키를 업데이트하면 은 항상 문제가되지 않습니다. 이는 복수 인덱스에서 이 가장 많이 사용되어 외래 키로 사용되기 때문입니다. 단일 기본 키를 업데이트하면 변경의 파급 효과가 발생할 수 있습니다.
대리모 대 자연 키 위의 규칙을 참조하십시오. 자연 키가 작고 변경되지 않으면 기본 키로 사용할 수 있습니다. 자연 키가 크거나 변경할 가능성이 큰 경우 대리 키를 사용합니다. 프라이 머리 키가 없다면, 나는 대리 키를 만든다. 경험에 의하면 당신은 항상 당신의 스키마에 테이블을 추가 할 것이고 당신은 PK를 놓기를 원하기 때문이다.
아만다, 당신의 의견에 대한
솔루션은 "내 문제는 내가 이미 NVARCHAR의 PK (SQL 서버 2008)와 함께 오래 된 직원 테이블이 내가 다른 두 테이블을 생성하고 싶지만 번호로 PK를 변경 한 후 및 그것은 이미 FK 관계 많은 테이블에 connectiong입니다. 고유 한 PK char (일련 번호 부분)에서 부분 문자열을 가져올 계획이며 새 테이블에있는 PK ...하지만 나는 거의 12 레코드가 중복되었습니다. 동일한 고유 일련 번호가 있고 기본 키를 업데이트하고 모든 FK 테이블에 대한 업데이트를 캐스케이드하고 싶습니다. 그러나 기본 키 제약 조건을 제거했습니다. 도와주세요. "
새 테이블 만들기 그 안에 이전 및 새로운 pk 값이 있습니다. 지금까지 아무 것도 깨지 않았는지 확인하려면 두 열에 고유 한 제약 조건을 적용하십시오.
이 키를 PK 또는 FK로 사용하는 모든 테이블에서 제약 조건을 해제합니다.
모든 테이블에 대해 업데이트를 실행하여 이전 값을 새 값으로 수정합니다.
PK를 활성화 한 다음 FK를 활성화하십시오.
- 1. 스칼라 PK 속성이없는 EF PK FK 매핑
- 2. DB Fk/Pk 키 성능
- 3. EF 및 문자 PK/FK
- 4. 테이블에 할당해야하는 PK 및 FK 란 무엇입니까?
- 5. FK/PK 관계가있는 데이터베이스의 열 이름을 지정해야합니까?
- 6. HQL을 사용하여 PK/FK 열에 참여하는 방법은 무엇입니까?
- 7. CodeFirst EF 4.1 상속 - PK/FK 이름 바꾸기
- 8. PK/FK 용 시간별 동기화, 분산 데이터베이스 용 솔루션/디자인
- 9. ASP.NET 멤버 자격 공급자 확장, PK == FK == OK?
- 10. javascript assign()
- 11. @property assign
- 12. MySQL은 내가 세 개의 테이블</p> <p>직원 EMPID INT PK empname VARCHAR</p> <p>customersite EMPID INT PK FK custid INT PK FK STARTDATE 날짜 PK ENDDATE 날짜가
- 13. JPA : querying FK
- 14. PK 값 업데이트하기 mysql
- 15. VB.Net datatable assign 값
- 16. "assign to"내용 변경
- 17. Segfault at string :: assign
- 18. MySQL은이 같은 테이블이 FK 테이블
- 19. Mysql 매핑 테이블 FK 제약
- 20. 다양한 테이블을 가리키는 FK 열
- 21. PK-> PK가 아닌 PK-> FK를 사용한 유형별 상속 프레임 워크 테이블
- 22. PK 위반
- 23. FK 질문
- 24. 장고 : FK
- 25. 이 Verilog 함수에는 assign 문이 없습니다.
- 26. 최대 절전 모드에서 PK 및 FK 이름을 생성하는 방법을 어떻게 변경할 수 있습니까?
- 27. 최대 절전 매핑 일대 다 관계 : 부모의 PK to Child의 FK
- 28. UIViewController assign/retain을 사용하는 경우?
- 29. assign @ property의 setter는 어떻게 구현됩니까?
- 30. 검색하지 않고 FK 열 값을 설정하는 방법
큰 대답 - 나는 미국 사회 보장 번호/납세자 ID와 같이 독창적이고 변하지 않는 '기본'키를 사용하려고하는 앱을 보았지만 사람들이 자신이 쓰는 것을 깨닫게되면 혼란을 겪습니다. 잘못된 SSN이거나 다른 사람이 잘못 입력 한 경우 변경해야합니다. – nvuono
이 경우 자동 번호 및 타임 스탬프 필드도 있으므로 두 레코드가 같을 수 없습니다. –
네 대답을 내 고마워, 내 문제는 이미 nvarchar PK (SQL Server 2008)와 함께 오래된 직원 테이블을 가지고 있고 다른 두 테이블을 만들고 싶지만 PK를 번호로 변경 한 후 이미 FK로 많은 테이블에 연결되어있다. 관계. 고유 한 부분 인 PK char (일련 번호 부분)에서 하위 문자열을 가져 와서 새 테이블의 PK로 만들 계획입니다. 하지만 나는 거의 12 개의 레코드가 동일한 고유 한 시리얼 넘버로 복제되었고 기본 키를 업데이트하고 모든 FK 테이블에 대한 업데이트를 캐스케이드하고 싶습니다. 그러나 PRIMARY KEY 제약 조건의 아이소 레이션이 있습니다. 제발 도와주세요 – Amanda