2014-01-14 144 views
0

不同的產品有不同的一組不同的規格。產品也被分類。如何解決這種需求?任何想法將不勝感激。例如 -產品及其規格的數據庫設計需要幫助

Sony Xperia ZL 

    General Features 
     Form - Touch 
     SIM - Single SIM, GSM 
    Software 
     OS Version - Android OS, v4.1.2 (Jelly Bean) 
     Operating Freq - GSM - 850, 900, 1800, 1900; UMTS - 2100 
    Display 
     Type - TFT Capacitive 
     Size - 5-inch 



LG HD LED Television 

    GENERAL 
     Model 47LN5710 
     Screen Type  - 
     Display Size 47 Inch 

    VIDEO FEATURES 
     Aspect Ratio - 
     Dynamic Ratio - 
     View Angle 178 Degree 
+0

查看我的[similar post](http://stackoverflow.com/questions/21010251/inventory-management-with-stock-options/21113170#21113170),可能會派上用場。 –

回答

2

這取決於你正在使用它。有一個簡單的解決方案,創建一個表格,比如'規格屬性',只有兩列:產品編號,規格名稱,規格值。這將是一個簡單的解決方案 - 但不提供支持或數據完整性。

更好的解決方案是將一些保護措施放在屬性的周圍。與上面類似,它將涉及一個表格,它可以將'列'(即SIM,OS版本)存儲爲行。我建議使用預定義的屬性,甚至'類型'來限制你使用的屬性,以便查詢。

例如,

DeviceTypes 
    DeviceTypeId |  Name 
    01   |  Camera 
    02   |  Television 
    03   |  Mobile Phone 

    Category 
    CategoryId |  Name 
    01   |  General 
    02   |  Video Features 

    DeviceAttributeTypes 
    DeviceAttribTypeId| DeviceTypeId | CategoryId |AttributeName | DataType 
    01    | 01   | 01   | SIM   | Varchar 
    02    | 01   | 01   | Size   | NUMBER 
    03    | 02   | 02   | Display Size | NUMBER 
    04    | 02   | 01   | Model   | Varchar 

    DeviceAttribut 
    DeviceId | DeviceAttirbTypeId | Value 
    13  | 01     | Single Sim, GSM 
    13  | 02     | 5 
    14  | 04     | 47LN5710 

在這個例子中,你會「硬編碼」的設備類型和你想的屬性和類型分類表。這使您可以選擇按類型或類別篩選屬性。

即要獲取所有設備及其屬性的列表,您可以使用下面的查詢。然後,你可以在「WHERE」上的ID或類別的名稱或設備類型

SELECT d.DeviceName 
    ,  dat.AttributeName 
    ,  dar.Value 
    FROM Device d 
     LEFT JOIN DeviceAttribute da 
      ON d.DeviceId = da.DeviceId 
     LEFT JOIN DeviceAttributeType dat 
      ON da.DeviceAttribTypeId = dat.DeviceAttribtypeId 

添加到您在哪裏需要使用的屬性列返回結果的查詢,我總是用;用註解。 (示例here