나는 다음과 같은 상황이 있습니다
.-클라이언트 (ID)
-계약 (ID, ClientID)
-ClientEmployee (ID, ClientId)
클라이언트는 많은 계약을 가질 수 있고 클라이언트는 많은 ClientEmployees를 가질 수 있습니다.
모든 계약에 대해 작업중인 ClientEmployees를 연결해야합니다.
현재 내 솔루션은 계약과 ClientEmployees 사이에 다 대다 관계를 구축하는 쉬운 솔루션입니다.
-ContractClientEmployee (ID, ContractID, ClientEmployeeID)
이 디자인에서는 ClientEmployee가 다른 클라이언트의 계약에 연결되는 것을 방지 할 수있는 방법이 없습니다 (데이터베이스 디자인 수준에서). 물론 오류가됩니다.
이 추가 제약 조건을 스키마에서 포착하는 '더 나은'솔루션이 있어야한다고 생각하지만 어떻게 ... :-(
업데이트 : 나는 좋은 솔루션에 대한 동일한 개념에 대해 두 가지 유효하고 매우 좋은 답변을 받았습니다. 렌 조가 먼저 왔기 때문에 받아 들였어요 ... 미안 해요.
다음은 가능한 솔루션입니다. 기본 아이디어는 Contract 및 Employee의 기본 키로 클라이언트의 기본 키로 구성된 복합 키와 다른 계약과 "내부"직원을 구분하는 데 사용되는 숫자 값을 정의하는 것입니다. 클라이언트.
Client(ClientId, ClientData),
primary key ClientId
Contract(ClientId, ContrNum, ContractData)
primary key (ClientId, ContrNum)
ClientId foreign key for Client
Employee(ClientId, EmplNum, EmplData)
primary key (ClientId, EmpNum)
ClientId foreign key for Client
EmployeeContract(ClientId, EmpNum, ContrNum)
primary key (ClientId, EmpNum, ContrNum)
(ClientId, EmpNum) foreign key for Employee
(ClientId, ContrNum) foreign key for Contract
이러한 방식으로 데이터 간의 일관성은 서로 다른 외래 키를 통해 데이터베이스 수준에서 유지됩니다. EmployeeContract에 대한 새 레코드를 삽입하면 계약이 규정 된 동일한 클라이언트에서 일하는 직원이됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다