2

我知道有很多問題都有同樣的問題,但我經歷了很多答案,但不幸的是,我不明白或不滿意。產品數據庫的多個變體

目標 我希望我的產品可以有多個屬性,並根據他們的組合,他們可以有自己的價格,SKU和股票

T-狗屎產品的尺寸,顏色和材質屬性(選項)

,所以我想這個靈活strucute是

顏色:紅色,尺碼:M,材質:所以價格$ 2,sku XXX,現貨4 顏色:黑色,尺碼:加大碼,材質:硬 - >售價$ 3,sku XXX,現貨3 顏色:紅色,尺碼:L, sKu XXX,股票4

現在我有以下結構,如果只提供了一個屬性(選項),那麼可以。但它不適合變化(組合)。

產品表

CREATE TABLE `products` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `brand_id` int(11) DEFAULT NULL, 
    `vendor_id` int(11) NOT NULL, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `long_description` longtext COLLATE utf8_unicode_ci NOT NULL, 
    `short_description` longtext COLLATE utf8_unicode_ci, 
    `images` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `weight` decimal(8,2) NOT NULL, 
    `discount` int(11) DEFAULT NULL, 
    `discount_start` timestamp NULL DEFAULT NULL, 
    `discount_end` timestamp NULL DEFAULT NULL, 
    `status` tinyint(4) NOT NULL, 
    `released_on` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

選項表

CREATE TABLE `options` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

Products_Options表

CREATE TABLE `products_options` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `product_id` int(11) NOT NULL, 
    `sku` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `option_id` int(11) DEFAULT NULL, 
    `option_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `unit_price` decimal(8,2) NOT NULL, 
    `available_stock` int(11) NOT NULL, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

所以products_options表可存儲產品在下列方式

Color: Red -> price $1, sku xxx, stock 3 
Size: M -> price $1, sku xxx stock 3 

但是,如果我想存儲的顏色也不能反映:紅尺碼:M有一個價格和SKU和股票

感謝

+1

搜索我添加的EAV標籤。 –

+0

@Raheel我希望你有解決辦法。你能提供答案嗎? –

+0

@SankalpTambe我放棄了使用SQL –

回答

0

你應該嘗試將價格,SKU和庫存字段放入您的產品表中。每個獨特的產品都有這些字段中的一個,屬於產品表。 Please look at the sample db schema.

+0

這不是解決我的問題兄弟。你如何查詢例如:獲取所有紅色和小尺寸的襯衫? –

0

你將產品的主要信息及其他信息(大小/顏色)分成2個表..

產品(名稱,說明等) - 這將是所有有產品相同的規格 - 例如一定範圍的襪子..它的「家庭」 - 它不存儲任何股票,將它視爲空殼。重要的是要注意,在這裏您可以區分女性和男性版本的產品併爲每個產品創建一個新產品。

產品數量:這將列出p roduct(上面),然後在每個變體上有多行的大小/顏色列 - 如果你有3(大小,顏色,重量),你需要3行。(進一步去非衣服物品) - 這將是產品的主要「規格」 - 即中型或大型,或330毫升,200瓦,基本上決定了該裝置的基本尺寸,無論是毫升,毫米,英寸,克,瓦特,伏特..你可以擴大這一點 - 銘記產品類型將決定在哪裏分裂兩個。衣服有顏色和大小,但油箱可能有一升作爲主要區別,也可能是一種顏色 - 所以你可以有一個varchar列,並輸入任何單位,加侖,英尺,(即時使用矩陣1,矩陣2,矩陣3更一般的..)

您將需要一個新的行爲每種顏色大小..在中藍色的襪子是一個不同的產品在小藍襪子..

主要功能差異應該是一個新的產品 - 也就是說,如果你有一個揚聲器設置類似於另一個型號,但有說 - 額外的藍牙,這將是一個新的頂級產品..你必須聰明何時分裂大小/顏色和何時創建一個新產品。您存儲在第二表中只有顏色/大小的變化對您的例子..

拴起來:

**舉例產品:男士塞拉利昂的Dri羽絨服**

Products表(ID ,名稱,描述):

221,男裝塞拉利昂DriDown全天候外套,大質量的3個賽季的外套喇嘛喇嘛

ProductsQty (ID,PRODID,大小,顏色,數量)

998,221,大,,22

999,221,大,,4

如果你有一個以上一個商店你可以在一個新表中使用ProductsQty id,併爲其中的每個子產品提供storeid和qty ..

你也可以將sku存儲在任一表中 - 如果家族擁有相同的sku存儲它在產品中,如果沒有的話 - 把它放在ProductsQty表格中..

現在你可以搜索任何尺寸/顏色/ SKU - 希望這是有道理的..

+0

謝謝您的回答,但這並不能解決我的問題。我也想到了這個解決方案,但是如果有一個新的屬性,例如模型。你必須調整數據庫表,然後我不希望這樣。 – Refilon