나는 db에서 일하고있다. 그러나 나는 이것에 대해 약간 새로운 것이므로 지금 문제에 부딪 혔다. 몇 가지 테이블이 있습니다 : 사무실, 객실, 직원 및 문서. 문서에는 보낸 사람을 지정해야합니다. 보낸 사람은 단일 직원, 전체 회의실 또는 전체 사무실 일 수 있으므로 해당 테이블의 기본 키에 대한 참조가 있어야합니다. 처리 할 "병렬"테이블을 사용해야합니까 (예 : 여러 수신자 문서 처리 용으로 한 것) 다른 방법이 있습니까? 감사합니다.SQL에서 다중 참조
답변
하나만 값을 가질 수 있도록하는 점검 제한 조건으로 세 테이블 각각에 외래 키가 있어야합니다. 이 방법으로 표준 참조 무결성을 계속 사용할 수 있습니다. Btw, 이것은 비즈니스 규칙은 각 문서가 하나의 발신자 만 가져야한다는 것을 전제로합니다.
Create Table Document
(
SenderEmployeeId ...
, SenderRoomId ...
, SenderOfficeId....
, Constraint CK_Document_SingleSender Check (Case
When SenderEmployeeId Is Not Null And SenderRoomId Is Null And SenderOfficeId Is Null Then 1
When SenderRoomId Is Not Null And SenderEmployeeId Is Null And SenderOfficeId Is Null Then 1
When SenderOfficeId Is Not Null And SenderEmployeeId Is Null And SenderRoomId Is Null Then 1
Else 0
End = 1)
)
예, 문서에는 발신자가 한 명만있을 수 있으므로 체크 제약 솔루션을 사용할 것입니다. 고마워요 – AGarofoli
SQL Server에서 수행 할 수없는 조건부 외래 키를 만들려고합니다. Document와 Sender를 보관할 테이블을 만드는 것이 좋은 생각이지만 외래 키를 만들 수는 없을 것입니다. 그래도 데이터를 제어하기 위해 Check Constraint을 구현할 수 있습니다.
너무 잘 체크 contraint 몰라하지만 그것은 최고의 솔루션 것 같습니다. 링크 주셔서 감사합니다! – AGarofoli
필자가 언급 한 것처럼 병렬 테이블로 구현할 것입니다. 표는 다음과 같은 것이다 :
OfficeDocuments (OfficeID, DocumentID)
RoomDocuments (RoomID, DocumentID)
EmployeeDocuments 당신은 디자인보다 유연한 쿼리를 디자인 할 수
(직원 ID, DocumentID) 예를 들어 Room 및 Office 테이블에 대한 조인은 직원 목록을 얻는 것과 같습니다.
선택하는 방법은 유연성이 얼마나 필요한지에 따라 달라집니다. 이 테이블과 함께 사용하기 위해 하나 또는 두 개의 쿼리 만 디자인하는 경우 대신 (테이블 제약 조건을 사용하고 보낸 사람이 될 수있는 테이블 유형마다 여러 속성을 사용하여) 비정규 화 된 테이블을 만드는 것이 좋습니다.
내가 가지고 있어야하는 유일한 쿼리는 누가 문서를 작성했는지 확인하게 해주는 것이고, 체크 제약은 "병렬 테이블"방법보다 쉽게 만들 것이지만 당신이 옳다. 이것은 더 유연한 해결책이다. 지금은 유연하지 않아도 곧 솔루션을 전환해야 할 수도 있습니다. 아마도 둘 다 시도하고 어느 것이 더 잘 작동하는지 확인해 볼 것입니다. 고마워요! – AGarofoli
- 1. SQL에서 다중 카운트 문으로 고생
- 2. Sql에서 어떻게합니까? 고리? 다중 삽입?
- 3. 다중 참조 - 단일 인스턴스
- 4. Ruby에서 다중 참조
- 5. jQuery 다중 참조 방지
- 6. 다중 조인 - 다중 조인 - '선택'의 널 참조 예외
- 7. Clojure에서 하나의 참조 또는 다중 참조가 필요합니까?
- 8. SQL에서 외래 키를 "참조 해제"하는 것이 이론적으로 효과가 있습니까?
- 9. powershell에서 실행 한 SQL에서 다중 저장 프로 시저 만들기 문제
- 10. 다중 루프를 사용하여 SQL에서 데이터를 표시 할 때 문제가 발생했습니다.
- 11. SQL에서 리모팅이 필요함 CLR
- 12. SQL에서 관계
- 13. SQL에서 Foreach?
- 14. SQL에서 롤백
- 15. SQL에서 SPSS로
- 16. 동일한 자식 엔티티를 가진 다중 부모 NHibernate 참조 - 대 - 부모
- 17. Oracle에서 다중 참조 커서 반환 DAAB 및 C를 사용하여 절차 #
- 18. 라텍스 창 (다중 파일 구조)의 참조 제안
- 19. 소유권 및 다중 컨트롤러와 반 공유 객체 간의 참조 패턴?
- 20. 지도에 대한 참조 대 다중 참조에 대한 매핑
- 21. 다중 중첩 일반 클래스는 서로 어떻게 참조 할 수 있습니까?
- 22. 다중 Oracle 쿼리
- 23. T-SQL에서 접기?
- 24. SQL에서 'order by'매개 변수
- 25. SQL에서 매핑/연결
- 26. SQL에서 Count 쿼리
- 27. SQL에서 구문 분석 연도
- 28. SQL에서 PHP로 값 바꾸기
- 29. SQL에서 사용자 높이와 무게
- 30. SQL에서 변수 대체가 필요합니다
스키마에 대해 더 많이 게시 할 수 있습니까? 아직 받아 보지 못했습니다. – vodkhang
물론, 나는 3 개의 테이블 : 사무실, 객실 및 직원을 보유하고 있습니다. 그들은 자신의 ID (기본 키)와 다른 정보가있는 컬럼을 가지고 있습니다. 그런 다음 다른 테이블 (예 : 직원, 방 또는 사무실 전체)에서 하나, 하나 뿐인 열이있는 다른 테이블 인 DOCUMENT가 있으므로 다른 테이블 테이블의 기본 키 (따라서 ID가 ab34 인 방 A2에 문서를 작성한 경우 ID가 kv45 인 직원 Kevin 인 경우 "발신자"장소에 ab34를 쓸 수 있으므로 kv45를 쓸 수 있습니다. 도움이 되었으면 좋겠다. – AGarofoli