2013-08-30 69 views
0

我正在開發一個涉及構建社交網絡樣式應用程序的項目,該應用程序允許用戶在其網絡中共享庫存/產品信息(用於採購)。具有每個用戶唯一的大數據集的MySQL關係數據庫

我是一個體面的程序員,但我承認不是數據庫的專家;當談到數據庫設計時更是如此。目前,用戶/公司信息通過MySQL中的關係數據庫方案存儲,該方案運行良好。

我的問題是,雖然我的關係方案出色地爲用戶/公司信息工作,但如何實現庫存信息令我困惑。問題是,每個「庫存清單」都將包含特定於產品類型的不同屬性,但與列表中每個其他產品的屬性相同。我的第一個想法是爲每個「庫存清單」創建一個表格。但是,我覺得這樣會非常混亂,並會使KDD未來的嘗試複雜化。我也(短暫)考慮使用'主庫存'和存儲信息(例如變量類別和數據作爲JSON字符串,但我認爲JSON字符串MySQL將成爲一個更大的痛苦屁股。我的問題基本上是其他人如何解決這個問題?或者更一般地說,堅持關係數據庫管理原則,將類似類型的獨特大型數據集與父級用戶相關聯的「正確」方式是什麼? ,我知道我可以輕鬆地打造一些可行的東西,但我真的對如何解決這個問題達成共識感興趣。

謝謝!

+0

如何解決這個問題包括詢問你打算如何使用這些不標準的字段?如果只顯示它們,則將整個描述放在varchar或nvarchar(max)字段中將起作用,其中將查詢作爲獨立字段的inteh表的常見功能。如果您需要查詢大量不同類型的屬性,還有其他選擇包含EAV或文檔數據庫。 – HLGEM

+0

是的,我將不得不在PHP中進行一些操作,然後: – CRK

+0

是的,我將不得不在PHP中進行一些操作,然後將它傳遞給用戶瀏覽器中的Backbone應用程序。由於數據必須在每個事務上進行操作,因此我認爲將JSON(或任何其他VARCHAR)解析,操作等操作會對處理器密集程度太高。另外,我覺得將所有內容存儲在VARCHAR中最終會變成噩夢因爲庫存數據可以快速增加。 對不起,我上面的評論被切斷了。 – CRK

回答

1

我會查看這篇文章:Entity Attribute Value Database vs. strict Relational Model Ecommerce

我總是看到這樣做的方式是爲存儲通用公共字段的庫存創建基表。產品ID,產品名稱等。

然後,您又擁有另一個具有動態屬性的表。一個非常受歡迎的例子就是Wordpress。如果你看看他們的數據模型,他們會大量使用這個想法。

這種方法的好處之一是它很靈活。其中一個主要的缺點是速度慢,可能會產生複雜的代碼。

我會拋出一個使用文檔數據庫的替代方案。在這種情況下,每個文檔可以有不同的模式/結構,您仍然可以針對它們運行查詢。

+0

偉大的答案。我會做一些閱讀以決定哪種解決方案適合我的需求。快速的問題:我覺得像EAV數據庫會適合類似WordPress的東西,因爲屬性/數據的總數將保持相對較低。在一個可能有數十萬種產品的系統中,這個選項是否仍然被認爲是可行的,每個產品有5到10個屬性? – CRK

+0

實際上Wordpress使用它很重。他們擁有數百個屬性的順序,而不僅僅是一小撮。這有點令人驚訝,並且可能至少Wordpress網站運行速度非常慢的原因之一。他們的一個_huge_錯誤(在我看來)是使屬性值字段成爲一個字符串。如果你存儲一個整數,它將被存儲爲一個字符串,然後轉換爲一個整數。毛。 – ryan1234