DB/엔티티 디자인 : 여러 테이블 중 하나와 관련된 테이블
-
03-07-2019 - |
문제
ㅏ 보고서 여러 차트가있을 수 있습니다. 그만큼 차트 테이블은 다음과 같이 보입니다.
- 차트 -- ID, 차트, 보고서, ...
그만큼 차트 위는 차트 어느 쪽이든 하나 다음 차트 유형 중 :
- 선: 차트, 두께, yaxis, Xaxis, 색깔, ...
- 파이: 차트, 반지름, 색깔, ...
- 술집: 차트, 너비, 색깔, 국경, ...
SQL Server를 사용하고 있으며 불행히도 CouchDB 등을 사용하는 것과 같은 대체 솔루션은 실행 가능한 옵션이 아닙니다. 또한이 테이블을 엔티티 프레임 워크를 사용하여 엔터티에 매핑하려고합니다.
이 디자인은 나의 첫 번째 찌르기 이며이 디자인의 여러 문제를 봅니다.
- 차트.보고서 여러 테이블에서 외국 키가 될 수 없으므로 FK를 시행하는 것이 문제입니다.
- SQL (또는 LINQ) 쿼리를 실행할 때는 차트 유형을 가져 오려면 두 쿼리를 실행 한 다음 해당 테이블을 쿼리해야합니다. 아니면 a 가입하다 차트 데이터를 얻기 위해 모든 테이블에 대해.
- 차트 유형에 대한 조인을 할 때 차트 이 테이블을 가로 질러 독특해야합니다 차트.차트 하나만지도 선.차트 또는 술집.차트 또는 파이.차트.
- 이것을 EF로 매핑하는 것은 까다로울 것입니다.
나는 이것이 규정 된 솔루션이 있고 그것을 처리 할 수있는 방법이있는 충분한 문제라고 생각합니다.
나는 디자인으로 올바른 길을 가고 있습니까? 그렇다면 위의 문제를 극복하는 방법 (FK, 조인, 여러 테이블에서 고유 한 ID 및 매핑)을 극복하는 방법.
해결책
이것 대답 전략에 대해 매우 포괄적입니다. SQL 팀의 기사 SQL Server에서 테이블 상속을 구현합니다 내가 원하는 곳을 얻었다.
다른 팁
나는 이것을 테이블 상속 체계로 다루고있다 :
Chart (ChartId, ChartTypeId)
PK (ChartId, ChartTypeId)
CHECK ChartTypeId IN ('Line', 'Bar', 'Pie')
LineChart (ChartId, ChartTypeId)
PK (ChartId, ChartTypeId)
FK (ChartId, ChartTypeId) -> Chart
CHECK ChartTypeId IN ('Line')
차트를 추가하려면 먼저 "기본"차트 테이블을 추가 한 다음 적절한 "하위 유형"차트 테이블에 추가합니다. 체크 제약 조건은 모든 것을 줄을 유지합니다.
라인 차트. 파이 차트 및 막대 차트는 특수한 형태의 차트입니다.
이 패턴에 대한 좋은 기사에 대한 조회 "일반화 전문화 관계형 모델링".
또는 차트 데이터를 얻으려면 모든 테이블에 대한 조인을 실행해야합니다.
예, 괜찮습니다.
제휴하지 않습니다 StackOverflow