2012-06-14 8 views
2

기본 키가 Employee 테이블에 있어야합니다.자식 테이블의 올바른 기본 키?

Table Stores 
(PK) StoreID 
{other store columns} 

Table Employee 
StoreID 
EmployeeID 
{other employee columns...} 

[편집] 우리의 설치는 직원이 항상 하나 개의 저장소에 속하는 것 등이다. 모든 직원은 고유 한 ID를 가져야합니다 (즉, 직원이 다른 상점에 속해 있어도 ID는 동일하지 않아야합니다).

나는 항상 고유해야하므로 PK는 EmployeeID 여야한다고 생각합니다. 제 동역자는 PK가 StoreID + EmployeeID와 합성되어야한다고 생각하지만, 이론적으로 중복 직원 ID를 가질 수 있습니다. 나는 그의 추론을 전적으로 따르지는 않지만 그가 인용 한 한 가지는 성과이다. 나는 우리 데이터베이스의 Employee 테이블이 5000 레코드를 넘지 않았기 때문에 쿼리 성능에 대해 너무 걱정하지 않는다. 우리는 StoreID를 참조하는 다른 더 큰 자식 테이블을 가지고 있습니다. 이것이 그러한 키를 만드는 타당한 이유입니까?

[편집] EmployeeID에만 고유성을 적용하는 내부 키를 만들었습니까? 어쩌면 이렇게하는 방법은 여러 가지가있을 수 있지만, 가장 받아 들여지는 방법을 선택하고 싶습니다.

답변

1

EmployeeID가 모든 상점에서 고유하면 해당 테이블의 기본 키이어야합니다. 말했듯이 그렇지 않으면 중복 된 EmployeeID가 생깁니다. StoreID + EmployeeID를 볼 수있는 유일한 이유는 각 상점에 자체 직원 번호가있는 경우입니다. 한 사람이 두 개의 다른 상점에서 근무한 경우 각 상점마다 하나씩 두 개의 EmployeeID가 필요합니다. 귀하의 질문에서, 나는 그런 경우라고 생각하지 않습니다.

그러나 직원에게 항상 StoreID가 할당된다고 가정 할 때 StoreID는 외래 키 관계로 설정되어야합니다.

동료가 주로 성능에 관심이있는 경우 테이블에 EmployeeID, StoreID 인덱스를 추가하여 느린 쿼리 (발생하는 경우)를 정리해야합니다. 테이블이 작기 때문에 인덱스를 추가하기 전에 성능 문제가 나타날 때까지 기다릴 것입니다. 기본 키는 항상 논리적 인 조직 결정이라고 생각합니다. 그 결정의 일부로 성과를 고려하지 않을 것입니다.

+0

empID는 정확하게 데이터베이스 전체에서 고유합니다. Q를 명확히하기 위해 업데이트했습니다. PK가 테이블의 고유 한 열을 반영해야한다는 귀하의 평가에 전적으로 동의합니다. 나는 더 많은 코멘트를 원했기 때문에 내가 지금 당신에게 대답을 주거나 조금 기다려야할지 모르겠다. 이것은 언어적인 말다툼이기 때문에 더 많은 의견을지지 할 수 있습니다. – Tekito

1

나는 항상 이어야하기 때문에 PK는 EmployeeID 여야한다고 생각합니다. 제 동역자는 PK가 StoreID + EmployeeID와 결합되어야한다고 생각하지만 명의 직원 ID가 중복되는 것은 이론적으로 가능합니다.

당신은 두 가지 약간 다른 것들을 말합니다.

에만으로 직원을 식별하려면 기본 키가 employee_id 여야하며 상점의 ID 번호가 해당 테이블에 없어야합니다. 직원이 일반적으로 어느 상점에서 근무하는지 알고 싶다면 employees 테이블에 store_id를 포함하고 (NOT NULL) 만들거나 별도의 테이블을 만들 수 있습니다.

저는 25 년 동안이 제품을 사용 해왔고, 직원들이 에만이라는 가게에서 일할 수 있다고 사람들에게 말했습니다. 거의 항상 사실이 아닙니다. 관리자가 을 맹세하는 순간에도이 참일 때가 있습니다. 한 번에 여러 상점에서 근무한 6 명의 직원이있는 방에서 "논의"했습니다. 그들 중 한 명은 매주 다섯 개의 다른 가게에서 일했습니다. 그리고 모두 관리자는 이것을 알고있었습니다. 우리가 여러 상점에서 근무한 모든 사람들을 지적했을 때, 관리자들은 여전히 ​​모든 사람들이 오직 한 상점에서만 근무한다고 주장했습니다. (어깨 만 으 치기)

별도의 테이블을 사용하여 현재의 유급 작업 위치를 직원에게 저장하는 것이 좋습니다. 주된 이유는 경영 항상그 관계에 대한 자세한 정보를 원하는 그냥 그 사실. 항상. 출석, 계시, 항상 다른 것.

해당 테이블에서 적어도 {store_id, employee_id} 이상의 복합 기본 키가 필요합니다. 해당 위치 관계에 대해 저장하려는 다른 정보에 따라 그보다 많은 열 (때로는 더 많은 테이블)이 필요할 수 있습니다. 또한 모든 직원에게 현재 유급 작업 위치가 하나 이상 있는지 확인하기 위해 일종의 관리 절차 (자동화 할 수도 있고하지 않을 수도 있음)가 필요합니다.(dbms가 어설 션을 지원하면 관리 절차를 제거 할 수 있습니다.)

+0

나는 내 질문을 편집하여 규칙에 대해보다 명확하게 설명했습니다. 우리의 경우 직원은 항상 한 매장에 속할 것이며 EmpID는 전체 데이터베이스에서 고유해야합니다. 내 데이터베이스는 실제로 직원 및 상점에 관한 것이 아니며 직관적 인 예제로 바꿀뿐입니다. 귀하의 솔루션이 실제 직원들에게만 유용 할 것이라는 데 동의하지만 : – Tekito

관련 문제