2011-04-12 48 views
2

行,所以我有這個問題,我需要實現......這是我的site一個好的數據庫架構

什麼,我需要做的就是售出我需要有2種是要麼一個其他產品的每個產品升級或降級。

所以每個產品都有3類標準,商業和高檔和基於當前的產品是什麼,他們要麼增加或價格下跌..

所以基本上他們每一個定製的解決方案。所以,我需要的是弄清楚構建我的分貝的最好的方法......這是我用它來拉我現在

$query = "SELECT p.ProductName, p.price, pc.quantity, p.ProductImage, p.Features 
      FROM productinfo as p 
       join preconfig_categories as pc on p.ProductID = pc.product_id 
       join preconfig as c on c.id = pc.category_id 
       join subcategory as sc on p.SubCategoryID = sc.SubCategoryID 
       WHERE c.code  = '{$type}_{$count}_{$class}' 
       order by sc.ordering"; 

我在這是目前構成的productinfo表的思維讓查詢這樣

CREATE TABLE `productinfo` (
    `ProductID` int(11) NOT NULL AUTO_INCREMENT, 
    `ProductName` varchar(255) NOT NULL, 
    `ProductImage` varchar(255) NOT NULL, 
    `CategoryID` int(11) NOT NULL, 
    `SubCategoryID` int(11) NOT NULL, 
    `ProductBrief` varchar(255) NOT NULL, 
    `Features` text NOT NULL, 
    `Specifications` text NOT NULL, 
    `Reviews` text NOT NULL, 
    `Price` varchar(255) NOT NULL, 
    `Status` tinyint(4) NOT NULL, 
    `PartName` varchar(255) NOT NULL, 
    `skip_step` tinyint(1) DEFAULT NULL, 
    PRIMARY KEY (`ProductID`) 
) ENGINE=MyISAM AUTO_INCREMENT=164 DEFAULT CHARSET=latin1; 

我在想斷增加三個額外的領域

class 
product1 
product2 

所以基本上我可以使用類來告訴現在的產品是什麼,然後其他兩個領域的產品1 d product2,它將具有其他兩種產品的ProductID ....這似乎可以工作,但我覺得這可能是一個更好的解決方案,然後可以更好地工作....任何想法輸入將強烈感謝

回答

4

我會建議有一個表與產品信息。第二個包含產品類別(標準,商業,高級)的表格,然後是第三個表格,您可以將客戶的採購映射到產品信息ID和產品類別ID。

因此,如果您將來需要添加新類別的產品(免費軟件,高級豪華等),只需將其添加到產品類表中,然後您就可以將其映射到映射表中。

因此,當客戶購買產品時,您會在映射表中映射產品ID和產品類別ID。如果它們降級,則更新映射表,現在將產品ID映射到降級的產品類別ID。

+0

對Horgan先生的回答進行了擴展:在您的ProductClasses表中放入了一個Sequence字段,以便您可以識別哪些產品正在升級,哪些產品正在降級。看起來像是額外的工作來添加一個完整的'表格,但是添加額外字段的想法不會很好地擴展。正如Horgan指出的那樣,有一天你幾乎肯定需要第四個產品級別。 – 2011-04-12 16:49:44

+0

所以可以說我有一個ProductClasses表...什麼字段將是最好的 – Trace 2011-04-12 16:52:52

+0

對於ProductClasses表,我建議你有ProductClassName(標準,商業等)和ProductClassId INTEGER NOT NULL。在映射表中,您可以映射ProductClassID,ProductTypeId和客戶端事務標識或客戶端標識。 – 2011-04-12 17:00:04

2

的幾個問題...

  1. 如果顯示的產品標準,它只是顯示的業務和優質的產品?如果產品已經是最低價了,它是否只是顯示升級...如果它是溢價,它只是顯示降級?如果不是,它是否顯示不同類別的產品以便始終顯示一次升級和一次降級?
  2. 它如何確定哪些產品與其他產品相關聯?這是以編程方式確定的東西,還是某人只是手動挑選哪些產品關聯?

如果相關產品可以通過邏輯來判斷,我覺得這是值得考慮的添加額外字段添加到產品列表,而是解決通過查詢需求的關聯。理由是,如果產品的某些標準發生變化,例如價格......那麼它可能不再被認爲是目前引用它的產品的升級或降級...然後您有數據不一致問題。

- EDIT--

謝謝你的答案。因此,如果產品協會是手動選擇的,並且每個產品都有2個且只有兩個關聯,那麼您的初始設計對我來說看起來不錯(我只是要確保添加FK)。然而,如果你認爲有一天產品可能會有不同數量的關聯......就像一個產品只有一個選擇,而另一個產品可能有4個選擇,那麼我可能會把這些關聯放到一個單獨的表中。像...

CREATE TABLE `associatedproduct` (
    `ProductID` int(11), 
    `AssociatedProductID` int(11) 
) 

這樣一來,它不會被設置爲一個產品必須有兩個關聯。您也可以在此表中添加額外的列,以描述兩種產品之間的關聯...例如產品'A'是升級產品,而產品'B'是高級升級。

+0

這樣回答第一個問題...是的,如果產品是標準的,它會顯示業務和溢價,如果產品是業務,它會顯示標準和溢價...是的,如果它的溢價那麼是的,它只顯示降級 – Trace 2011-04-12 16:33:56

+0

來回答第二個問題....現在我有一個csv的所有產品和csv有所有其他產品,以回答它不是以編程方式...他們設置石頭 – Trace 2011-04-12 16:35:40