2010-11-25 18 views
1

我有一個數據庫存儲從多個站點獲取並通過各個站點API收集的產品的詳細信息。當我調用提要時,詳細信息存儲在數據庫表中。如何識別從多個Feed中收集的重複項目並將其鏈接到數據庫中

我遇到的問題是,由於賣家在許多網站上列出了完全相同的產品,我最終在數據庫中出現重複項目,然後當我在網頁上顯示它們時,出現很多重複項目。

問題是該物品沒有任何明顯的唯一標識符,它具有物品(其中可能有很多物品)的具體詳細信息,然後是賣家描述的物品。

我想讓項目顯示一次,然後給用戶詳細列出項目在哪裏列出。

我該如何識別進來的重複數據,而不會放慢整個數據庫?那麼我怎麼也會從所有副本中挑選一個廣告,然後存儲廣告展示的其他網站。

感謝您的任何幫助。

+0

可能正確執行Object#equal(Object)和java.util.Set成爲你的朋友。 – 2010-11-25 10:27:23

+0

Plz.can你澄清你使用哪個數據庫..因爲它會取決於數據庫。我認爲你需要避免重複記錄的表...我是否正確? – 2010-11-25 11:03:00

回答

2

問題有兩方面,兩者都在你身邊。當你弄清楚如何處理這些問題時,把代碼寫入一個程序(Java或SQL很容易)。我會先將它們命名,然後確定解決方案。

  1. 由於某些未知原因,您假設從多個網站收集產品說明不會收集同一產品。

  2. 您習慣了通用且無意義的Id列,當您使用電子表格原型功能時,這很好;但遠不及數據庫或開發級功能所需的範圍。您的用戶(或老闆)自然希望從數據庫獲得數據庫功能,並且您沒有提供任何數據庫功能。 (不,它不需要模糊邏輯串或任何種類的魔法。)

解決方案

這是IDEF1X標準的建模關係數據庫的精簡版;該部分是標識符。

  1. 你需要考慮在數據庫方面,想想你需要執行的功能,這意味着你不能使用自動遞增Id列的數據庫表。該列給出了一個電子表格RowId,但它並不意味着表格內容或標識產品的列的任何內容。

  2. 而且你不能簡單地從另一個網站上撕掉數據,你需要考慮你的網站對於產品的要求。貴公司對產品的理解是什麼?它如何識別產品?

  3. 確定列的所有列和數據類型。

  4. 確定哪些列是必需的,哪些是可選的。

  5. 確定哪些是強標識符。例如。 ManufacturerModel;短Product Name,不長Description(或可能爲貴公司,長描述一個標識符)。與您的用戶一起工作,並解決問題。

  6. 你會發現你確實有表的一小簇周圍Product,如ManufacturerProductType,也許Vendor

  7. 組織這些表,並歸他們,所以,你是不是複製數據。

  8. 確保你尊重這些標識符。選擇哪一個將是唯一的。這些是候選鍵。每桌至少需要一個,Product將會有多個。所有將被搜索的標識符都需要進行索引(唯一或不)。請注意,唯一索引不能爲空,因此您不能選擇可選列。

  9. 什麼使得Product的單個唯一標識符可能不是單個列。沒關係,我們可以評估多個數據庫中的密鑰列;他們被稱爲複合鍵

  10. 採取最好,最穩定(不會改變的)唯一標識符,候選鍵之一,並使主鍵

  11. 當且僅當,唯一的標識符,主鍵,這可能是一個複合鍵,很長,和一個主鍵,這是遷移到子表,然後添加因此不適合一個代理鍵。那將是Id列。請注意,這是一個額外的列和額外的索引。它不能代替Product的候選鍵,候選鍵;他們不能被刪除。

到目前爲止,我們在您的公司網站上有一個產品數據庫,這對您來說很有意義。現在我們可以評估網絡另一端的產品了;而當我們這樣做時,我們有一個強大的框架,我們可以通過這個框架來衡量我們從網絡另一端獲得的垃圾。

訂閱

  1. 你需要一個WebSite表來管理飼料。

  2. ProductWebSite之間將會有一個關聯表(多對多)。我們稱之爲ProductSite。它將只包含我們的ProductIdWebSiteCode. It may contain價格。這些內容對於單個饋送週期有效。

  3. 將每個訂閱源加載到臨時數據庫或架構,即一個傳入的ProductIn表,可能每個源網站都有一個表。這只是外部來源的平面文件。添加一列IsValid並將Default設置爲true。

  4. 然後編寫一些SQL,將ProductIn表及其寬鬆和軟盤內容與我們的Product表與其強標識符進行比較。

    • 的方式我會做的,獨立的檢查幾波,每個標記失敗的行,與IsValid爲false。在最後將IsValid行插入我們的ProductSite

    • 你可能很幸運,並樂觀地逃避。也就是說,只要您在幾個重要的欄目中找到匹配項,該匹配就是有效的。 (反轉默認並更新IsValid布爾值)。

    • 這是需要一些往返工作的過程,直到它平息下來。這就是爲什麼你需要與你的用戶一起使用標識符。目標是排除任何外部產品,但您的出發點將排除很多。這將包括返回到Product表,並改進標識符的內容(行中的值)以及用於標識匹配行的其他相關列。

  5. 對每個Web站點重複。

  6. 現在從我們的Product表中填入我們的網站,使用我們有信心的信息,並顯示哪些網站有從ProductSite出售的產品。

1

我不認爲這是一個代碼或數據庫問題(還)。你說:

的問題是,該項目沒有任何明顯的唯一標識符

你需要制定出uniqeness是什麼,你可以問一個電腦爲你做之前。這聽起來像你需要某種模糊的字符串相似度算法。

您認爲重複數據的一些示例可能會有所幫助。

相關問題