문제
데이터베이스에 두 개의 테이블이 있습니다.
- 회사 테이블 (ID, CompanyName, CompanyUserName, CompanyPassword)
- Employee Table (ID, CompanyID, 이름, 사용자 이름, 비밀번호)
지금은 직원이 서로에게 쓸 수있는 내부 메일 시스템을 설계하고 있지만 회사 계정에 직접 편지를 쓰고 있습니다.
내 내부 메일 테이블에는 다음 분야가 있습니다.
- ID
- Fromid
- 토드
- 메시지
- ...
이제 내 문제가 발생합니다. 메시지 테이블을 ID (From/To)로 채우면 메시지가 회사 나 직원이 있거나 ID가 두 테이블에 존재할 수있는 경우 단서가 없습니다.
내 해결책은 무엇 일 수 있습니까?
업데이트
위의 예는 내 질문을 단순화하는 것이 었습니다.
직원 및 회사 테이블에는 사용자 이름이나 비밀번호가 포함되어 있지 않지만 ASP.NET의 멤버십에 대한 참조 uniqueidentifier
로그인 관리를 위해. 아래에서 UI를 사용하여 Froms and the Reciever를 제어하여 ASP.NET 멤버십 컨트롤러에서 UI를 사용합니다. 감사. :-)
해결책
회사 및 직원 테이블에서 ID에 대해 고유 한 식별자를 사용하고 기본값으로 NewID ()를 사용하십시오.
또는 테이블을 병합하고 필드를 추가하여 레코드가 회사인지 직원인지를 보여줍니다.
다른 팁
두 개의 외국 열쇠를 회사와 직원에게 사용하고 하나만 설정되도록 할 수 있습니다.
그래서 이메일 .Toid는 Employee.id 또는 Company.ID를 참조 할 수 있습니다. 그 이메일을 적어도 하나의 (Employee.id 또는 company.id)에 존재 해야하는 이메일을 선언 적으로 제한 할 수 없습니다. 몇 가지 솔루션 :
- 이메일 테이블 (Toemployeeid, TocompanyID)에 ID를 가지고 있으며, 주어진 이메일에 하나만 지정할 수 있다는 제한 조건이 있습니다.
- 동일한 ID 공간에 직원 및 회사 ID를 보유하고 있으며 예를 들어 ID는 어떤 종류의 연락 테이블에 마스터되어 있으며 Company.Id 및 Employee.ID 모두 FK를 참조하여 contact.id를 참조하십시오. 접촉은이 다른 테이블의 꽤 절름발이 유형이기 때문에이 솔루션이 매우 좋다고 생각하지 않습니다.
- 연락 테이블 (ContactID, EmployeeId, CompanyID)과 같은 연락 테이블이 있습니다. 우편물이 EmployeeId = X로 회전하면 EmployeeId = x가있는 연락 행을 찾습니다. 존재하지 않으면 새 ContactID를 작성하고 사용합니다. CompanyID도 마찬가지입니다. 이것은 향후 다른 ID 세트를 사용할 수 있도록 확장 할 수 있습니다.
제휴하지 않습니다 StackOverflow