2016-04-19 8 views
0

Ich habe ein paar Tabellen, die von verschiedenen Systemen ohne eindeutige Kennung auf den Rohdaten generiert werden.Primärschlüssel in meinen Tabellen einrichten?

interaction_time, customer_id, employee_id 

Andere Dateien enthalten nicht den Zeitstempel und es gibt nur ein interaction_date:

Mehrere Dateien, die aus dem gleichen System sind, können auf der Grundlage der verbunden werden. Das Problem ist, dass manchmal derselbe Kunde mehrmals am selben Tag mit demselben Mitarbeiter sprechen kann. Die Verwendung von interaction_date, customer_id, employee_id ist nicht unbedingt eindeutig.

Mit Python (Pandas) finde ich normalerweise alle eindeutigen Werte von interaction_date, customer_id, employee_id. Ich filtere diese Zeilen als separaten Datenrahmen und mache meine Joins. Diese Daten sind also nur die Zeilen, in denen ein Kunde an einem bestimmten Datum einmal mit einem Mitarbeiter interagiert hat. Dann concat/anfügen die Zeilen, die mehrere Interaktionen hatten, wieder mit den Post-Joined-Daten zusammen.

Haben Sie Empfehlungen, wie Sie mit SQL Server so etwas einrichten können? Ich nehme an, dass es ziemlich üblich sein muss. Ich baue jetzt Tabellen und bin mir nicht sicher, was mein Primärschlüssel sein sollte ... ein zusammengesetzter Schlüssel des Datums/customer_id/employee_id? Wie gehe ich mit den Duplikaten um (diese Zeilen können nicht mit anderen Dateien verknüpft werden, da es keine eindeutige Möglichkeit gibt, die Daten miteinander zu verknüpfen)?

edit- Ich wollte nur hinzufügen, dass dies die granularsten Daten, die wir haben, zusammenhält. Dies würde verwendet werden, um eine Umfrage (die Wochen später empfangen werden könnte) zurück an eine bestimmte Interaktion zu binden und eine andere Datei mit einer Länge dieser Interaktion zu verknüpfen, und eine andere Datei, die angibt, ob bei dieser Interaktion ein Verkauf getätigt wurde.

usw.
+0

Haben andere Tabellen eine Fremdschlüsselbeziehung zu dieser? –

+0

Benötigen Sie auf jeden Fall eine ID für die Interaktion selbst. Dann werden Sie Fremdschlüssel für den Angestellten und den Kunden wollen. Scheint so, als ob dies eine Interactions-Tabelle sein sollte, daher sollten Sie keine Namen wie 'interaction_id' und' interaction_date' brauchen, wobei 'id' und' date' ausreichen sollten. – Devon

+0

Ich habe 7 separate Dateien als meine Datenquellen. Einige davon enthalten keine Zeitstempel. Mein Problem ist, wenn mehrere Interaktionen am selben Tag stattfinden. Angenommen, es gibt 2 Aufträge an einem Tag (kein Zeitstempel) für einen Kunden mit demselben Mitarbeiter. Es gibt 5 Anruflisten am selben Tag (mit einem Zeitstempel). Es gibt keine Möglichkeit für mich, sicher zu wissen, wie die 2 Bestellungen zu einem bestimmten Anruf zusammenpassen. Sicher, die Bestellungen fanden während 2 dieser Anrufe statt, aber ich weiß nicht, welche spezifische Interaktion die Bestellungen hatte. Daher ist es schwierig, eine Interaktions-ID zuzuweisen und zu wissen, wie sie sich auf verschiedene Dateien bezieht. – trench

Antwort

2

Da auch interaction_time, customer_id, employee_id nicht eindeutig nicht die Werte in der Datenbank identifizieren, können Sie zwei Dinge tun:

1) Verwenden Sie keinen Primärschlüssel überhaupt machen (obwohl es eine schlechte Praxis ist)

2) Machen Sie einen Feldanruf als interaction_id, der die Interaktion zwischen Verbraucher und Mitarbeiter eindeutig bestimmt. Dieses Feld kann auf automatisches Inkrementieren gesetzt werden.

+0

Meine Herausforderung mit Punkt 2 ist für Dateien, die nur das interaction_date haben (kein Zeitstempel in der Datei), customer_id, employee_id. Wenn es an diesem Datum 3 Interaktionen (Zeilen) für eine Mitarbeiter/Kunden-Kombination gibt, kann ich mir nicht vorstellen, wie ich es zu einer Datei mit 5 Zeilen mit dem Zeitstempel verbinden kann. So interagierten Kunde und Mitarbeiter fünfmal (Zeitstempel eingeschlossen), aber eine andere Datei ohne den Zeitstempel enthält nur eine Teilmenge dieser Interaktionen (3 von 5). Es gibt keinen wirklichen Weg, um sagen zu können, welche Wechselwirkungen mit Sicherheit zusammenhängen. – trench

+0

Warum benötigen Sie die Dateien mit interaction_date und nicht mit dem Zeitstempel? Nachdem Sie sie in die Datenbank geschrieben haben, können Sie sie nur noch auf der Basis von Daten abfragen. –

+0

Wahr. Der Nutzen der Verwendung besteht darin, dass 90% der Kunden und Mitarbeiter nur einmal an einem bestimmten Datum interagieren. So kann ich einen Wert aus einer Datei ohne Zeitstempel mit dem Zeitstempel zu anderen Dateien verknüpfen. Ein großer ist eine Bestellung. Da es bei einem Datum nur eine Interaktion zwischen dem Kunden und dem Mitarbeiter gab, weiß ich, dass die Bestellung während dieser Interaktion getätigt wurde. Das bedeutet, dass ich den Zeitstempel kenne, ich weiß, ob es irgendwann eine Umfrage gab, ich weiß, wie lange die Interaktion dauerte, usw. Es kann für die Analyse sehr wertvoll sein. – trench

Verwandte Themen