我是初學者,這是我的第一個真正的專案。下圖顯示了我一直在努力達到的目標。但它變得如此復雜和令人困惑。所以我問是否有不同的方法可以在記住幾個鍵的情況下更容易地設計表格:
屬性不會重復。
顏色、尺寸、材料表有不同的結構,例如(顏色有 name_ar、name_en 和顏色影像的路徑)。
一開始我沒有使用 SKU,但現在我想我可能需要將它們分開。
不同的顏色可能有不同的尺寸等等
。但在那之后,我想不出另一種方式來達到我想要的結果。
感謝您提前提供所有答案
uj5u.com熱心網友回復:
看起來您正在嘗試在這里進行 EAV 架構,但并沒有真正理解它的重點\問題。
EAV 架構的重點是垂直和水平地構建資料庫。看起來您只是在創建一堆旋轉屬性,而不是實際的 EAV 設計。這在實踐中意味著,而不是:
Table: Shirts
Columns: ID, Label, Size, Color, Weave, Fabric, Made in, Class, Discount blah blah blah
你要:
Entity:
ID:1, [Label:'Cool Shirt', Price: 19.00, Other required properties]
然后你的屬性表
attribute:
entity: 1
attribute:type
value: shirt
attribute:
entity: 1
attribute:color
value: red
attribute:
entity: 1
attribute:size
value: large
這種架構風格的要點在于,并非所有物體都需要所有屬性,并且您不想制作一個包含物體可能擁有的所有潛在屬性的超長表格。
您可以進一步向下透視資料透視表,這看起來就像您在此處嘗試使用透視 ID \ 命名所做的那樣:
attribute_values:
entity: 1
attribute:3
value: 5
Table attribute_map:
id: 3
value:"color"
Table property_map:
id:5
attribute:3
value:"red"
不管幾件大事。
父級應該是子表本身的屬性,即“物體”部分。不需要另一個表映射關系。還可以更輕松地運行遞回呼叫以獲得您想要的最終答案)
價格之類的東西(通常)不適合這個模型,也應該被指定為頂級物體的一列。當您決定如何構建頂級物體時,請記住這一點。
確保向所有樞軸添加復合索引。
編輯您想要做的事情:
所以請記住,每個物體都只是一個屬性的集合。
Enitity 3: Shirt, White, XL
Enitity 4: Shirt, White, X
Shirt-White-X is the "SKU" as far as your database is concerned in EAV.
您只需遞回地向下遍歷所有樹,直到完全表達所有屬性 \ 子屬性。
請記住,“物體”只是屬性的合并,在這種情況下,您還希望將其作為唯一鍵(基本上是 SKU)進行操作。獎勵您可以使用唯一索引來強制執行它。
從(確切地說)你所說的你只是想計算庫存,這可以通過幾種方式完成。通常,您只會制作另一層(猜測,因為我不知道您實際上要做什么)。
Table: Inventory
Id (store): 1
Attribute (product_id): 4
Value (inventory): 7
您可以創建一個更高層的物體,如商店,并實際創建分配給商店的產品物件。真的取決于你的系統是如何建模的,以及你想走多遠。
這對抽象化\你實際在做什么\你的整體架構如何作業有了更多的了解。
成為 EAV 純粹主義者很少有用。將附加到每個產品物體的價格等屬性通常更容易直接添加到頂級物體。您不是要在這里重新構建 magento,純 EAV 架構有一些主要缺點,因為它變得更加復雜。它可以非常靈活。它還可以根據其構建方式創建極其低效的系統(您好,醫療行業)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/386708.html
