如何设计数据库以将属性的属性存储到数据库中

时间:2012-08-11 12:16:04

标签: mysql database-design

我正在为珠宝网站设计数据库,其中有很多产品会存储。在为我坚持的产品属性设计表时。我的问题是如何在数据库中存储产品属性和子属性等。

到目前为止,我已经为产品和属性创建了3个表 -

  1. tbl_attribute

    Structure: attribute_id*, attribute_name
    
  2. tbl_products

    Structure: product_id*, category_id(FK), product_name, seo, description, metatags, length, width, height, weight, image, status
    
  3. tbl_products_attribute

    Structure: product_id(fk), attribute_id(fk), value
    

  4. 我有一种情况,假设项链有5个宝石(石头是属性),每个宝石都有以下子属性 1.石头名称 2.石头颜色 3.石材处理方法 4.石头清晰度 5.石头形状 6.石头价格

    等等....我有像石头这样的很多属性所以,请你帮我设计一下这些属性的表格。

    取决于我必须搜索(FILTER ||分面搜索)前端产品的属性。

    赞:www.firemountaingems.com


    详细属性和子属性列表:

    Alphabatical
    Availability (Sold Individualy, Sold in Bulk)
    Birth Stone
    Brands
    Color (red, green, blue)
    Design Type
    Gender (Male, Female)
    Images 
    Karat (18k, 22k, 24k)
    Link
    Make (Hand, Machine, Oxidised)
    Making Percent
    Material Type (Leather, Gemstone, etc)
    Metal Art
    Metal Stamp
    Metal Type (Gold, Silver, PLatinum etc)
    Model
    Name
    Price
    Purity
    Shapes (round, oval, emerald, diamond etc)
    Short Description
    Sides (single, both,)
    Size (small, big etc)
    Special Price
    Status
    Stone (Name, Color, Treated Method, Clearity, Shape, Price, Main Stone Color (Red, Pink, Green))
    Stringing Material
    Warranty
    Wastage Percent
    Weight
    Wire - Wrapping Wire
    

    到目前为止,我已经在网上搜索了这么多的教程和文章以及堆栈溢出。

    非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您无法负担创建这样的表,最好的方法是只有1个产品表和1个属性表,它们将具有产品的所有属性,但具有列attribute_level和parent_id,其中parent_id指的是同一个表的id。

实施例: 产品表:

ID | Name
----------
1  | Necklace


ID | ParentID | AttributeName | ProductID | AttributeLevel | AttributeDescription
----------------------------------------------------------------------------------
1  |          | Stone         | 1         | 1              | stone description in general
2  | 1        | StoneName     | 1         | 2              | Ruby 

通过这种方式,您可以在一个表格中使用属性级别。