2013-02-12 67 views
0

我正在建立一個包含產品和變體的電子商務系統,每個系統都有1到5個存儲在Amazon S3上的圖像。在我存儲S3 URL的地方使用單獨的圖像表是否被認爲是最佳做法,或者只需向每個產品和變體表中添加5個圖像列即可接受?有一個單獨的圖像表意味着,在進口時我需要做6個選擇,然後插入(以確保產品和它的每個圖像不存在,然後導入它們),而不是1.並且,在檢索時,我需要加入的圖像表到產品表5次把它與產品退回圖像,像這樣:是電子商務網站的圖像表最佳實踐嗎?

SELECT prd."id" AS id, prd."title" AS title, prd."description" AS description, 
    prd."createdAt" AS productcreatedate, 
    prdPic1."url" AS productpic1, 
    prdPic2."url" AS productpic2, 
    prdPic3."url" AS productpic3, 
    prdPic4."url" AS productpic4, 
    prdPic5."url" AS productpic5, 
    brd."name" AS brandname, brd."id" AS brandid, 
    cat."name" AS categoryname, cat."id" AS categoryid, 
    prt."name" AS partnername, prt."id" AS partnerid 
FROM "Products" prd 
LEFT OUTER JOIN "Pictures" prdPic1 ON prdPic1."entityId" = prd."id" AND prdPic1."entity" = '1' 
AND prdPic1."sortOrder" = 1 
LEFT OUTER JOIN "Pictures" prdPic2 ON prdPic2."entityId" = prd."id" AND prdPic2."entity" = '1' 
AND prdPic2."sortOrder" = 2 
LEFT OUTER JOIN "Pictures" prdPic3 ON prdPic3."entityId" = prd."id" AND prdPic3."entity" = '1' 
AND prdPic3."sortOrder" = 3 
LEFT OUTER JOIN "Pictures" prdPic4 ON prdPic4."entityId" = prd."id" AND prdPic4."entity" = '1' 
AND prdPic4."sortOrder" = 4 
LEFT OUTER JOIN "Pictures" prdPic5 ON prdPic5."entityId" = prd."id" AND prdPic5."entity" = '1' 
AND prdPic5."sortOrder" = 5 
INNER JOIN "Brands" brd ON brd."id" = prd."BrandId" 
INNER JOIN "Categories" cat ON cat."id" = prd."CategoryId" 
INNER JOIN "Partners" prt ON prt."id" = brd."PartnerId"; 

正常化品牌,分類的價值,和合作夥伴我很清楚,以減少冗餘。我不太清楚圖像表的價值。解釋分析Postgres說這個查詢需要3310毫秒返回22000行。不過,我還沒有在圖片上創建索引,所以這不是一個公平的分析。

回答

0

在這種情況下,我想我會添加文本[]類型(文本數組)的單個列。通過這種方式,您可以在需要它們的地方找到圖像,而且當您爲產品添加更多圖像時,您不一定會陷入泥end。