Wie doppelte Elemente zu identifizieren, aus mehreren Feeds und Link zu ihnen in einer Datenbank gesammelt

StackOverflow https://stackoverflow.com/questions/4275954

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.

War es hilfreich?

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.

  1. Aus irgendeinem unbekannten Grund, Sie haben angenommen, dass das Sammeln Produktbeschreibungen von mulitple Websites wird nicht collect das gleiche Produkt.

  2. 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.

  1. 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 ein RowId, es gibt aber nichts über den Inhalt der Tabelle bedeuten, oder die Spalten, die ein Produkt aus.

  2. identifizieren
  3. 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?

  4. Identifizieren Sie alle Spalten und Datentypen für die Spalten.

  5. Identifizieren Sie, welche Spalten sind obligatorisch und welche optional sind.

  6. Identifizieren Sie, welche stark sind Identifiers . Z.B. Manufacturer und Model; der kurze Product Name, nicht die lange Description (oder für Ihr Unternehmen sein kann, die lange Beschreibung ist ein Identifier). Arbeiten Sie mit Ihren Benutzern und arbeiten, dass aus.

  7. Sie finden Sie tatsächlich eine kleine Gruppe von Tabellen um Product haben, wie Manufacturer, ProductType, vielleicht Vendor, etc.

  8. Organisieren Sie die Tabellen und Normalisieren sie, so dass Sie keine Daten duplizieren.

  9. 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.

  10. 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 .

  11. Nehmen Sie die optimale und stabile (eine, die nicht ändern) Unique Identifier, einer der Kandidaten Keys, und machen, dass die Primary Key .

  12. 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 von Product, 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

  1. Sie benötigen eine WebSite Tabelle die Feeds zu verwalten.

  2. Es wird eine assoziative Tabelle (many-to-many) zwischen Product und WebSite sein. Nennen wir es ProductSite. Es enthält nur unsere ProductId und die WebSiteCode. It may containPrice`. Die Inhalte sind gültig für einen einzelnen Vorschubzyklus.

  3. 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 Spalte IsValid und stellen Sie den Standard auf true gesetzt.

  4. Dann einige SQL schreiben, dass ProductIn Tabelle vergleicht, mit seinen lockeren und Floppy-Inhalten, mit unserer Product 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 die IsValid Zeilen in unserer ProductSite.

    • 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.

  5. Wiederholen Sie für jede Website.

  6. Jetzt ist unsere Webseite aus unserer Product Tabelle füllen, Informationen mit, dass wir zuversichtlich sind, und zeigen, welche Websites ein Produkt zum Verkauf von ProductSite 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top