Ich habe eine Frage zur Datenmodellierung. Angenommen, ich habe folgende Tabellen 3 Schülertische. Source_table1 enthält A_ID als Primärschlüssel und Name als Attribut. Source_table2 hat B_ID als Primärschlüssel und Name & Adresse als andere Attribute. Source_table3 hat C_ID als Primärschlüssel und Name, Adresse und Alter als Attribute. Wenn wir eine neue Tabelle als Student Master mit allen Datensätzen in dieser Tabelle erstellen wollen, wie können wir das tun? Wenn wir eine Querverweistabelle erstellen, wie sollen wir dann dieses Problem angehen?Datenmodellierung mehrerer Tabellen desselben Typs in einer einzigen Tabelle, um alle Tabellen in einer einzigen Tabelle zu aggregieren
Antwort
Integration von Daten aus unterschiedlichen Quellen ist kompliziert. Am Ende möchten Sie mit etwas wie enden:
student (student_id PK, name, address, source1_id, source2_id, source3_id)
Es gibt jedoch einige Probleme zu lösen, um dorthin zu gelangen.
Identität
Wie werden Sie passende Datensätze in den verschiedenen Quellen zu identifizieren? Offenbar verwenden Ihre Quellen Ersatz-IDs, die jedoch außerhalb des Kontexts der Quellendatenbanken keine Bedeutung haben. Was Sie suchen, ist ein passender natürlicher Schlüssel. Der einzige gemeinsame Nenner unter den Quellen ist der Name eines Schülers, aber Namen sind notorisch schlechte Identifikatoren.
Es kann nützlich sein, die Daten tatsächlich zu testen, anstatt davon auszugehen, dass sie funktionieren oder nicht. Zum Beispiel kann eine Abfrage wie:
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
wiederholt für (student_source_2, student_source_3) und (student_source_1, student_source_3) sollten Sie geben einen Einblick in die Größe des Problems.
Sie könnten student_source_2 und student_source_3 basierend auf Name und Adresse abgleichen. Das kann zu besseren Ergebnissen führen, oder schlimmer, wenn die beiden Quellen unterschiedliche Adressen (oder Schreibweisen) für denselben Schüler haben. Das bringt uns zu unserer zweiten Sorge:
Inkonsistenz
Angenommen, Sie das Identitätsproblem lösen können, müssen Sie möglicherweise mit inkonsistenten Daten beschäftigen. Was ist, wenn die Quellen 2 und 3 unterschiedliche Adressen für denselben Schüler haben? Wie ermitteln Sie die richtige Adresse?
In einigen Fällen könnte es ausreichen, nur die Quellen zuzuordnen, ohne Inkonsistenzen zu beheben.
es in der realen Welt
Eine Technik Winging ich auf härteren Fällen verwenden ist eine Zuordnungstabelle von Hand zu bauen, z.B.
student_map (student_id PK, source1_id, source2_id, source3_id)
Jede der source_id-Spalten sollte eine eindeutige Einschränkung haben, und normalerweise sind alle 3 Nullable. Dies ist ein erster Schritt in Richtung der obigen Tabelle.
Ich würde beginnen, indem Sie alle die perfekte 1-zu-1-Übereinstimmungen einfügen, dann verlassen Sie jede Quelle mit der Zuordnungstabelle zu verbinden, um die unübertroffenen Datensätze zu erhalten. Wenn Sie die nicht übereinstimmenden Quellendatensätze nebeneinander und sortiert anzeigen, können Sie leicht passende Übereinstimmungen erkennen. Es ist langwierig und fehleranfällig, aber manchmal muss es auch getan werden.Bei Inkonsistenzen kann ich die vollständigste/am besten aussehende Quelle als Basis auswählen und die Lücken aus den anderen Quellen ausfüllen. Wenn Sie Lehrer oder Personen, die mit den tatsächlichen Schülern vertraut sind, einbeziehen oder ihnen Alternativen vorschlagen können, tun Sie dies auf jeden Fall.
Weitere Daten können sehr nützlich sein. Wenn die Quellen Sozialversicherungsnummern, Familieninformationen usw. haben, können diese verwendet werden, um Schüler zu vergleichen. Ich würde eine beliebige Anzahl von Abfragen verwenden, um perfekte Übereinstimmungen zwischen verschiedenen Informationen zu finden, und diese in die Mapping-Tabelle einfügen, bevor die Seite-an-Seite-Übereinstimmung durchgeführt wird.
Sie können feststellen, dass eine Quelle aufgrund eines schlechten Designs interne Konsistenzprobleme hat - z. mehrere Datensätze für denselben Schüler. Dies kann erfordern, dass die Quelldaten vor dem Fortfahren behoben werden müssen.
Ein gutes Verständnis des relationalen Modells von Daten ist für diese Art von Arbeit von unschätzbarem Wert, da Sie Kandidatenschlüssel, Abhängigkeiten und Anomalien identifizieren.
Schwer zu sagen. Speichern alle diese Tabellen Daten über dieselben Entitäten? – ATC
Was Sie tun möchten, ist unklar. Wir verstehen, dass Sie die Tabellen konsolidieren möchten. Möchten Sie jedoch die alten Primärschlüssel beibehalten? Möchten Sie 1 der 3 als Konsolidierungspunkt verwenden? Sie haben ein Bild Ihrer Quelltabellen, das vielleicht ein Beispiel für das darstellt, was Sie ebenfalls erreichen möchten. – Matt
Sie haben Daten über Schüler in der Tabelle. Diese Tabellen stammen aus verschiedenen Quellen. Schülerdetails können in mehreren Tabellen vorhanden sein oder nur in einem vorhanden sein. Der alte Schlüssel kann beibehalten werden oder ein neuer Schlüssel kann verwendet werden. Ich muss eine Student-Master-Tabelle erstellen, die eindeutige Datensätze enthält. Es dürfen keine doppelten Datensätze vorhanden sein. Da alle Tabellen unterschiedliche Schlüssel haben, können sie jedoch auf denselben Datensatz verweisen, in dem die andere Tabelle ebenfalls einen anderen Schlüssel verwendet. So, wie man sich nähert. – Umesh