1

데이터 모델링과 관련하여 질문이 있습니다. 다음 테이블 3 개의 학생 테이블이 있다고 가정합니다. Source_table1은 A_ID를 기본 키로, Name을 특성으로 포함합니다. Source_table2에는 기본 키로 B_ID가 있고 다른 속성으로는 & 주소로되어 있습니다. Source_table3에는 기본 키로 C_ID가 있고 특성으로 이름, 주소 및 기간이 있습니다. 우리가 그 테이블의 모든 레코드를 가진 Student Master라는 새로운 테이블을 만들고 싶다면 어떻게해야할까요? 상호 참조 테이블을 만드는 경우 어떻게 그 문제에 접근해야합니까? 다른 소스에서데이터 동일한 유형의 여러 테이블을 하나의 테이블로 모델링하여 모든 테이블을 단일 테이블로 통합

enter image description here

+0

말하기 어렵습니다. 이 모든 테이블은 동일한 엔티티에 대한 데이터를 유지합니까? – ATC

+0

원하는 작업이 확실하지 않습니다. 우리는 당신이 테이블을 통합하고 싶다고 생각하지만 이전 기본 키를 유지하기를 원하십니까? 3 중 하나를 통합 지점으로 사용 하시겠습니까 ??? 당신은 소스 테이블의 이미지를 가지고있을 것입니다. 아마도 당신이 원하는 것을 보여줄 것입니다. – Matt

+0

테이블에있는 학생들에 관한 데이터가 있습니다. 이 표는 여러 소스에서 제공됩니다. 학생 세부 정보는 여러 테이블에 있거나 하나의 테이블에있을 수 있습니다. 이전 키를 유지하거나 새 키를 사용할 수 있습니다. 고유 한 기록이있는 학생용 마스터 테이블을 만들어야합니다. 중복 된 레코드가 없어야합니다. 모든 테이블은 다른 키를 가지고 있기 때문에 다른 테이블이 다른 키를 사용하고있는 동일한 레코드를 가리킬 수도 있습니다. 그래서 그것에 접근하는 방법. – Umesh

답변

1

통합 데이터는 복잡하다. 마지막으로 다음과 같이 끝내기를 원합니다.

student (student_id PK, name, address, source1_id, source2_id, source3_id) 

그러나 거기에 도달하기 위해 해결해야 할 몇 가지 문제가 있습니다.

신원 당신이 다른 소스에 일치하는 기록을 식별하는 방법

? 소스가 대리 식별자를 사용하는 것처럼 보이지만 소스 데이터베이스의 컨텍스트 외부에서는 의미가 없습니다. 당신이 찾고있는 것은 적합한 자연 키입니다. 출처 중 유일한 공통 분모는 학생의 이름이지만 이름은 악명 높은 식별자입니다.

데이터가 실제로 작동하는지 테스트하지 않고 실제로 테스트하는 것이 유용 할 수 있습니다. 예를 들어, 쿼리는 다음과 같은 :

SELECT s1.name, COUNT(*) AS amount 
FROM student_source_1 s1 
INNER JOIN student_source_2 s2 ON s1.name = s2.name 
GROUP BY s1.name 
HAVING COUNT(*) > 1 

은 (student_source_2, student_source_3) 및 (student_source_1, student_source_3) 당신에게 문제의 크기에 대한 통찰력을 제공한다 반복.

이름과 주소를 기반으로 student_source_2와 student_source_3을 일치시킬 수 있습니다. 두 학생의 학생이 동일한 주소 (또는 철자)를 사용하면 더 나은 결과를 얻을 수 있습니다. 즉, 두 번째 관심사 우리에게 가져다 : 당신이 정체성 문제를 해결할 수 있습니다 가정

불일치

, 당신은 일치하지 않는 데이터를 처리해야 할 수도 있습니다. 소스 2와 3이 동일한 학생의 주소가 다른 경우에는 어떻게됩니까? 올바른 주소는 어떻게 결정합니까?

경우에 따라 불일치를 해결하지 않고 원본을 매핑하는 것으로 충분할 수 있습니다. 현실 세계에서 내가 더 열심히 경우에 사용

한 기술을 해결 해보려고 하는것

손, 예를 들면하여 매핑 테이블을 구축하는 것입니다

student_map (student_id PK, source1_id, source2_id, source3_id) 

각 source_id 열에는 고유 제한 조건이 있어야하며 대개 3 개 모두는 null을 허용합니다. 위의 학생 표를 향한 첫 번째 단계입니다.

완전한 1 대 1 일치를 모두 삽입 한 다음 매핑 테이블과 함께 각 원본을 결합하여 일치하지 않는 레코드를 얻습니다. 타의 추종 할 수없는 소스 레코드를 나란히 놓고 정렬하면 가능성이있는 일치 항목을 시각적으로 쉽게 파악할 수 있습니다. 지루하고 오류가 발생하기 쉬운 작업이지만 때로는 관계없이 수행해야합니다.불일치가 생길 때 나는 가장 완벽하고/가장 잘 보이는 원천을 기본으로 선택하고 다른 원천과의 차이를 채울 수 있습니다. 실제 학생과 친숙한 교사 나 사람들을 참여시킬 수 있거나 선택할 수있는 대안을 제시 할 수 있다면 꼭 그렇게하십시오.

더 많은 데이터가 매우 유용 할 수 있습니다. 출처에 사회 보장 번호, 가족 정보 등이 있으면 학생들을 대조하는 데 사용할 수 있습니다. 필자는 여러 가지 정보 중에서 완벽한 일치를 찾기 위해 임의의 수의 쿼리를 사용하여 side-by-side 매칭을 수행하기 전에 매핑 테이블에 이들을 삽입합니다.

소스가 디자인이 좋지 않아 내부 일관성 문제가 있음을 잘 알고 있습니다. 같은 학생에 대한 여러 기록. 계속하기 전에 원본 데이터를 수정해야 할 수 있습니다.

데이터의 관계형 모델을 잘 이해하면 후보 키를 식별하고 종속성을 확인하고 예외가 발생할 것이므로 이러한 유형의 작업에서는 매우 중요합니다.

관련 문제