Wie doppelte Elemente zu identifizieren, aus mehreren Feeds und Link zu ihnen in einer Datenbank gesammelt
-
28-09-2019 - |
Frage
habe ich eine Datenbank Details der Produkte zu speichern, die von vielen Seiten genommen werden, und versammelten sich durch die einzelnen Standorte API. Als ich den Feed aufrufen, werden die Details in einer Datenbanktabelle gespeichert.
Das Problem, das ich habe, ist, dass, weil das genau gleiche Produkt wird vom Verkäufer auf vielen Websites aufgelistet ich doppelte Elemente in meiner Datenbank am Ende mit, und dann, wenn ich sie auf einer Webseite angezeigt werden dort sind viele Duplikate.
Das Problem ist, dass das Element keine offensichtliche eindeutige Kennung hat, hat sie spezifische Details des Artikels (von denen könnte es viele sein), und dann eine Beschreibung des Artikels vom Verkäufer.
Was würde Ich mag es für das Element einmal zu zeigen, und dann die Benutzerdaten von dem, wo sonst der Artikel aufgeführt ist.
Wie würde ich die Duplikate identifizieren, die kommen in haben, ohne die gesamte Datenbank zu verlangsamen? Wie würde ich wähle auch dann eine Anzeige von allen den Duplikaten, und speichern Sie dann, was die Anzeige andere Seiten angezeigt auf.
Vielen Dank für jede Hilfe.
Lösung
Das Problem ist zweifach, und beide sind auf Ihrer Seite. Wenn Sie herausfinden, wie er damit umgehen, den Code in ein Programm zu schreiben (wird Java oder SQL einfach sein). Ich werde sie zuerst einen Namen geben und dann die Lösungen identifizieren.
-
Aus irgendeinem unbekannten Grund, Sie haben angenommen, dass das Sammeln Produktbeschreibungen von mulitple Websites wird nicht collect das gleiche Produkt.
-
Sie sind mit dem gemeinsam verwendet und unsinnig
Id
Säule, was in Ordnung ist, wenn Sie mit Tabellen arbeiten Funktionalität Prototyping; aber es ist bei weitem nicht, was für eine Datenbank oder Entwicklungs-Level-Funktionalität erforderlich ist. Ihre Benutzer (oder Chef) haben natürlich Datenbankfähigkeit aus der Datenbank zu erwarten, und Sie haben nicht zur Verfügung gestellt. (Und nein, es erfordert keine Fuzzy-String-Logik oder Magie jeglicher Art.)
Lösung
Dies ist eine verkürzte Version des IDEF1X -Standard für die Modellierung Relationale Datenbanken; der Abschnitt re Identifiers.
-
Sie müssen in der Datenbank denken, und denken Sie an die Datenbank-Tabellen müssen Sie Ihre Funktion erfüllen, das heißt, Sie sind nicht erlaubt eine automatische Erhöhung
Id
Spalte zu verwenden. Das Spalt gibt eine Tabelle einRowId
, es gibt aber nichts über den Inhalt der Tabelle bedeuten, oder die Spalten, die ein Produkt aus. identifizieren
-
Und Sie können nicht einfach rip Daten aus einer anderen Website, müssen Sie darüber nachdenken, was Ihre Website für Produkte erfordert. Was macht Ihr Unternehmen ein Produkt verstehen ist, und wie sie ein Produkt nicht identifizieren?
-
Identifizieren Sie alle Spalten und Datentypen für die Spalten.
-
Identifizieren Sie, welche Spalten sind obligatorisch und welche optional sind.
-
Identifizieren Sie, welche stark sind Identifiers . Z.B.
Manufacturer
undModel
; der kurzeProduct Name
, nicht die langeDescription
(oder für Ihr Unternehmen sein kann, die lange Beschreibung ist ein Identifier). Arbeiten Sie mit Ihren Benutzern und arbeiten, dass aus. -
Sie finden Sie tatsächlich eine kleine Gruppe von Tabellen um
Product
haben, wieManufacturer
,ProductType
, vielleichtVendor
, etc. -
Organisieren Sie die Tabellen und Normalisieren sie, so dass Sie keine Daten duplizieren.
-
Stellen Sie sicher, behandeln Sie diese Identifiers mit ein wenig Respekt. Wählen Sie, welche einzigartig sein wird. Das ist Candidate Keys . Sie müssen mindestens eine pro Tisch, und es wird mehr als eine in
Product
. Alle die Bezeichner, die auf durchsucht wird, müssen indiziert werden (Unique oder nicht). Beachten Sie, dass Eindeutige Indizes nicht Nullable sein können, so dass Sie nicht eine optionale Spalte auswählen können. -
Was macht einen einzigen Unique Identifier für
Product
kann nicht eine einzige Säule sein. Das ist in Ordnung, wir können mehrere Spalten für Schlüssel in Datenbanken auswerten; sie genannt werden Compound Keys . -
Nehmen Sie die optimale und stabile (eine, die nicht ändern) Unique Identifier, einer der Kandidaten Keys, und machen, dass die Primary Key .
-
Wenn und nur dann, wenn die eindeutige Kennung, die Primärschlüssel, die eine Verbindung Key sein können, ist sehr lang, und daher ungeeignet für einen Primärschlüssel, die die untergeordneten Tabellen migriert wird, dann Add Surrogate Key . Das wird die
Id
Spalte sein. Beachten Sie, dass das ist eine zusätzliche Spalte und zusätzlicher Index. Es ist kein Ersatz für die Identifikatoren vonProduct
, die Candidate Keys; sie können nicht entfernt werden.
Bisher haben wir eine Produktdatenbank auf Ihrem Unternehmen Seite der Bahn, die es sinnvoll ist. Jetzt sind wir in der Lage, Produkte von der anderen Seite der Bahn zu bewerten; und wenn wir das tun, haben wir einen Rahmen auf unserer Seite that ist stark, gegen die wir den Müll messen, dass wir von der anderen Seite der Bahn zu bekommen.
Feeds
-
Sie benötigen eine
WebSite
Tabelle die Feeds zu verwalten. -
Es wird eine assoziative Tabelle (many-to-many) zwischen
Product
undWebSite
sein. Nennen wir esProductSite
. Es enthält nur unsereProductId
und dieWebSiteCode. It may contain
Price`. Die Inhalte sind gültig für einen einzelnen Vorschubzyklus. -
Legen Sie jede Einspeisung in eine Staging-Datenbank oder ein Schema, ein eingehender
ProductIn
Tisch, vielleicht einen pro Quelle-Website. Dies ist nur die Flat-Datei von der externen Quelle. Fügen Sie eine SpalteIsValid
und stellen Sie den Standard auf true gesetzt. -
Dann einige SQL schreiben, dass
ProductIn
Tabelle vergleicht, mit seinen lockeren und Floppy-Inhalten, mit unsererProduct
Tabelle mit seinem starken Identifiers.-
So wie ich das tun würde, ist es, mehr Wellen von separaten Kontrollen, die jeweils die Zeilen markiert, die mit
IsValid
auf false scheitern. Am Ende Legen Sie dieIsValid
Zeilen in unsererProductSite
. -
Vielleicht haben Sie Glück, und mit einem optimistischen Ansatz weg. Das heißt, solange Sie ein Spiel auf ein paar wichtigen Säulen zu finden, ist das Spiel gültig. (In umgekehrter Reihenfolge Standard und Aktualisierung der
IsValid
boolean). -
Dies ist der proc, die etwas zurück und nach vorne Arbeit erfordern, bis sie absetzt. Deshalb sollten Sie arbeiten müssen Sie mit Ihren Benutzern die indentifiers wieder. Das Ziel ist, keine externen Produkte auszuschließen, aber Ihr Ausgangspunkt viele ausschließen. Das wird in unserer
Product
Tabelle enthalten gehen zurück und die Verbesserung die Inhalte (Werte in den Zeilen) der Identifikatoren und andere relevante Spalten, dass Sie passende Zeilen zu identifizieren, verwenden.
-
-
Wiederholen Sie für jede Website.
-
Jetzt ist unsere Webseite aus unserer
Product
Tabelle füllen, Informationen mit, dass wir zuversichtlich sind, und zeigen, welche Websites ein Produkt zum Verkauf vonProductSite
haben.
Andere Tipps
Ich glaube nicht, das ein Code oder Datenbankproblem ist (noch) nicht. Sie sagen:
Das Problem ist, dass das Element hat keine offensichtliche eindeutige Kennung
Sie müssen herausfinden, was das uniqeness ist, bevor Sie einen Computer fragen können Sie das zu tun. Es klingt wie Sie irgendeine Art von Fuzzy, string Ähnlichkeitsalgorithmus benötigen.
Einige Beispiele von Daten, die Sie Duplikate helfen könnte in Betracht ziehen.